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

时间:2016-11-23 11:53:09

标签: git gitignore

我有一个被忽略的文件夹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

1 个答案:

答案 0 :(得分:2)

当忽略是由于忽略目录中的文件而不是目录本身时,会发生这种情况。我创建了一个logs/目录,并在其中添加了一些内容并得到了相同的结果:

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

以下是我放在logs内的内容:

$ ls -A logs
foo

这就是它被忽略的原因:

$ grep foo .gitignore
foo

但是这里git check-ignore -vlogs/foo

一无所知
$ git check-ignore -v logs/

为什么

一旦目录是"空" (因为它中的所有文件都被忽略了),Git不再有趣,因为Git不会在提交中记录目录。但在这种情况下,目录本身不被忽略;它是git status的总结,限制了您只看到此处的目录。

因此,当你问Git"为什么logs/被忽略"时,答案是,它的被忽略,它&# 39;只是被忽略的内容。 (我想我们可以说这是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内容,这是我零碎的做法:在logs/foofoo .gitignore -uall {{1}} 1}},两者都使目录"变为空"。因此重复实验可能会略微不同。尽管如此,关键是使用{{1}}来查找文件名。)