改用Visual Studio 2013 + TFS一段時間,與同事共同開發專案時不時出現烏龍狀況: Check In修改後的程式碼,請同事取回最新版(Get Latest Version)卻沒有如預期更新。進一步檢查發現TFS上的版本尚未Check In,但明明記得已按下Check In鈕,親眼目睹進度條跑完也沒錯誤訊息呀! 眼睜睜看著Check-In卻從Server上消失,莫非用腦過度產生幻覺,還是年老番癲早該金盆洗手?

同樣的情境上演過好幾次,大家都有過類似經驗,讓人懷疑內情不單純,TFS則被貼上了"不可靠"標籤。印象有過幾次留意到按一次Check In無效,第二次按才完成的經驗,進一步研究找出原因 -- 原來是自動合併(AutoMerge)惹的禍。

我錄了一段示範:

由於TFS不像VSS預設啟用Check-Out鎖定,因此同一份程式允許多個使用者同時Check-Out編輯,再先後Check-In,後Check-In時若系統偵測該程式已被Check-In不同版本,則會啟動自動合併或手動合併程序解決衝突,而VS2013預設會試圖自行排除合併衝突。

在以上示範,PdfJob.cs要Check-In時已被其他人先修改Check-In(修改的是另一個Method),TFS發現此一衝突,但因兩次Check-In版本所修改的地方不同,可以自行合併兩處修改不需人為裁奪,故使用AutoMerge排除衝突。但AutoMerge完成後,並不會接著進行Check-In也不會有明確警示(Output視窗會有訊息),必須再按一次Check In鈕,才能將排除衝突後的程式碼正式簽入。(註: 若因修改範圍重疊無法自動合併時,還是會警告並帶出操作介面要求人為排除)

同事與我遇到的問題,多半是按下Check In時只AutoMerge並未Check In,但看到有跑進度條又沒有警示,很容易誤以為Check In完成,才造成錯誤認知。

知道此一特性,每次Check In時只需特別留意確認有無AutoMerge,必要時再按一次Check In鈕即可避免前述的烏龍狀況。

如果不喜歡這種行為,自動排除衝突的功能也可以被關閉:

關閉後,每次遇到版本衝突都會有明顯警示並需決定衝突排除方式: (檔案一多挺囉嗦的)

相比之下,我覺得自動排除衝突方便多了,只要在Check-In時多留意一些,必要時再按一次Check-In鈕即可。


Comments

# by demo

X槽耶,感覺裡面就有神秘力量XD

Post a comment