如何用Git pathspec组合glob与exclude排除任意位置的foo目录?
Git ls-files 排除任意位置foo目录的正确方法
首先明确:exclude 和 glob 这两个魔术词完全兼容,你遇到的问题是路径规范的写法不对,不是魔术词不兼容。
原命令失效的原因
你用的 :(exclude,glob):**/foo 只会匹配并排除名为foo的文件或目录本身,但不会排除foo目录下的所有子文件、子目录。所以执行后grep foo还能看到foo/xxx这类条目。
正确的单步命令
有两种可靠的写法可以彻底排除任意位置的foo目录及其所有子项:
- 匹配
foo目录下的所有内容并排除:
git ls-files -- . ':(exclude,glob):**/foo/**'
- 用末尾斜杠明确指定匹配目录(Git会自动包含其所有子项):
git ls-files -- . ':(exclude,glob):**/foo/'
执行上述任意一个命令后,再用grep foo检查,就不会出现任何foo相关的条目了。
内容的提问来源于stack exchange,提问作者Charles Nicholson
相关产品推荐
相关产品推荐

