Thread (5 messages) flat view 5 messages, 2 authors, 2016-06-15

Re: gitignore: negating path patterns

From: Michael J Gruber <hidden>
Date: 2016-06-15 22:44:38

Kevin Ballard venit, vidit, dixit 23.05.2008 02:23:
On May 21, 2008, at 7:52 AM, Michael J Gruber wrote:
quoted
Hi there

It seems that negating path patterns in gitignore doesn't work, or I
don't understand it (or both). With the attached script, git status
(1.5.5.1) reports "dir/a" as new and "dir/b" as untracked. I would
rather expect it to report "dir/c" as untracked also.

It seems that "!b" matches to include "dir/b" (reverting the exclusion
"*" as expected), whereas "!dir/" does not match to include "dir/c".

What's going on here?
"dir/" will not match anything, because paths are compared without  
trailing slashes. Try "!dir".
I am sorry, but this is plain wrong, at least if "man gitignore" is 
right (see below). "!dir" would match files whose name (pathname without 
leading directory name) matches "dir" (i.e.: is dir) and exclude those 
from exclusion (include them).

Also, replacing "!dir/" by "!dir" in my test script does not change the 
result. In fact, for "!dir" the result is as expected and documented, 
just for "!dir/" I would expect something else.

So, thanks for trying to help, although reading the manual or testing 
your advice before would be appreciated even more. ;)

Michael

 From man gitignore:

If the pattern ends with a slash, it is removed for the purpose of the 
following description, but it would only find a match with a directory. 
In other words, foo/ will match a directory foo and paths underneath it, 
but will not match a regular file or a symbolic link foo (this is 
consistent with the way how pathspec works in general in git).
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help