为何.gitignore已配置仍会提交config.json配置文件?
为什么.gitignore里配置了./config.json但文件仍会被提交?
这种情况我在日常开发中碰到过好多次,大概率是下面几个核心原因导致的,咱们一个个排查解决:
1. 该文件已经被Git追踪(最常见)
Git的.gitignore规则只对未被Git追踪的文件生效。如果你的config.json在之前已经被执行过git add和git commit操作,那它已经被加入Git的追踪列表了,之后再添加的.gitignore规则就管不到它了。
怎么验证?
在终端里执行这个命令,看看输出里有没有config.json:
git ls-files --cached config.json
如果有输出,说明这个文件确实在Git的缓存追踪列表里。
解决办法:
先移除Git对该文件的追踪(不会删除本地文件,放心用):
git rm --cached config.json
然后提交这个变更:
git commit -m "Stop tracking config.json"
之后再修改config.json,Git就会忽略它,不会再提示提交了。
2. .gitignore文件的路径或语法有误
- 路径问题:如果你的
.gitignore不是放在仓库根目录,而是某个子目录里,那./config.json指的是该子目录下的config.json,如果你的实际文件在仓库根目录,这个规则就匹配不到。这种情况直接写config.json(不带./)更稳妥,不管.gitignore在哪,只要是仓库根目录的文件都能匹配到。 - 语法错误:比如规则里不小心加了多余的空格(比如写成
./config.json),或者用了错误的通配符,都会导致规则失效。检查一下.gitignore里的这行有没有多余字符。
3. 存在其他优先级更高的Git忽略规则
Git会读取多个忽略配置,比如仓库的.gitignore、全局的.gitignore(~/.gitignore_global),甚至是仓库的.git/info/exclude文件。如果其中某个配置里有!config.json(强制不忽略该文件)的规则,会覆盖你当前的忽略设置。
怎么验证?
执行下面的命令查看Git对该文件的忽略状态:
git check-ignore -v config.json
如果输出里显示其他配置文件的规则,就说明是被其他规则覆盖了。
解决办法:
找到对应的配置文件,删除或修改那个冲突的!config.json规则即可。
内容的提问来源于stack exchange,提问作者Mary
相关产品推荐
相关产品推荐

