test/test/build64/ALL_BUILD.vcxproj

使用以下模式忽略上面的文件:
build64/

但是,下面的模式不起作用。
build64/*

最佳答案

关键区别在于build64中没有斜线。
我知道你实际上写了build64/build64/*,而且build64/里面有斜线,但是build64里面没有斜线,这就是区别。
查看the gitignore documentation并向下扫描到以模式格式为标题的部分。请注意以以下开头的要点:
如果模式以斜线结尾,则出于以下描述的目的将其删除…
我认为,文本的其余部分非常混乱,但这里的关键是build64/首先删除了它的结束斜杠,这样它就不再有斜杠了。所以现在,如果git遇到一个名为test/test/build64/ALL_BUILD.vcxproj的文件,git会将该文件名分成四个文件名组件,它们是:
test(第一个testtest/test中);
test(第二个testtest/test中);
build64;以及
ALL_BUILD.vcxproj
这四个组件中有任何一个匹配吗?为什么是,第三个组件确实匹配build64。原来的build64有一个后缀斜杠,那么这个组件是目录名而不是文件名吗?是的,它是:因此build64被规则test/test/build64/ALL_BUILD.vcxproj忽略,该规则不包含斜杠,除了不计数的结束斜杠。
另一方面,如果您写build64/,git不会删除斜杠,因此模式包含斜杠。git像以前一样分解全名build64/*,但这次,它要求所有这些名称组件都匹配完整的模式。四个名称组件是否都匹配?好吧,test/test/build64/ALL_BUILD.vcxprojbuild64/*开头,名字成分是build64/*。这不匹配,因此整个匹配立即失败。
注意,如果您将build64写为test行,git将与test/test/build64/*匹配。现在第一个组件必须匹配,第二个组件也必须匹配,当然它也匹配。第三个组件必须匹配.gitignore,最后一个组件必须匹配test/test/build64/ALL_BUILD.vcxproj。所有这些要求都得到满足,因此这将选择文件,使git对未跟踪的ness关闭。
您也可以编写test/test/build64/*,因为test匹配任何数量的主组件。这将匹配全名test,但也匹配testbuild64ALL_BUILD.vcxproj。注意,它不会匹配*,因为**/build64/*有太多组件,但是如果您匹配目录**,git可能永远不会费心在test/test/build64/ALL_BUILD.vcxproj中查找build64/file
在任何情况下,记住shell样式匹配是一次完成一个文件名组件,除了fred/build64/wilma匹配之外,这一点很重要。“all must match”规则由包含嵌入斜杠的gitignore模式触发;否则只有一个组件必须匹配。正如文档中所说的,后面的斜杠是,
为了
决定是使用“all must match”规则还是“only one must match”规则。

关于git - .gitignore subdir/*和subdir/有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52349749/

10-13 09:16