git check-ignore输出为空但仍被忽略

我有一个文件夹logs /被忽略:

$$git status -s --ignored logs
!! logs/

但是,当我跑:

git check-ignore -v logs/

我得到空输出,这似乎表明没有什么可以忽略它.

我什么都没上演:

$git status --untracked-files=no
On branch master
nothing to commit (use -u to show untracked files)

那么为什么这个文件夹会被忽略?

$git --version
git version 2.10.2

最佳答案 当忽略是由于忽略目录中的文件而不是目录本身时,就会发生这种情况.我制作了一个日志/目录,并在其中放入了一些内容并获得了相同的结果:

$git status -s --ignored logs
!! logs/

这是我在日志中的内容:

$ls -A logs
foo

这就是它被忽略的原因:

$grep foo .gitignore
foo

但是这里git check-ignore -v没有提及logs / foo:

$git check-ignore -v logs/

为什么

一旦目录为“空”(因为它中的所有文件都被忽略),它就不再对Git感兴趣,因为Git不会在提交中记录目录.但在这种情况下,不是目录本身被忽略;这是git状态的总结,限制了你只看到这里的目录.

因此,当你问Git“为什么是日志/被忽略”时,答案就是,它不会被忽略,它只是被忽略的内容. (我想我们可以说这是git check-ignore中的一个错误.)

怎么看怎么回事

添加-uall(或–untracked = all)以查看实际被忽略的文件:

$git status -s --ignored -uall logs
!! logs/foo
$git check-ignore -v logs/foo
.gitignore:34:logs/foo  logs/foo

现在,您可以使用它们(现在不再汇总的)路径找出文件被忽略的原因.

(注意:在剪切和粘贴过程中,我可能已经多次更改了.gitignore内容,这是我零碎的:在不同时间我在.gitignore中有log / foo和foo,这两个都使目录“变空”.因此重复实验可能会略微不同.尽管如此,关键是使用-uall来查找文件名.)

点赞