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

时间:2019-07-15 08:24:04

标签: git

请考虑以下情形,其中我想忽略新创建的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进行了测试。

1 个答案:

答案 0 :(得分:2)

这里的问题是,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的情况下,您看到的只是两个名称都匹配一行。当行以!开头时,即使没有-v,Git也会这样说。这似乎是命令中的缺陷。