请考虑以下情形,其中我想忽略新创建的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进行了测试。
答案 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也会这样说。这似乎是命令中的缺陷。