AdSense

網頁

2026/3/15

Java Class Windows Git 檔案名稱大小寫不一致的問題

最近在Windows上使用Git碰到Java Class名稱大小寫不一致的問題。


Java的Class名稱必須與檔案名稱完全一致(包含大小寫),否則會編譯錯誤。然而Windows檔案系統是大小寫不敏感的(case insensitive),也就是ABC.javaAbC.java在檔案系統中被視為相同的檔案;而Git則是大小寫敏感(case sensitive)。

因此當只修改檔案名稱的大小寫時,會產生Git與作業系統不一致的情況。例如在VS Code中的Java class檔案上按F2AbC.java重新命名為ABC.java,Git會無法辨識這種異動,此時儘管Windows檔案系統中確實顯示ABC.java,但commit時卻仍是AbC.java,這是因為在大小寫不敏感的檔案系統上,檔名大小寫變更不被視為rename,Git index因此不會更新檔案路徑。因此必須用git mv來解決。

在經過以上更動後,也就是已修改了Class檔案名稱、Class名稱與相關引用與依賴都改為ABC.java後,先執行git mv AbC.java _tmp_AbC.java把舊的檔案重新命名為臨時檔名並commit;然後再執行git mv _tmp_AbC.java ABC.java將臨時檔名改為新的正確檔名並commit。如此Git才會更新到正確的檔名ABC.java

透過中繼檔名,能強制檔案系統實際rename,使Git正確記錄大小寫變更,最終使repo中的java檔名與Class名稱有一致的大小寫。


解決步驟

  1. 修改Class檔案名稱,e.g. AbC.javaABC.java
  2. 修改Class名稱與檔案名稱相同
  3. 修改引用與依賴為新的Class名稱
  4. 使用git mv把Class檔案名稱改為中繼名稱並commit。
  5. 使用git mv把Class檔案中繼名稱改為新的正確檔名並commit。

沒有留言:

AdSense