Hi Junio, Thanks for the info and backstory. I didn't realize that the paths in the file specified by --exclude-from would be relative to the project root. That makes my original use case kind of silly (it's a long story, but I was curious which files were ignored by a subset of my .gitignore files). This makes the example I gave before wrong in that the contents of example_dir/.gitignore should have been relative to the project root. There are 2 sets of paths that can be relative to the working directory or the project root with --exclude-from: * The path to the file containing exclusion rules * The paths of the exclusion rules themselves (the contents of the file from the previous bullet point) I now see why the second needs to be relative to the project root. I still think it's more intuitive for the first (the path to the file containing exclusions) to be relative to the current directory. Your example of `git ls-files -X /var/tmp/exclude -i` uses an absolute path, let's look at one with a relative path. Say you wanted to check what files were being ignored from your .git/info/exclude file from a subdirectory of your project. I would expect to run `cd subdirectory && git ls-files --ignore --other --exclude-from=../.git/info/exclude`. The correct command, though, is `cd subdirectory && git ls-files --ignore --other --exclude-from=.git/info/exclude`, even though I'm in a subdirectory. Do you have any comments on why the path in --exclude-from=<path> is relative to the project root? Thanks, Dan On Fri, Feb 13, 2015 at 3:54 PM, Junio C Hamano <gitster@xxxxxxxxx> wrote: > Junio C Hamano <gitster@xxxxxxxxx> writes: > >> ... It does not make sense to allow where you are >> to affect behaviour of the command, i.e. in these two invocations of >> ls-files: >> >> git ls-files -X /var/tmp/exclude -i >> cd example && git ls-files -X /var/tmp/exclude -i >> >> if the same line in /var/tmp/exclude meant completely different >> things, it would be crazy. > > To put it another way, think of --exclude-from as a way to specify a > replacement for .git/info/excludes, and --exclude-per-directory as a > way to specify a replacement for the in-tree .gitignore files. > > Historically, we did not have the --exclude-standard option from the > beginning, and only after we gained experience with --exclude-from > and --exclude-per-directory in our scripts, the --exclude-standard > was added to codify the (then-) best-current-practice after the fact, > and we used --exclude-from for exactly that purpose before then. > > cf. 8e7b07c8 (git-ls-files: add --exclude-standard, 2007-11-15) -- 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