A. tfs checkout為什麼自動獲取最新
前兩天討論Source Code老是被同事覆蓋的問題時,發現在VS中開始編輯時自動Check Out的代碼居然不是Latest Version,嚇了一大跳,潛意識里覺得這是一個很嚴重的Bug,因為在VSS, CVS等版本控制系統中,但Check out的時候都會自動獲取最新的版本。
而後查了MSDN Forums和相關的blog,發現居然說是TFS的By Design。按TFS團隊的說法,這是基於如下考慮:
1.假定TFS Server上的代碼總是一個完整的可用的Build,也就是說每個員工必須保證你的一個完整的Check In是必須可以Build成功的。
2.通常意義上,你開始新的工作的時候同樣應該確保你的本地版本是可以通過Build的。當然可能是跟Server上最新的版本同步的,也可能是Server上某個時刻的SnapShort,總之是一個好的版本。
3.當你需要編輯代碼的時候,Check out這個動作只是做了個Editable的標記而已。如果發現Server上有新的版本,只是提示你Server上的版本比你的Local版本要新,而不是Get Lastest Version。為何呢?因為通常意義上來說,如果Server上有一個新的版本,意味著有了一個新的ChangeSet,而一個ChangeSet並不是只有一個文件,如果你只是把正要編輯的版本Get Lastest Version,由於Code的依賴關系,很可能導致本地編譯被Block。
4.為了避免開發人員陷於此種陷阱,TFS團隊決定不是直接Get Lastest Version,而是在你完成了代碼工作後要Check In的時候告訴你有Conflict,需要再做Merge來。這樣在Check In的時候開發人員必須仔細的對比檢查,做好Merge工作才能確保在你Check In之後Server上又是一個好的Build。Merge的時候注意千萬別把別的開發人員的Code給覆蓋了。