git-check-ignore 列出了在工作树中创建时实际上未忽略的文件



考虑以下场景,我想忽略除新创建的 git 存储库中的foo.txt之外的所有内容。

$ git init
$ git check-ignore foo.txt bar.txt
# no output, both files are not ignored
$ echo -e "*n!foo.txt" > .gitignore
$ git check-ignore foo.txt bar.txt
# output:
# foo.txt
# bar.txt

所以该模式不起作用,因为 git 会忽略这两个文件。但事实真的是这样吗?

$ touch {foo,bar}.txt
$ git status
# output:
# Untracked files:
# foo.txt

所以这种模式确实有效。但是为什么git-check-ignore在第一次调用时输出文件呢?git-check-ignore有什么办法可以按预期尊重模式吗?

在 Linux 和 Windows 上使用 git v2.19 和 v2.20 进行测试。

这里的问题是,git check-ignore不是为了告诉你哪些文件被忽略或将被忽略,而是通过显示哪些名称与某种模式匹配来帮助您调试.gitignore文件(请注意,.gitignore只列出最后一个适用的匹配项(。 因此,在没有-v的情况下使用,这是非常具有误导性的。 -v一起使用

$ git check-ignore -v foo.txt bar.txt
.gitignore:2:!foo.txt   foo.txt
.gitignore:1:*  bar.txt

它告诉您foo.txt与第 2 行匹配,这是一个"不要忽略"指令。

如果没有-v,你看到的只是两个名字都匹配了某行。 当行以 ! 开头时,即使没有 Git 也这么说-v,那也会很有帮助。 这似乎是命令中的缺陷。

相关内容

最新更新