【问题标题】:Where is gitignore recursive behavior specified?gitignore 递归行为在哪里指定?
【发布时间】:2015-07-16 17:53:10
【问题描述】:

参考the online docs

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

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

下面进一步解释了双星号:

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

所以是的,文档中有一个示例说明 **/foo 等于 foo,但递归行为仍然是隐式的。

【问题讨论】:

    标签: gitignore glob


    【解决方案1】:

    像“foo”这样的规则的递归性质源于这些规则的获取和应用方式:

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

    因此,即使 .gitignore 下有多个子目录,规则“foo”仍将适用于在所述子文件夹中找到的任何“foo”文件。

    【讨论】:

    • 所以这个答案假设每个子目录中有一个内部默认的空 .gitignore 文件,不是吗?
    • @aaaaaa 没有。除了文件夹中的 .gitignore (是否存在)之外,它还会在父文件夹中查找一个。然后在父级的父级中,依此类推。当前文件夹或父文件夹之一中缺少 .gitignore 并不会停止该过程。
    猜你喜欢
    • 1970-01-01
    • 2018-03-10
    • 2021-11-16
    • 1970-01-01
    • 2023-03-13
    • 2017-05-25
    • 2013-05-09
    • 2012-07-10
    • 1970-01-01
    相关资源
    最近更新 更多