今天修改公司項目文件的時候,發現被修改的文件的始終不顯示已經被修改。
本來是想要把 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]
終於,追蹤到了文件的修改狀態。(擦汗!!!)
參考博客: