Git中表示当前目录的.路径规范的文档出处在哪里?
为什么
git add .中的.能匹配当前目录所有文件? 根据你提到的调研,确实Git官方pathspec通用语法文档里没有单独明确.的匹配规则,但这里的关键是要结合Git的目录处理逻辑和Unix文件系统的约定来理解:
1. Git对目录型pathspec的递归处理
Git的pathspec规则里有一条隐含逻辑:当pathspec指向一个目录时,Git会递归匹配该目录下的所有文件(除了被.gitignore排除的内容)。而.在文件系统中本身就是当前目录的指代,所以git add .本质上是告诉Git递归添加当前目录下的所有可追踪文件。
这条规则在git add的命令文档中有间接说明:当你指定一个目录作为pathspec时,Git会自动添加该目录下的所有文件(包括子目录中的文件),.作为当前目录自然适用这个逻辑。
2. 并非依赖fnmatch的通配符匹配
你提到的fnmatch(3)和glob(7)规则,是Git处理带通配符(比如*、?)的pathspec时使用的逻辑,但.不属于通配符——它是一个真实的目录路径(当前目录),所以不触发通配符匹配逻辑,而是直接按目录路径处理。
3. 官方文档的补充说明
虽然pathspec的通用语法文档没单独列.,但在Git的术语表(git help gitglossary)中,pathspec的定义包含了“相对路径”的范畴,.作为相对路径的起点,自然被Git识别为当前工作目录。同时,git add的文档明确指出,指定目录会递归添加其内容,这就是.生效的官方依据。
内容的提问来源于stack exchange,提问作者M. Justin
相关产品推荐
相关产品推荐

