git add -A是否遵循.gitignore规则?已忽略目录为何被重新追踪?
问题分析与解决
核心结论
git add -A是遵循.gitignore规则的,你的问题出在忽略规则写法不准确,以及操作流程顺序的疏漏。
为什么target目录会被重新追踪?
你使用的./*/target/规则仅匹配当前目录下直接子目录中的target目录(比如foo/target/),无法匹配更深层级的目录(比如foo/bar/target/),也不匹配根目录下的target/。当执行git add -A时,那些未被规则覆盖的target目录会被当作未追踪文件重新加入缓存。
正确解决步骤
修正.gitignore规则
将规则改为**/target/,这个通配符会匹配所有层级的target目录,无论它在项目的哪个位置。彻底移除缓存中的target目录
用你原来的命令确保所有target目录都从Git缓存中清除:find . -type d -name 'target' -print0 | xargs -0 git rm --cached -r --提交关键修改
先提交.gitignore的修改和缓存移除操作,避免后续操作重复触发问题:git add .gitignore git commit -m "Ignore all target directories and remove from Git cache"后续正常操作
之后再执行git add -A,就不会再把target目录添加到追踪列表里了。
补充说明
如果后续仍有个别target目录被意外添加,检查该目录下是否存在未被忽略的已追踪文件——Git会因为追踪目录内的文件而间接追踪目录本身,这种情况需要单独移除该文件的缓存并补充对应忽略规则。
内容的提问来源于stack exchange,提问作者brianxk
相关产品推荐
相关产品推荐

