考虑以下场景,我想忽略除新创建的 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
,那也会很有帮助。 这似乎是命令中的缺陷。