Git add处理未追踪文件时忽略通配符的原因及解决方法
Git通配符匹配异常的原因及解决方法
问题原因
Git处理git add路径时存在优先级判断:当你传入的带通配符的路径字符串,刚好完全匹配一个未被追踪的具体文件名时,Git会优先将其当作单个具体文件处理,跳过通配符解析逻辑。
你示例里的第一次git add 'f*',因为当前目录存在未追踪的f*文件,Git直接匹配这个文件加入索引,不会去解析通配符找foo。而第二次执行时,f*已经被加入索引(变成已追踪状态),Git不再将f*视为未追踪的具体文件,此时会正常解析通配符,匹配到foo并加入索引。
可靠解析通配符的方法
有两种稳定的方式让Git优先解析通配符:
- 使用
--glob选项:明确告诉Git要解析路径中的通配符,不受同名未追踪文件影响。执行命令:
这个命令无论当前是否存在git add --glob 'f*'f*文件,都会解析通配符,匹配所有符合f*规则的文件。 - 利用shell通配符展开(适合脚本中无特殊文件名的场景):去掉单引号,让shell先解析通配符再传给Git,比如:
但这种方式如果文件名包含空格、特殊字符时容易出问题,脚本中更推荐用git add f*--glob选项。
内容的提问来源于stack exchange,提问作者Piotr Siupa
相关产品推荐
相关产品推荐

