今天修改公司项目文件的时候,发现被修改的文件的始终不显示已经被修改。
本来是想要把 KWh 改成 kWh,然后执行 git status 后,没有文件修改记录:
开始分析究竟是因为什么导致的这样诡异的结果:
1. 大小写不敏感?
第一反应是文件对于大小写不敏感了,想到配置 git config。
查询到有这样一条指令 git config ignorecase false 如此指令就是大小写敏感。
依照设置以后,再次执行 git status ,仍然没有文件修改 modified 的提示。
后来查询 ignorecase 这个设置应该是对于 文件名 的大小写敏感,和内容应该没有太大关系。
再次执行 git --unset-all ignorecase 删除掉设置的大小写属性,git config ignorecase true 设置为大小写不敏感,毕竟我们不需要检测文件名的大小写。
2. 文件被忽略了?
既然不是大小写的文件,看来是提交文件被忽略了。查看 .gitignore 文件,发现并没有忽略掉这个文件,更为诡异的是删除了这个文件也不提示错误,但是执行 git checkout -- [FILE_NAME] 却是可以恢复这个文件。
有点抓狂,究竟是什么导致了这样呢?
3. index 文件被忽略了
遍寻不得要领后,选择git clone 远端仓库的版本,修改同样的文件,竟然可以检测到文件的modified状态
看来 文件不能被监测到状态变化的原因是 本地仓库被设置了某种奇怪的属性。
但是是什么属性,一时又找不到原因。就暂且放置了,还好远端仓库已经提交了同样的版本。
接着又把 《Git 权威指南》找出来翻看,翻到 Git暂存区 这章节的内容的时候,突发奇想,既然 index 文件是二进制文件,如何查看它的内容呢,于是度娘一番,
git ls-files --stage 可以查看 index 保存的文件索引的内容,既然可以查看内容,
那么 index 中 有没有过滤设定呢?
重点来了,参考博客,执行 git ls-files -v 竟然真的可以看到 那个文件有 h 标记,其他正常追踪的文件是 H 标记。
1 git update-index –assume-unchanged –path 可以忽略文件 2 git update-index –no-assume-unchanged –path 可以取消忽略文件
于是执行 git update-index -no-assume-unchanged [FILE_NAME]
终于,追踪到了文件的修改状态。(擦汗!!!)
参考博客: