指定gitignore递归行为在哪里?

时间:2015-07-16 17:53:10

标签: gitignore glob

参考the online docs

  

如果模式不包含斜杠/,Git会将其视为shell glob模式,并检查相对于.gitignore文件位置的路径名匹配(相对于工作树的顶层,如果不是一个.gitignore文件)。

对我来说,这个文档说,给定一个模式' foo',任何名为“foo”的文件或目录。将仅相对于.gitignore文件被忽略。我没有读过解释其递归行为的任何内容。 Shell globs(来自what I read和经验)不是递归的。

现在进一步说明双星号:

  

领先" **"后跟斜杠表示在所有目录中匹配。例如," ** / foo"匹配文件或目录" foo"任何地方,与模式相同" foo"

所以是的,在文档中有一个例子解释**/foo等于foo,但递归行为仍然是隐含的。

1 个答案:

答案 0 :(得分:3)

" foo"等规则的递归性质源自这些规则的获取和应用方式:

  

从与路径相同的目录中的.gitignore文件读取的模式,或在任何父目录中读取的模式,以及更高级别文件中的模式(直到工作树的顶层) )被低级文件中的那些文件覆盖到包含该文件的目录。

所以即使是.gitignore下面的多个子目录,规则" foo"仍将适用于任何" foo"在所述子文件夹中找到的文件。