.gitignore中的否定模式如何工作?
我正在尝试使用带有否定模式的.gitignore文件(以!开头的行),但是它不能按我期望的方式工作。
作为一个简单的例子,我有以下的目录结构:
C:/gittest -- .gitignore -- aaa/ -- bbb/ -- file.txt -- ccc/ -- otherfile.txt
在我的gitignore文件中,我有这样的:
aaa/ !aaa/ccc/
我的理解(基于这个文档页面 )是文件aaa / ccc / otherfile.txt不应该被忽略,但实际上git是忽略aaa下的一切。
我误解了这句话:“一个可选的前缀!否定模式;任何先前模式排除的匹配文件将再次被包含”。
顺便说一句,这是在Windows上使用msysgit 1.7.0.2。
我认为你真正想要做的是:
aaa/* !aaa/ccc
你告诉它“不要看aaa
”,所以它甚至不检查pathaaa/ccc
。 如果使用通配符,它仍会读取aaa
的内容,那么每个条目都与通配符匹配,并被忽略,除了被重新放回的aaa/ccc
。
如果您想排除aaa
所有内容,但是包含aaa/ccc
及其下的所有内容,则应该使用:
aaa/* !aaa/ccc !aaa/ccc/*
第一行告诉git在aaa
下忽略everthing,第二行告诉它不要忽略文件夹aaa/ccc
,它实际上“启用”了第三行,然后告诉它不要忽略aaa/ccc
下面的所有内容。
如果任何人仍然没有看到新的未被忽略的项目在运行git update-index
的git status
之前可以帮助git查看更改(至less在gitbash版本1.9.x中)。