问题描述
假设我想对托管在 GitHub 上的 git 存储库中的某个目录(例如 foobar
)强制执行代码所有者。在 CODEOWNERS
文件中,我可以指定:
/foobar/** @someuser
但这也是可能的:
/foobar/ @someuser
这两种方式有什么区别吗?完全一样吗?
遗憾的是,documentation 没有包含任何关于此的描述。
解决方法
与完整路径名匹配的模式中的两个连续星号 (**
) 可能具有特殊含义:
-
前导
**
后跟斜杠表示在所有目录中匹配。例如,**/foo
匹配文件或目录foo
的任何位置,与模式foo
相同。**/foo/bar
匹配直接位于目录bar
下的任何位置的文件或目录foo
。 -
尾随的
/**
匹配里面的所有内容。例如,abc/**
匹配目录abc
内的所有文件,相对于 .gitignore 文件的位置,具有无限深度。 -
斜杠后跟两个连续的星号,然后斜杠匹配零个或多个目录。例如,
a/**/b
匹配a/b
、a/x/b
、a/x/y/b
等。 -
其他连续的星号被视为常规星号,将根据之前的规则进行匹配。
在此处阅读更多信息:https://git-scm.com/docs/gitignore#_pattern_format
据我所知,你描述的两种模式都是一样的。由于 CODEOWNERS 的工作方式(几乎)与 .gitignore
相同,因此忽略文件夹将忽略其所有子文件夹。所以 /foobar/**
和 /foobar/
应该是一样的。