根据我过去的经验和当前的互联网研究,Git 命令中的
.
(例如 git add .
)似乎是与当前目录匹配的 pathspec
。 但是,我没有在 git-scm.com 的官方 git 文档中看到这个定义。
pathspec
文档说:
pathspec语法如下:
- 任何路径都与自身匹配
- 最后一个斜杠之前的路径规范表示目录前缀。该路径规范的范围仅限于该子树。
- 路径规范的其余部分是路径名其余部分的模式。相对于目录前缀的路径将使用 fnmatch(3) 与该模式进行匹配;特别是, * 和 ? 可以匹配目录分隔符。
遵循这些规则告诉我,
.
可能与fnmatch(3)
匹配。 根据 man7.org,fnmatch(3)
检查字符串参数是否与模式参数匹配,根据 glob(7)
:
fnmatch() 函数检查字符串参数是否匹配 模式参数,它是 shell 通配符模式(请参阅 全局(7))。
glob(7)
文档定义了一些特殊的通配符,但似乎没有对.
有任何特殊支持。
如果字符串包含以下之一,则该字符串是通配符模式 字符“?”、“*”或“[”。
我在这里缺少什么? 为什么
.
匹配当前目录中的所有文件,这在哪里记录?
您的 shell(bash、zsh、csh 等)将
.
识别为当前工作目录(并将 ..
识别为当前工作目录的父目录)。 Git 只是使用 shell 传递给它的内容。
.
是类 Unix 操作系统和 Windows(以及各种其他操作系统)中的文件系统条目,指的是当前工作目录。
由于
.
是根据文件系统指向当前工作目录的路径,因此第一个 pathspec 语法规则(“任何路径与自身匹配”)使其在 Git 中具有完全相同的含义。