2017-07-20 113 views
2

多年來,我們一直使用TFS(TFVC)作爲我們的版本控制系統。我們可能會遷移到git,但我試圖找出分支策略 - 維護多個版本

1)是否有比我們當前使用的更明智的分支策略/模型,特別是用於維護多個生產版本(通常用於多個不同的版本顧客)?

2)至於1),是與git超過TFVC有具體的好處?

我們今天做的其實很簡單:

Mainline ---------------------------------------------------- 
      |   |   |   |   |   
     Release 3 Release 4 Release 5 Release 6 "Release" 7 

所有版本都對主線自己的分公司,甚至在將來的版本的開發工作已經完成的「未來」的發佈分支。在上文中,「第7版」正在進行中,尚未發佈。

在每個分支都可能會進一步支行等功能分支隔離工作,並隨時發佈分支穩定的,但我不認爲這是本次討論的重要。

每當有這些版本分支之一的變化,它最終合併主線,並從那裏到所有未來版本,以避免客戶從,說要去迴歸,3版版本5

實際上,對這些「舊」分支的更改不僅是小錯誤修正,還可能是第3版客戶要求的更大功能,並且是在第3版中開發的,客戶將收到新版本的第3版。最終,功能將被合併到主線,並從那裏到所有未來的版本。

一直以來合併來自主線的每一個新的分支每一個分支發生,這實際上意味着主線主要是與最新發布分支相同。

這是第一個令人頭痛的問題:從舊版本3在主線這是非常新的,然後從主線到舊版本5的合併有一些不自然的現象(事實上它會導致問題)。例如,比較版本3和版本6可能會很大並且發生變化。直接從版本3合併到版本5會更自然,但TFVC不支持這一點。您只能合併到您的直接父母(或子女)。 git是否有相同的限制?

的另一個問題是,它是不可能在TFVC櫻桃挑合併整個功能,如果它的變更不是一個連續的,在歷史上不間斷的塊。如果某些其他功能的變更集是交錯的,則必須合併每個連續的子功能塊變更集,或者必須合併源分支到目標分支的所有內容。而做多個櫻桃挑選合併並不總是可能的,因爲所有的變更集可能需要建設或單元測試,甚至是可能的。我可以看到爲什麼TFVC具有此限制,因爲該功能的更新更改集可能基於來自另一個功能的較舊的交錯更改集。因此,合併最初來自此功能的變更集可能沒有意義。在實踐中,我們傾向於合併準備合併的所有內容,無論如何都需要合併。 git在這方面如何比較?

什麼是對我們的情況下,明智的分支策略/模型,將在遷移與git幫助我們嗎?

+0

你檢查混帳流? http://nvie.com/posts/a-successful-git-branching-model/ –

+0

是的,我已閱讀,但我發現的一切似乎集中在只有一個主要釋放。有人提到支持分支可能是我們需要的東西,但它看起來像一個深奧的功能,你不應該將你的修復合併回主,我不明白。人們通常如何維護多個發佈分支? – pinkfloydhomer

+0

master只是默認的分支,但它只是一個分支,它取決於你使用它。對於某些項目,我根本沒有掌握,我直接按產品名稱創建分支。你可以有多個發佈分支。有沒有[支持分支機構]的概念(https://gitversion.readthedocs.io/en/latest/git-branching-strategies/gitflow-examples/#support-branches)其高達你的流量來定義分支你的方式想。此外,當您鬆開,沒有什麼,告訴你必須從主版本中,您可以從任何一間分行發行,你可以標記針對這一分支 –

回答

0

有TFVC(CVCS)和git(DVCS)之間的巨大差異。 而對於下面的git usuallyas簡單的工作流程:

  • feature分支機構通常是由develop分公司創造了開發新功能或修復錯誤。他們通常會縮短生活分支。一個功能或bug完成後,它應該合併到develop分支。

  • develop分支用於所有的開發者在其合併他們的作品(功能和錯誤)。

  • master作爲管理穩定的代碼爲您的項目的主要分支。 QA團隊可以測試合併develop分支到master分支。

因此分支結構的樣子:

...----------------- master 
     / .../
...---------------- develop 
    \/ \ /
     --  --- 
    feature1 featuren 
+0

我明白這一點。但在我們的案例中,我們有多個主分支可以這麼說。我們還將開發與功能分支等隔離開來。但是在你的圖中,你只有一個可以從中釋放的分支,那就是主分支。在我們的情況下,我們必須能夠從幾個「主」分支中釋放,每個分發一個分支。另一方面,這些多個主分支不是獨立的,在早期版本中進行的更改應該合併到新版本以避免迴歸。我們不能成爲世界上唯一維護多個版本的團隊嗎? – pinkfloydhomer

+0

我想這就像微軟必須保持兩個Word 2010中,字2013和Word 2016年如果一個bug修復的Word 2010中,您必須將其合併到Word 2013和Word 2016,如果修復是相關的,也有。 – pinkfloydhomer

+0

這就是TFVC和git的區別。正如你在圖中顯示的那樣,對於TFVC,你需要有許多發佈分支(1〜7),但對於git,你只需要一個發佈分支。更詳細的介紹,你可以參考git book:分支和合並https:// git-scm。COM /電子書/ EN/V2/Git的分支 - 基本分支,和合並。而對於git,通常主分支稱爲主分支,它是一個默認分支,根據您的描述,主人似乎是功能分支。但這並不重要,因爲它只是由我們所稱的不同分支名稱引起的。 –