CODEOWNERS 语法:/foobar/** vs /foobar/

CODEOWNERS syntax: /foobar/** vs /foobar/

假设我想在代码所有者 GitHub 上托管的 git 存储库中的某个目录(例如 foobar)上强制执行。在 CODEOWNERS 文件中我可以指定:

/foobar/** @someuser

但这也是可能的:

/foobar/ @someuser

这两种方式有什么区别吗?是不是一模一样?

遗憾的是,documentation 没有包含任何关于此的描述。

与完整路径名匹配的模式中的两个连续星号 (**) 可能具有特殊含义:

  • 前导 ** 后跟斜杠表示匹配所有目录。例如,**/foo 匹配任何地方的文件或目录 foo,与模式 foo 相同。 **/foo/bar 匹配直接位于目录 foo.

    下的任何位置的文件或目录 bar
  • 结尾的 /** 匹配里面的所有内容。例如,abc/** 匹配目录 abc 内的所有文件,相对于 .gitignore 文件的位置,具有无限深度。

  • 一个斜杠后跟两个连续的星号,然后一个斜杠匹配零个或多个目录。例如,a/**/b 匹配 a/ba/x/ba/x/y/b 等。

  • 其他连续的星号被认为是常规星号,将按照前面的规则进行匹配。

在此处阅读更多内容:https://git-scm.com/docs/gitignore#_pattern_format

据我所知,您描述的两种模式都是一样的。由于 CODEOWNERS 文件的工作方式(几乎)与 .gitignore 相同,因此忽略文件夹将忽略其所有子文件夹。所以/foobar/**/foobar/应该是一样的。