如果要選出最近幾年在軟體工程領域最熱的技術,那毋庸置疑就是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