今之能者,謂能轉貼,至於魯蛇,皆能轉貼。不原創,何以別乎?

同事怎麼還不commit🤬別生氣!你們可能踩到 SVN 的大小寫地雷

今天發生一則狀況

我這邊 update SVN (Git 叫 pull)上的程式碼以後,遲遲編譯不過!

我就去責問同事 A 你怎麼又忘了把 instance 的宣告上傳?每一次 commit 要注意所有的 change 啊!同事 A 一臉為難又莫名其妙,我回座位去做其他事,等他更新 SVN 上的程式碼。

過了十幾分鐘,同事 B 又跑來問同事 A 程式碼更新了沒?同事 B 也遇到跟我一樣的狀況。急著要程式碼的同事 B,就叫同事 A 手動把內容傳給他了!

這就怪了,難道中間這十幾分鐘,同事 A 都在位置上玩手機?  


追查案情

  1. 首先直接看 SVN 上的程式碼,欸~怪了,明明是有更新的!
  2. 我這邊 local 端是否確實 update(Git 叫 pull)?有,reversion 號碼是一樣的。
  3. 往前追查 log,發現這個檔案有被改過檔名,xxx.designer.cs 改成了 xxx.Designer.cs,就改了一個字母 d 的大小寫。

於是我懷疑,是不是大小寫差異,讓 SVN 看做是不同檔案而出了差錯?


半個水落石出

搜尋"Tortoisesvn filename lower case",果然有一大堆人有跟我類似經驗。

Windows 檔名不區分大小寫,但是 SVN 區分大小寫。
所以在 Windows 底下,由小寫改過大寫以後,會造成錯亂。
我不知道這個錯亂的詳細過程是如何?目前還找不到,只知道會造成該檔案有人可以 commit 上去,別人也可以在 SVN server 上看最新程式碼,但是就沒辦法透過正常的 SVN update 把檔案拉下來。


避免方法

下次已經被 add 進 SVN 的檔案,如果要改檔名大小寫,記得要透過 SVN 本身的改名介面,不要直用 Windows 的方法改,不然就會跟我一樣踩到地雷,也委屈了倒楣的同事 A 喔!


附註

  • 基於某些原因,大家不得已在同一個 branch 上開發,所以很容易彼此干擾
  • 基於某些原因,沒辦法把 SVN 換成 Git,所以很容易被這種事雷到
Charlotte 碳排放評估案例

  1. 1. 今天發生一則狀況
  2. 2. 追查案情
  3. 3. 半個水落石出
  4. 4. 避免方法
  5. 5. 附註