今天發生一則狀況
我這邊 update SVN (Git 叫 pull)上的程式碼以後,遲遲編譯不過!
我就去責問同事 A 你怎麼又忘了把 instance 的宣告上傳?每一次 commit 要注意所有的 change 啊!同事 A 一臉為難又莫名其妙,我回座位去做其他事,等他更新 SVN 上的程式碼。
過了十幾分鐘,同事 B 又跑來問同事 A 程式碼更新了沒?同事 B 也遇到跟我一樣的狀況。急著要程式碼的同事 B,就叫同事 A 手動把內容傳給他了!
這就怪了,難道中間這十幾分鐘,同事 A 都在位置上玩手機?
追查案情
- 首先直接看 SVN 上的程式碼,欸~怪了,明明是有更新的!
- 我這邊 local 端是否確實 update(Git 叫 pull)?有,reversion 號碼是一樣的。
- 往前追查 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,所以很容易被這種事雷到