Re: git ls-files -X option is relative to repo root

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]