threads / discuss / 49392

git check-ignore ignores negated entries

Subject: git check-ignore ignores negated entries

## tl;dr

2 messages between Sep 20, 2018 and Sep 21, 2018.

replies: 1people: 2as markdown or json

David Alphus· Sep 20, 2018, 17:22 UTC · lore

If a .gitignore contains a ! entry, git check-ignore will still say the matching file is ignored if the file is not in the index.

Simple case to reproduce:

$ git init . $ echo "*.c" > .gitignore $ echo '!a.c' >> .gitignore $ touch a.c b.c $ git check-ignore a.c b.c a.c b.c $ git add *.c The following paths are ignored by one of your .gitignore files: b.c Use -f if you really want to add them. $ git check-ignore a.c b.c b.c $ git check-ignore --no-index a.c b.c a.c b.c $ git check-ignore --no-index --verbose a.c b.c .gitignore:2:!a.c a.c .gitignore:1:*.c b.c

In looking through check-ignore.c, it appears that we check that last_exclude_matching() returns an exclude object. It should be noted that we do not consider that exclude struct can be set with the EXC_FLAG_NEGATIVE flag. This flag says that the final matching rule should not be ignored. check_ignore needs to consider this condition in order to work properly.

Duy Nguyen· Sep 21, 2018, 16:13 UTC · re: David Alphus · lore

Re: git check-ignore ignores negated entries

On Thu, Sep 20, 2018 at 7:25 PM David Alphus <david.alphus@gmail.com> wrote:
Show 6 quoted lines
> In looking through check-ignore.c, it appears that we check that
> last_exclude_matching() returns an exclude object. It should be noted
> that we do not consider that exclude struct can be set with the
> EXC_FLAG_NEGATIVE flag. This flag says that the final matching rule
> should not be ignored.
> check_ignore needs to consider this condition in order to work properly.

I haven't checked the code yet. But since you already did, patches are welcome ;-)

-- 
Duy

← back to recent threads