没有双星,gitignore模式不起作用

时间:2018-12-09 18:49:32

标签: git gitignore

此模式正常工作:

**/Assets/Plugins/Editor/JetBrains*

但是这种模式没有:

Assets/Plugins/Editor/JetBrains*

据我所知,这两种模式是等效的。这里可能是什么问题?

2 个答案:

答案 0 :(得分:6)

  

据我所知,这两种模式是等效的。

不是。

Git的文档功能差强人意(例如,bug吗?烦人吗?尽管它意为功能,但随便叫什么),其中.gitignore文件中的glob模式有时会锚定或扎根,但并非如此。清除此处使用的字词-有时不使用。我认为这是最好的例子。

假设您具有以下文件:

/a
/b
/dir/a
/dir/b
/dir/sub/a
/dir/sub/b

也就是说,顶层目录包含两个文件ab,以及一个目录dir。在dir中,有两个文件ab,还有另一个目录sub,在最后一个目录中,有两个文件a和{{1} }。

在您的b中列出a意味着忽略所有名为.gitignore 1 的文件,以便覆盖六个文件中的三个

但是,在您的a中列出/a意味着仅在顶层忽略名为.gitignore的文件,即仅忽略一个文件。

除结尾之外的任何位置出现斜杠都会触发此功能,因此在顶级文件中列出a意味着忽略名为{{ 1}}仅在dir/a目录中,即a。如果我们创建了一个新文件dir,则将忽略:/dir/a的含义与dir/sub/dir/a相同。

一个人可能期望只有一个前导斜杠来执行此操作,但是实际上,它是任何斜杠,除了结尾处的 确实可以这个。末尾的 表示如果在顶级dir/a中列出/dir/a,Git将忽略sub/中的两个文件,因为斜杠已被删除。从末尾开始应用“包含斜杠”规则,然后放回末尾以“匹配目录”规则。

结果是,如果您打算忽略 any 级别的.gitignore,而不仅仅是当前级别(此特定dir/sub文件位于您的工作树中的任何位置) —您需要Assets/Plugins/Editor/JetBrains*前缀。

请注意,您可以在每个 级别拥有一个.gitignore文件,因此您可以找到名为**/的目录,如果它们位于.gitignore中包含目录,请在此处创建Editor并列出其中的Assets/Plugins/。这将与在顶层写.gitignore具有相同的效果。


1 忽略确实是错误的动词。如果文件已经被跟踪,它将不会被忽略;在JetBrains*中列出文件意味着如果该文件未被跟踪,请不要抱怨它,也不要使用“添加所有文件”命令自动添加它。在某些情况下,Git有权破坏文件。但是毫无疑问地调用文件**/Assets/Plugins/Editor/JetBrains*,所以我们说“忽略” ...

答案 1 :(得分:1)

**/Assets/Plugins/Editor/JetBrains*
将忽略该路径无关紧要,Assets的根文件夹是什么,这意味着它可以嵌套。

Assets/Plugins/Editor/JetBrains*
将忽略当前文件夹

中的路径指定

**/意味着可以将其“嵌套”在当前路径位置下的任何文件夹内

相关问题