2013-11-22 40 views
1

我們正在更新從VSS到TFS2010的大型項目,我們需要建立良好的分支/合併策略。我們贊成功能分支,但我不知道我們是否應該只分支每個功能中受影響的子項目/文件(就像我們在VSS中那樣),還是應該始終分支整個代碼庫並依賴懶惰的複製和良好的合併(就像在git/mercurial中)。在TFS中分支 - 像git一樣分支整個代碼庫,或僅影響子項目?

我到目前爲止發現的指南在線討論分支策略(按發佈,特徵等分支),但不包括關於哪些文件/子項目您應該執行分支。

有沒有「正確的方法」來做到這一點?假設我們有這樣的設置:

Code 
| 
|- ModuleA 
|- ModuleB 
|- ModuleC 
|- ModuleD 

而且我們有一個影響ModuleA和ModuleD的特性F.我們會更好地分支Code還是ModuleA和ModuleD?

回答

2

如果你的功能影響的東西是用於整個代碼庫,分支你的整個代碼庫。您仍然希望讓CI構建在您的功能分支上運行,因此您希望所有自動化測試都能像往常一樣運行。

即使某個功能僅影響應用程序的一小部分,仍然希望能夠對整個應用程序進行測試,以確保您沒有引入任何重大更改。

我建議您閱讀可從CodePlex下載的ALM Rangers' branching/merging guide

+0

分支整個代碼庫是否有任何損失...是像SVN/Git一樣聰明,只會複製真正改變的文件?這在我看來更可取,因爲它不是性能問題。 –

+0

是的,它的行爲就像SVN和Git。分支機構既便宜又快速。 –

1

我對這個問題(Techdays,視頻等)讀很多東西,對我的項目採用此策略,它的建議作爲最佳實踐。

的執行需要執行以下任務:

1。創建截斷的發展,軀幹讀取XYZ

注:發展是不能直接在樹幹上,而是介紹了一個服務包分支的女孩。

2。從樹幹一個新的子分支服務包創建,語言1.YZ

注:這個分支將舉辦首個專門開發的功能。

事件項目:第一次迭代結束(開發團隊認爲開發已完成)。

3。從Service Pack 1.YZ創建一個新的子分支修復爲1.0.Z.

注:此分支包含目標特徵的交付以下獻給未來的bug修復所有事態的發展。

4。從修復1.0.Z創建。一個新的兒童分支Release 1.0.0。

注:

  • 該分支將保持只讀。

  • 該分支是在生產環境中部署的唯一分支。

  • 這個分支是我們交付的圖片。

  • 它允許您繪製不同的交付。

  • 它允許在需要的時候在回滾的版本執行操作(避免衝突的文件版本)。

事件項目:生產

  1. 交付往對生產環境1.0.0版本分支。

6。將Service Pack 1.Y.Z合併到X.Y.Z中繼線

注意:此時所有分支都處於相同的進化級別。

事件項目:版本1.0.0上發生錯誤

7。可以通過兩種方式處理錯誤:

■如果確定版本不穩定 進行修補程序修復分支1.0.Z.

  • 創建一個新的分支版本1.0.1

  • 交付分支版本1.0.1

  • 合併修復1.0.Z到Service Pack 1.Y.Z.

  • Merge Service Pack 1.Y.Z.到X.Y.Z

    注意:您可以迭代多次:1.0,1,1.0.2,1.0.3等。

■如果確定版本是穩定的,並且我們決定修復新交付的錯誤。 - 從Service Pack 1.Y.Z創建修正了一個新的子分支1.1.Z

  • 作出修正分支更正1.1.Z

  • 從修復1.1.Z.創建一個新的兒童分支發行版命名爲1.1.0。

  • 交付1.1.0分支

    事件項目:一個重要的新功能來

8。從樹幹一個新的子分支服務包創建,語言2.YZ

重現相同的組織......

注:在我的博客我創作的發佈