我试图使用带有否定模式的.gitignore文件(以!开头的行),但它没有按照我期望的方式工作。
作为一个最小的例子,我有以下目录结构:
C:/gittest
-- .gitignore
-- aaa/
-- bbb/
-- file.txt
-- ccc/
-- otherfile.txt
在我的gitignore文件中,我有这个:
aaa/
!aaa/ccc/
我的理解(基于this doc page)是文件aaa / ccc / otherfile.txt不应该被忽略,但实际上git忽略了aaa下的所有内容。
我误解了这句话:“一个可选的前缀!否定了模式;之前模式排除的任何匹配文件都会再次被包含在内。”?
BTW,这是在Windows上使用msysgit 1.7.0.2。
答案 0 :(得分:123)
我认为你真正想做的是:
aaa/*
!aaa/ccc
你告诉它“不要查看aaa
”因此它甚至都不会检查路径aaa/ccc
。如果您使用通配符,它仍然会读取aaa
的内容,然后每个条目都匹配通配符并被忽略,但aaa/ccc
将被放回。
答案 1 :(得分:13)
如果您要排除aaa
中的所有内容,但包含aaa/ccc
及其下的所有内容,则应使用:
aaa/*
!aaa/ccc
!aaa/ccc/*
第一行告诉git忽略aaa
下的翻转,第二行告诉它不要忽略实际“启用”第三行的文件夹aaa/ccc
,然后告诉它不要忽略aaa/ccc
下面的所有内容。 {1}}。
答案 2 :(得分:1)
如果有人仍然没有看到git status
之前运行git update-index
的新未被忽略的项目可以帮助git查看更改(至少在gitbash版本1.9.x中) )。