On Sat, May 30, 2009 at 05:30:52PM +0200, Erik Sandberg wrote: > If a version-controlled file is ignored by git, and a conflict arises > on the file, and I use mergetool to resolve the conflict, then > mergetool fails with a message like: > > The following paths are ignored by one of your .gitignore files: > a > Use -f if you really want to add them. > > The problem disappears if I edit the git-mergetool script to always > pass -f to "git add", but I'm not sure if that's the right fix; I have > a vague feeling that "git-update-index --add" could be more correct. Actually, I think the problem is not in mergetool at all, but with the dir.c code underlying "git add". "git add" really should not be complaining, because you are not adding a new path at all, but are rather adding content to a tracked path. So this should work (and does): $ echo file >.gitignore $ echo content >file $ git add -f file ;# need -f because we are adding new path $ echo more content >>file $ git add file ;# don't need -f; it is not actually an "other" file This is handled under the hood by the COLLECT_IGNORED option to read_directory. When that code finds an ignored file, it checks the index to make sure it is not actually a tracked file. However, the test it uses does not take into account unmerged entries, and considers them to still be ignored. "git ls-files" uses a more elaborate test and gets the right answer. So I think we want to use the same test: --- diff --git a/dir.c b/dir.c index 0e6b752..bbfcb56 100644 --- a/dir.c +++ b/dir.c @@ -396,7 +396,7 @@ static struct dir_entry *dir_add_name(struct dir_struct *dir, const char *pathna static struct dir_entry *dir_add_ignored(struct dir_struct *dir, const char *pathname, int len) { - if (cache_name_pos(pathname, len) >= 0) + if (!cache_name_is_other(pathname, len)) return NULL; ALLOC_GROW(dir->ignored, dir->ignored_nr+1, dir->ignored_alloc); -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html