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

问题描述

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

/foobar/** @someuser

但这也是可能的:

/foobar/ @someuser

这两种方式有什么区别吗?完全一样吗?

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

解决方法

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

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

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

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

  • 其他连续的星号被视为常规星号,将根据之前的规则进行匹配。

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

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