.gitignore 双星无法从中间目录递归工作?

Mir*_*ral 0 git gitignore

使用 git 版本 2.34.0.windows.1

我的存储库的根目录中有一个/.gitignore文件,其中通常有扩展名被忽略的嫌疑(这里并不真正相关)。

在树的中间 ( /a/b/c/.gitignore),我有另一个文件,我想说“在该目录下递归,忽略任何名为 的目录devl,除了直接在其中的一个特定文件扩展名”。所以我制定了以下规则:

devl/**
!devl/*.dat
Run Code Online (Sandbox Code Playgroud)

不幸的是,这似乎不起作用——git 仍然将文件报告/a/b/c/d/devl/test/foo.bar为未跟踪,而不是忽略。(它根本不会忽略目录树中的任何内容devl。)

我可以通过使用以下规则来解决这个问题,但据我从文档中可以看出,上述内容应该是合法且有效的:

/**/devl/**
!/**/devl/*.dat
Run Code Online (Sandbox Code Playgroud)

为什么是这样?这是错误还是误解?

lxv*_*xvs 5

不幸的是,您没有足够仔细地阅读文档......

如果模式的开头或中间(或两者)有分隔符,则该模式相对于特定 .gitignore 文件本身的目录级别。否则,该模式也可能在 .gitignore 级别以下的任何级别匹配。

你的第一个模式在中间devl/**有一个,所以它是相对于目录的。//a/b/c/

因此,/a/b/c/devl/test/foo.bar应该排除,而/a/b/c/d/devl/test/foo.bar不应排除。