Git如何配置.gitignore忽略所有X子目录仅保留C目录下X文件夹
.gitignore 全局忽略X子目录、仅保留C/X目录的配置方法
当前仓库简化目录结构:
Git-Repository └─── A │ └─── X │ └─── Y └─── B │ └─── X │ └─── Y └─── C │ └─── X │ └─── Y │ ....
需求:配置.gitignore忽略所有路径下的X子目录,仅保留根目录C文件夹下的X子目录不被忽略,因实际仓库目录量级大,不支持逐个路径单独配置。
原有配置失效原因
之前尝试的配置:
X/ !C/X/*
失效是Git忽略规则的固有逻辑导致的:
- 一旦某个父目录被规则命中忽略,Git不会再递归扫描该目录下的任何内容,写在该目录子路径上的反向忽略(
!开头)规则完全不会被触发。X/规则会命中全仓库所有名为X的目录,包括C/X,Git直接跳过这个目录的扫描流程,后续的反向规则自然不生效。 - 原有反向规则写的是
!C/X/*,只能匹配X目录下的第一层内容,既没有保留X目录本身,也无法覆盖X目录下的嵌套子目录内容。
正确可用配置
将以下规则写入.gitignore即可实现需求:
# 匹配全仓库所有层级的X目录并忽略 **/X/ # 反向保留C目录下的X目录本身,让Git可以扫描该目录内容 !C/X/ # 反向保留C/X目录下的所有文件、子目录及嵌套内容 !C/X/**
注意事项
如果配置规则前已经将对应目录提交/加入Git追踪缓存,执行以下命令清理缓存后重新提交即可让规则生效:
git rm -r --cached . git add .
内容的提问来源于stack exchange,提问作者Miguel
相关产品推荐
相关产品推荐

