我有一个logs/被忽略的文件夹:
$ $ git status -s --ignored logs
!! logs/
Run Code Online (Sandbox Code Playgroud)
但是,当我运行时:
git check-ignore -v logs/
Run Code Online (Sandbox Code Playgroud)
我得到空输出,这似乎表明没有什么可以忽略它。
我没有什么上演的:
$ git status --untracked-files=no
On branch master
nothing to commit (use -u to show untracked files)
Run Code Online (Sandbox Code Playgroud)
那么为什么这个文件夹会被忽略呢?
$ git --version
git version 2.10.2
Run Code Online (Sandbox Code Playgroud)
当忽略是由于忽略目录内的文件而不是目录本身时会发生这种情况。我创建了一个logs/目录并将一些东西放入其中并得到与您相同的结果:
$ git status -s --ignored logs
!! logs/
Run Code Online (Sandbox Code Playgroud)
这是我放在里面的内容logs:
$ ls -A logs
foo
Run Code Online (Sandbox Code Playgroud)
这就是它被忽略的原因:
$ grep foo .gitignore
foo
Run Code Online (Sandbox Code Playgroud)
但这里git check-ignore -v只字未提logs/foo:
$ git check-ignore -v logs/
Run Code Online (Sandbox Code Playgroud)
一旦目录为“空”(因为其中的所有文件都被忽略),Git 不再对它感兴趣,因为 Git 不会在提交中记录目录。但在这种情况下,并不是目录本身被忽略;它的总结git status限制了您只能看到此处的目录。
因此,当你问 Git“为什么被logs/忽略”时,答案是,有点,它没有被忽略,它只是被忽略的内容。(我想我们可以说这是 . 中的一个错误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
Run Code Online (Sandbox Code Playgroud)
现在您可以使用文件(现在不再汇总)路径找出文件被忽略的原因。
(注意:我可能.gitignore在剪切和粘贴过程中多次更改了上面的内容,这是我零碎的:在不同的时间我有logs/foo和foo在.gitignore,这两者都使目录“变空”。所以重复实验可能会略有不同输出。不过,关键是-uall用来查找文件名。)