如果模式不包含斜杠/,Git会将其视为shell glob模式,并检查相对于.gitignore文件位置的路径名匹配(相对于工作树的顶层,如果不是一个.gitignore文件)。
对我来说,这个文档说,给定一个模式' foo',任何名为“foo”的文件或目录。将仅相对于.gitignore文件被忽略。我没有读过解释其递归行为的任何内容。 Shell globs(来自what I read和经验)不是递归的。
现在进一步说明双星号:
领先" **"后跟斜杠表示在所有目录中匹配。例如," ** / foo"匹配文件或目录" foo"任何地方,与模式相同" foo"
所以是的,在文档中有一个例子解释**/foo
等于foo
,但递归行为仍然是隐含的。
答案 0 :(得分:3)
" foo
"等规则的递归性质源自这些规则的获取和应用方式:
从与路径相同的目录中的
.gitignore
文件读取的模式,或在任何父目录中读取的模式,以及更高级别文件中的模式(直到工作树的顶层) )被低级文件中的那些文件覆盖到包含该文件的目录。
所以即使是.gitignore下面的多个子目录,规则" foo
"仍将适用于任何" foo
"在所述子文件夹中找到的文件。