threads / discuss / 64846

Re: .gitignore issue

Subject: Re: .gitignore issue

## tl;dr

3 messages between Jan 21, 2026 and Jan 21, 2026.

replies: 2people: 3as markdown or json

Pushkar Singh· Jan 21, 2026, 18:51 UTC · lore
Hi Alf,

This is expected behavior. When a directory matches an ignore rule, Git stops descending into it entirely. The pattern

        backup_STOCKS*/
matches directories starting with backup_STOCKS, and once Git prunes traversal at that level, similarly prefixed paths can disappear from git status, which is why backups/ no longer shows up.
This isn’t a bug, but a result of how ignore patterns and directory pruning work.
If you want to ignore only those directories and nothing else, anchoring the pattern helps:
        /backup_STOCKS_*/
You can also verify which rule is responsible with:
        git check-ignore -v backups/
Hope that clears it up.

Best, Pushkar

Jeff King· Jan 21, 2026, 21:03 UTC · re: Pushkar Singh · lore
On Wed, Jan 21, 2026 at 06:51:02PM +0000, Pushkar Singh wrote:
Show 8 quoted lines
> This is expected behavior.
> When a directory matches an ignore rule, Git stops descending into it entirely. The pattern
> 
>         backup_STOCKS*/
> 
> matches directories starting with backup_STOCKS, and once Git prunes traversal at that level, similarly prefixed paths can disappear from git status, which is why backups/ no longer shows up.
> 
> This isn’t a bug, but a result of how ignore patterns and directory pruning work.

I found this explanation confusing: surely we would never match "backups/" itself via a pattern like "backup_STOCKS*". And I'm not sure what you mean by "similarly prefixed paths".

But what I suspect is happening here (and what you were trying to get at) is that Git will not report an empty directory as untracked. And one that consists only of ignored files is considered empty.

So a simpler example:
  git init
  mkdir subdir
  git status

At this point "git status" will report nothing, because there are no files at all.

If we add a file:
  echo foo >subdir/file
  git status

Now "subdir/" is untracked (unless you use --untracked-files=all, in which case we actually list "subdir/file" itself).

And if we ignore it like this:
  echo subdir/file >.gitignore
  git status

Now subdir/ is no longer reported. And we get the same effect with an un-anchored top-level pattern, which also matches in subdirectories:

  echo file >.gitignore
  git status

We can't know for certain this is what's going on because Alf didn't show us what's in the backups/ directory, but one imagines it is also full of backup_STOCKS_* directories.

Show 7 quoted lines
> If you want to ignore only those directories and nothing else, anchoring the pattern helps:
> 
>         /backup_STOCKS_*/
> 
> You can also verify which rule is responsible with:
> 
>         git check-ignore -v backups/
So yes, both of these are very good advice.
-Peff
Junio C Hamano· Jan 21, 2026, 21:09 UTC · re: Jeff King · lore
Jeff King <peff@peff.net> writes:
Show 14 quoted lines
> On Wed, Jan 21, 2026 at 06:51:02PM +0000, Pushkar Singh wrote:
>
>> This is expected behavior.
>> When a directory matches an ignore rule, Git stops descending into it entirely. The pattern
>> 
>>         backup_STOCKS*/
>> 
>> matches directories starting with backup_STOCKS, and once Git prunes traversal at that level, similarly prefixed paths can disappear from git status, which is why backups/ no longer shows up.
>> 
>> This isn’t a bug, but a result of how ignore patterns and directory pruning work.
>
> I found this explanation confusing: surely we would never match
> "backups/" itself via a pattern like "backup_STOCKS*". And I'm not sure
> what you mean by "similarly prefixed paths".

Great minds think alike. I was writing almost identical response about backups/ being full of backups/backup_STOCKS_{1,2,3,4} and nothing unignored in there.

> We can't know for certain this is what's going on because Alf didn't
> show us what's in the backups/ directory, but one imagines it is also
> full of backup_STOCKS_* directories.
Thanks.

← back to recent threads