git check-ignore 输出为空但仍被忽略
git check-ignore output empty but still being ignored
我有一个被忽略的文件夹 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
当忽略是由于忽略目录内的文件而不是目录本身时,会发生这种情况。我创建了一个 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/
为什么
一旦目录为 "empty"(因为其中的所有文件都被忽略),Git 不再感兴趣,因为 Git 不会在提交中记录目录。但是在这种情况下,并不是 目录本身 被忽略了;而是这是来自 git status
的总结,限制了您只能在此处查看目录。
因此,当您询问 Git "why is logs/
ignored" 时,答案是 没有 被忽略,只是 contents 被忽略。 (我想我们可以说这是 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
,两者都创建了目录 "become empty"。因此重复实验可能会得到略有不同的输出。尽管如此,关键是使用 -uall
来查找文件名。)
我有一个被忽略的文件夹 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
当忽略是由于忽略目录内的文件而不是目录本身时,会发生这种情况。我创建了一个 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/
为什么
一旦目录为 "empty"(因为其中的所有文件都被忽略),Git 不再感兴趣,因为 Git 不会在提交中记录目录。但是在这种情况下,并不是 目录本身 被忽略了;而是这是来自 git status
的总结,限制了您只能在此处查看目录。
因此,当您询问 Git "why is logs/
ignored" 时,答案是 没有 被忽略,只是 contents 被忽略。 (我想我们可以说这是 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
,两者都创建了目录 "become empty"。因此重复实验可能会得到略有不同的输出。尽管如此,关键是使用 -uall
来查找文件名。)