我有一个被忽略的文件夹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
答案 0 :(得分:2)
当忽略是由于忽略目录中的文件而不是目录本身时,会发生这种情况。我创建了一个logs/
目录,并在其中添加了一些内容并得到了相同的结果:
$ git status -s --ignored logs
!! logs/
以下是我放在logs
内的内容:
$ ls -A logs
foo
这就是它被忽略的原因:
$ grep foo .gitignore
foo
但是这里git check-ignore -v
对logs/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/foo
和foo
.gitignore
-uall
{{1}} 1}},两者都使目录"变为空"。因此重复实验可能会略微不同。尽管如此,关键是使用{{1}}来查找文件名。)