test/test/build64/ALL_BUILD.vcxproj
上面的文件将使用以下模式忽略:
build64/
但是,以下模式不起作用。
build64/*
答案 0 :(得分:2)
关键区别在于build64
中没有斜杠。
我知道您实际上写过build64/
和build64/*
,并且build64/
确实中有斜线,但是build64
确实没什么,这就是所有不同的原因。
查看the gitignore documentation,然后向下扫描到以 PATTERN FORMAT (样式)为标题的部分。请注意以以下内容开头的要点:
- 如果图案以斜杠结尾,则出于以下描述的目的将其删除...
我认为本文的其余部分非常令人困惑-太令人困惑-但是这里的关键是build64/
的结尾斜杠先被删除了,所以它不会再加一个斜线。因此,现在,如果Git遇到名为test/test/build64/ALL_BUILD.vcxproj
的文件,则Git将该名称分为四个文件名组成部分 :
test
(test
中的第一个test/test
); test
(test
中的第二个test/test
); build64
;和ALL_BUILD.vcxproj
。这四个组成部分中的任何一个都与build64
相匹配吗?为什么是,第三个组件确实匹配build64
。原始的build64
带后缀斜杠,那么该组件是目录名称而不是文件名吗?是的,它是:因此test/test/build64/ALL_BUILD.vcxproj
被规则build64/
忽略,该规则不包含斜杠,但末尾的斜杠不计算在内。
另一方面,如果您写build64/*
,则Git 不会删除斜杠,因此该模式包括一个斜杠。 Git完全像以前一样分解全名test/test/build64/ALL_BUILD.vcxproj
,但是这一次,它要求 all 这些名称组成部分必须与 complete模式相匹配。 所有四个名称组成都与build64/*
匹配吗?好吧,build64/*
以build64
开头,名字部分为test
。 不匹配,因此整个匹配立即失败。
请注意,如果您将test/test/build64/*
写为.gitignore
行,则Git将test/test/build64/ALL_BUILD.vcxproj
与test/test/build64/*
相匹配。现在,第一个组件test
必须与test
匹配(确实如此),第二个组件也必须与test
匹配,当然它也要匹配。第三个成分必须与build64
匹配,而最后一个成分ALL_BUILD.vcxproj
必须与*
匹配。所有这些要求都得到满足,因此该将选择要关闭Git的文件以保持跟踪状态。
您还可以编写**/build64/*
,因为**
与任意数量的前导组件匹配。这将匹配全名test/test/build64/ALL_BUILD.vcxproj
,但也匹配build64/file
,fred/build64/wilma
和fred/wilma/build64/betty
。请注意,它不会匹配fred/wilma/build64/barney/betty
,因为barney/betty
的组件太多–但是,如果您匹配目录fred/wilma/build64/barney
,Git可能永远不会打扰 fred/wilma/build64/barney/
内来查找betty
。
无论如何,重要的是要记住,除了**
匹配项以外,一次
出于以下目的而被删除
决定使用“所有必须匹配”还是“仅一个必须匹配”规则。