On Thu, 15 Nov 2007, Bruce Stephens wrote: > > So surely sub1/sub2/foo ought to be included again? Or is the first > line in sub1/.gitignore not "a previous pattern" in this sense? Yes. The negated patterns have to show up *before* the patterns that they override, because the first pattern that matches is the one that is used. > If I move the "foo" pattern up a level, creating a .gitignore in base > just containing "foo", then sub1/sub2/foo is still regarded as > ignored, even though it surely matches the negating pattern > sub1/.gitignore, and that should be of higher precedence than the > pattern in base/.gitignore? The priority between nested .gitignore files should be that inner files have higher priority than outer files (since the inner ones "know more", and the outer ones are "generic"). So what you describe sounds wrong. But my quick test didn't actually support the behaviour you see. In this situation: [torvalds@woody git-test]$ cat .gitignore a* [torvalds@woody git-test]$ cat subdir/.gitignore !a-ok [torvalds@woody git-test]$ find * all-files subdir subdir/a-ok [torvalds@woody git-test]$ git ls-files -o --exclude-per-directory=.gitignore .gitignore subdir/.gitignore subdir/a-ok ie we *do* show "showdir/a-ok" (but we don't show "all-files") because a-ok is explicitly marked to be not ignored by a higher-priority rule. Side note: "git status" uses the "--directory" flag, so it will not even recurse into unknown directories, and will instead apply the gitignore rules to the directory names, so you get: [torvalds@woody git-test]$ git ls-files -o --exclude-per-directory=.gitignore --directory .gitignore subdir/ which doesn't show "a-ok", but that's for a totally unrelated reason and has nothing to do with .gitignore! Linus - 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