路径规范
用于限制 Git 命令中路径的模式。
路径规范用于“git ls-files”、“git ls-tree”、“git add”、“git grep”、“git diff”、“git checkout”和许多其他命令的命令行上将操作范围限制在树或工作树的某个子集。有关路径是相对于当前目录还是顶级目录,请参阅每个命令的文档。 pathspec 语法如下:
任何路径都匹配自己
直到最后一个斜杠的路径规范代表一个目录前缀。该路径规范的范围仅限于该子树。
路径规范的其余部分是路径名其余部分的模式。相对于目录前缀的路径将使用 fnmatch(3) 与该模式匹配;特别是 * 和 ?可以匹配目录分隔符。
例如,Documentation/*.jpg 将匹配 Documentation 子树中的所有 .jpg 文件,包括 Documentation/chapter_1/figure_1.jpg。
以冒号 : 开头的路径规范具有特殊含义。在简写形式中,前导冒号 : 后跟零个或多个“魔术签名”字母(可选地以另一个冒号 : 结尾),其余部分是与路径匹配的模式。 “魔术签名”由既不是字母数字、glob、正则表达式特殊字符也不是冒号的 ASCII 符号组成。如果模式以不属于“魔术签名”符号集且不是冒号的字符开头,则可以省略终止“魔术签名”的可选冒号。
在长格式中,前导冒号 : 后跟一个左括号(以逗号分隔的零个或多个“魔术词”列表和一个右括号),其余部分是匹配的模式路径。
只有冒号的路径规范意味着“没有路径规范”。此表单不应与其他路径规范结合使用。
顶部
神奇的词 top(神奇的签名:/)使模式从工作树的根开始匹配,即使您从子目录中运行命令也是如此。
文字
模式中的通配符,例如 * 或 ?被视为文字字符。
情况
不区分大小写的匹配。
全局
Git 将模式视为适合 fnmatch(3) 使用的带有 FNM_PATHNAME 标志的 shell glob:模式中的通配符将不匹配路径名中的 /。例如,“Documentation/*.html”匹配“Documentation/git.html”,但不匹配“Documentation/ppc/ppc.html”或“tools/perf/Documentation/perf.html”。
与完整路径名匹配的模式中的两个连续星号(“**”)可能具有特殊含义:
前导“**”后跟斜杠表示在所有目录中都匹配。例如,“**/foo”匹配任何地方的文件或目录“foo”,与模式“foo”相同。 "*/foo/bar" > 匹配目录 "foo" 下的任何位置的文件或目录 "bar"。
结尾的“/**”匹配里面的所有内容。例如,“abc/**”匹配目录“abc”中的所有文件,相对于 .gitignore 文件的位置,具有无限深度。
斜杠后跟两个连续的星号,然后斜杠匹配零个或多个目录。例如,“a/**/b”匹配“a/b”、“a/x/b”、“a/x/y/b”等。
其他连续的星号被认为是无效的。
全局魔法与文字魔法不兼容。
属性
在 attr: 之后是一个空格分隔的“属性要求”列表,
必须满足所有这些条件才能使路径被视为
匹配;这是对通常的非魔法路径规范模式的补充
匹配。参见 gitattributes(5)。
路径的每个属性要求都采用以下形式之一:
“ATTR”要求设置属性ATTR。
“-ATTR”要求取消设置属性ATTR。
"ATTR=VALUE" 要求属性 ATTR 设置为字符串 VALUE。
"!ATTR" 要求属性 ATTR 未指定。
请注意,当与树对象匹配时,属性仍然是从工作树中获取的,而不是从给定的树对象中获取的。
排除
在路径匹配任何非排除路径规范后,它将遍历所有排除路径规范(魔术签名:!或其同义词 ^)。如果匹配,则忽略该路径。当没有非排除路径规范时,排除将应用于结果集,就像在没有任何路径规范的情况下调用一样。