2010-10-22 42 views
15

現場:購買的Web應用程序,定期更新供應商。然後,我們會大量定製外觀,有時會添加我們自己的功能或在供應商達成之前修復錯誤。對於版本控制,每次我們收到新版本時,我們都在使用Subversion的「Vendor Branch」模型。這有額外的好處,我們有一個版本控制,他們的系統的香草副本。供應商分支,水銀風格?

問題:我們想切換到Mercurial並可能會遵循stable/default branching模式。如果我們只能從我們的供應商那裏獲得一個版本並從此開始開發,那麼Mercurial非常有意義。但是,無論出於何種原因,我在圍繞如何處理供應商的未來版本方面遇到困難。

請求:任何與「供應商分支」水銀風格的幫助將不勝感激。

+0

發現了一個類似的情況,但對於Subversion的問題。 (http://stackoverflow.com/questions/2447591) – 2010-10-22 15:33:18

+5

有人會建議Mercurial隊列(mq) - 忽略它們。準備補丁時,個人使用這項技術是一項很好的技術,但不適合您的流程的核心。 – 2010-10-22 15:56:51

回答

14

使用命名分支機構你所描述是一個不錯的選擇(儘管not the only choice),但我還是建議使用一些單獨的克隆在衆所周知的地點促進這一過程。假裝http://host/hg/是hgweb(原hgwebdir)爲您的安裝(雖然SSH://偉大工程太,等等),你有這樣的事情:

  • http://host/hg/vendor
  • http://host/hg/custom

兩個獨立的倉庫,其中數據從供應商流向定製,但從來沒有其他方向。指定分支default將是vendorcustom中的唯一一個,您將同時擁有defaultstable

當你從供應商一個新的代碼降你把它解壓到vendor回購的工作目錄,然後運行:

hg addremove 
hg commit -m 'new drop from vendor, version number x.x.x' 

你在vendor回購歷史將是線性的,並它永遠不會有你寫的東西。

custom的本地克隆

現在回購你會怎麼做:

hg update default  # update to the latest head in your default branch 
hg pull http://host/hg/vendor # bring in the new changes from vendor as a new head 
hg merge tip   # merge _your_ most recent default cset with their new drop 

然後,你做他們的新代碼滴上默認合併本地機會的工作。當你對合並感到滿意時(測試通過等),你從本地克隆推回到http://host/hg/custom

該過程可以根據需要重複進行,將您的歷史記錄與他們的歷史記錄分離開來,並且讓團隊中的每個人都不負責接受來自供應商的新代碼丟失,只關心一個正常的default/stable安裝回購,http://host/hg/custom

+1

我認爲這是我見過的最清晰的答案。謝謝! +1 – eduncan911 2011-10-14 15:29:15

+0

@ eduncan911謝謝! – 2011-10-14 18:30:53

+2

我認爲在「hg addremove」之前供應商文件夾中可能需要刪除所有非.hg *文件,因此addremove可以正常工作。 – Ken 2012-09-28 20:56:01

9

我會使用供應商分支作爲默認+穩定分支的額外分支。最後,它會是這個樣子:

V1----V2-------------V3---------V4  Vendor 
\  \    \   \ 
    D1----D2---D3--D4-D5-D6-D7-D8---D9 default 
        \   \ \ 
        S1----------S2---S3 stable 
+0

關於從哪裏開始的任何建議? – 2010-10-22 15:31:55

+3

對於現有的項目,我會先導入svn歷史記錄,然後安排分支。對於新項目,我將導入第一個供應商版本,並使用此提交(V1)創建供應商分支。之後我會將V1合併爲默認值,創建D1。在默認情況下,我會在第一個穩定版本(S1)中創建穩定分支。每當新的供應商版本進入時,供應商分支上的新提交就會被創建(V2,V3,V4)。這些提交合併爲默認(D2,D6,D9),並在清理合併到穩定(S2,S3)後。 – Rudi 2010-10-22 16:11:38

+1

我看到這個和Ry4an的答案的優點。 eeny ... meeny ... miny ... mo ... – 2010-10-25 00:36:30