如果要選出最近幾年在軟件工程領域最熱的技術,那毋庸置疑就是git了。作為分布式源代碼管理(DVCS)的代表,git以其超快的操作,便捷的分支合並模型和P2P模式的代碼分享模式讓軟件開發團隊的很多復雜協作成為可能,也大大提高了開發團隊的效率。雖然如此,集中式的源代碼管理(CVCS)仍然在很多大型軟件團隊中使用,這其中自然有歷史原因,但集中式源代碼控制所具備的很多特性也是分布式所不具備的,比如:代碼資產的安全性,細化到文件級別的權限管理能力(使用某些插件或者hook,git也可以做到,但這不是git內置的功能),對簽出權限的獨立控制,大型二進制文件的存儲效率。
在TFS和VSTS中,從2012年開始提供了GIT的支持,但是我們一直不能在同一個項目中混合使用集中式的TFVC和分布式的GIT,這讓很多希望嘗試GIT的用戶不得不創建新的基於GIT的項目,並將原有的代碼導入到新的項目中,如果同時還在使用工作項和構建等其他功能,就不得不在不同的項目之間進行切換才能完成某些操作。在TFS 2015 UPDATE 1中,這一情況已經得到改變,你可以很容易的在一個已有的項目中添加TFVC/GIT的存儲庫。
基於本文開始所述的原因,有些團隊可能會選擇同時使用2種配置庫,也可能會將項目的某一部分遷移至GIT而保留其他部分在TFVC中。一般來說,我們需要綜合考慮以下因素:
- -配置庫中是否保存了大量的二進制文件,如:WORD文檔,EXCEL文檔等。很多團隊將項目文檔也納入配置庫管理范疇,這種情況非常普遍。對於開發人員來說,學習和使用GIT不是什么問題,但是對於非技術人員就會很困難,所以這部分我們建議保留在TFVC中並給非技術人員安裝TFS PowerTools,讓他們可以在文件管理器中直接簽入簽出代碼。
- 某些需要文件級別權限管理的項目,一般在大型企業或者存在外包團隊的情況下會比較需要這種安全性配置。
- 對於某些超大型的項目,我們往往會將的項目放入獨立的repo中進行管理,如:將$/TeamProjectA/Main/Project1 轉換到獨立的GIT庫,將Project2轉換到另外一個GIT庫
TFVC至GIT的遷移方案(保留歷史紀錄)
如果你之前使用的是TFVC,那么你可以使用以下命令將服務器上的TFVC庫先轉換成本地的GIT庫,然后再簽入到新創建的GIT庫中。
# 這里的--deep參數將會確保所有的TFVC changeset可以轉換被本地GIT庫的commit歷史 # $/TeamProjectA/Main 這個路徑可以指向配置庫中的任何子路徑,這樣我們可以按照項目分離成不同的repo git-tf clone http://myserver:8080/tfs $/TeamProjectA/Main --deep
# 使用git remote將本地庫鏈接到遠程的git庫上,並推送代碼
git remote add origin http://myserver:8080/tfs/{collectionName}/{projectName}/_git
git push -u origin --all
這樣你就可以在全新的GIT庫上開始工作了,如果這些不同的repo之間存在引用關系,那么你可以采用git sub module或者package manager的方法來解決跨庫的引用問題。
總體來說,將一個TFVC轉換成GIT庫的時候我們需要考慮集中和分布式的優劣,項目結構和團隊協作模型的影響,這樣才能設計出最優化的配置庫結構。
參考:
TFS Power Tools 是微軟提供的TFS擴展插件,其中包括可以讓用戶直接在Windows文件管理器中右鍵點擊文件進行簽入簽出的功能
下載地址:
https://visualstudiogallery.msdn.microsoft.com/898a828a-af00-42c6-bbb2-530dc7b8f2e1
git-tf 是微軟提供的TFS擴展工具,可以將TFVC配置庫轉換成GIT庫並保持同步
下載地址:
https://visualstudiogallery.msdn.microsoft.com/898a828a-af00-42c6-bbb2-530dc7b8f2e1

