此模式正常工作:
**/Assets/Plugins/Editor/JetBrains*
但是这种模式没有:
Assets/Plugins/Editor/JetBrains*
据我所知,这两种模式是等效的。这里可能是什么问题?
答案 0 :(得分:6)
据我所知,这两种模式是等效的。
不是。
Git的文档功能差强人意(例如,bug吗?烦人吗?尽管它意为功能,但随便叫什么),其中.gitignore
文件中的glob模式有时会锚定或扎根,但并非如此。清除此处使用的字词-有时不使用。我认为这是最好的例子。
假设您具有以下文件:
/a
/b
/dir/a
/dir/b
/dir/sub/a
/dir/sub/b
也就是说,顶层目录包含两个文件a
和b
,以及一个目录dir
。在dir
中,有两个文件a
和b
,还有另一个目录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*
将忽略当前文件夹
**/
意味着可以将其“嵌套”在当前路径位置下的任何文件夹内