我有一个foo
目录,其中包含2个文件,bar
和baz
。我在.gitignore
目录上方有以下foo
文件:
foo/
!foo/baz
我希望这会忽略foo
目录中的所有内容,但不忽略baz
。
但是,foo
中的所有内容仍然被忽略。如果我运行git check-ignore foo/*
,我会得到:
foo/bar
foo/baz
我做错了什么?
答案 0 :(得分:3)
可选前缀"
!
"否定了这种模式;任何匹配的文件 被先前模式排除的将被再次包括在内。它不是 如果该文件的父目录是,则可以重新包含文件 排除。 Git没有列出性能排除的目录 原因,所以包含文件的任何模式都没有效果,无论如何 他们被定义的地方。在第一个前面放一个反斜杠("\
") "!
"对于以文字"!
"开头的模式,例如, "\!important!.txt
"
相反,您可以这样做:
foo/*
!foo/baz
这是一个示例会话,以便您可以看到它的实际效果:
:: tree
.
`-- foo/
|-- bar
`-- baz
:: cat .gitignore
foo/*
!foo/baz
:: git status -sb
## Initial commit on master
?? .gitignore
?? foo/
:: git add foo
:: git status -sb
## Initial commit on master
A foo/baz
?? .gitignore
请注意,添加了baz但忽略了bar。
如果baz不在foo中,看看会是什么样子,我们可以重置然后删除baz:
:: git reset
:: rm foo/baz
:: git status -sb
## Initial commit on master
?? .gitignore
请注意,即使foo / bar仍然存在,foo也不会显示在此处。