有些同學在 Git 倉庫對文件/文件夾進行命名時,剛開始是小寫,后來為了保持團隊一致,又改成了大寫,然而 Git 不會發現大小寫的變化,此時就出了問題:導致倉庫里出現了 大小寫 同時存在的兩個文件。但在 Windows、Mac 的電腦磁盤里,肉眼卻能只看到一個文件,實在奇葩。
問題復現路徑
(1)新建一個 test 文件(大小寫不敏感的狀態下),並提交。
(2)本地修改 test 變為 Test,文件內容無變更,無法提交。
(3)執行 git config core.ignorecase false
,設 置Git的規則為 區分大小寫(大小寫敏感),然后 git push 提交,查看結果,此時遠程倉庫會存在 大小寫 同時存在的文件,但本地倉庫卻只看到其中一個文件。
(4)甚至可能出現這種異常情況:本地暫存區的文件,怎么刪也刪不掉。再之后,從 test 嘗試改為 Test 時,提示命名沖突。
錯誤的解決辦法
git mv test Test
執行上面的命令時,會報錯:fatal: renaming 'Test' failed: Invalid argument
正確的解決辦法
# 將本地的 test、Test 目錄都刪掉,並生成一個新的目錄 Temp
git mv Test Temp
# 將 Temp 目錄改成 Test 目錄。此時,項目中只會存在 Test 目錄,不會存在 test 目錄。目標達成。
git mv Temp Test
執行完上面的兩個命令之后,項目中只會存在 Test 目錄,不會存在 test 目錄。目標達成。
關於 是否區分大小寫 的補充說明
我們知道:針對文件/文件夾,Windows 系統和 Mac 系統是不區分大小寫的;Linux 系統是區分大小寫的;Git 默認是不區分大小寫的,也可以通過改配置項,改為區分大小寫。
不分區大小寫,也有它的好處,比如:文件夾/文件的路徑,很多時候就代表了網站地址、頁面url的路徑。而網站地址也是不區分大小寫的,這是很關鍵的原因之一。
關於 Git是否區分大小寫 的補充
前面講到,Git 默認是不區分大小寫的,可以通過命令git config --get core.ignorecase
查到,默認值是 true。
我們也可以修改 Git 的這一配置項,改為區分大小寫,配置命令為git config core.ignorecase false
。
但我建議你保留 Git 的默認配置項,不要隨意自行修改,避免產生其他的麻煩~