2010-04-02 61 views
7

是否可以在Mercurial中將一系列修訂從一個分支合併到另一個分支?在Mercurial中合併來自另一個分支的選定修訂版

例如

|r1 
|r2 
|r3 
|\___ 
| | r5 
| | r6 
| | r7 
| | ... 
| | r40 
|r41 

如果我想合併的版本6 & 7,而不是5,主分支 - 這可能嗎?

這樣的合併可以是微不足道的,例如,如果R 5改性未在6 & 7(和因此其變化,如果不需要的話,可以放心地忽略)

改性什麼有關多個選中的版本的文件範圍從分支A到分支B?例如合併4-7,20-25和30-34?

(這是不是一個真實的案例,只是說明。我想了解是否有汞本次修訂範圍合併功能,我知道svn的)

回答

7

簡單的答案是沒有

這與Mercurial的精神相悖。

您的圖表意味着6取決於5所以拉動6的任何東西都應該拉動5否則它是沒有意義的。

在我看來,你在這裏得到了Mercurial錯誤。如果您的更改樹是線性的,那麼通常表示您正在使用Mercurial,就像您使用CVS或SVN一樣。

你變樹看起來應該更像:

4 
/\ 
/| |\ 
/| | \ 
5 7 23 \ 
| | | 25 
6 8 24 | 
     26 

然後你可以拉任何分支開始5或一個開始23

現在,錯誤是人爲的,所以有一個稱爲導出的「設施」,它允許您從一個變更集創建一個簡單的差異文件。

在特定情況下,你將因此:

  • 克隆庫達r4
  • 創建r6在diff和一個從r7(出口)
  • 均適用(按順序)新的克隆(進口)
  • 運行單元測試,直到他們通過
  • 提交
  • 拉在r41
  • 合併
  • 運行單元測試,直到他們通過
  • 提交

如果你願意,你也可以去擴展之路。有幾個有用的擴展來操作變更集。樣品組:

在這裏,您可以例如克隆庫(重要,總是在克隆測試這些,以防萬一),然後崩潰你有興趣範圍然後你可以導出/導入它們。

+0

r6必須以任何有意義的方式依賴r5是不正確的。例如,它可能是因爲r5只更改了某些其他修訂不會觸及的文件,所以忽略該特定修訂(從數據爲中心的觀點)絕對沒有問題。請不要以爲我以這種方式使用hg,我只是想了解它的功能。 – 2010-04-02 18:15:13

+0

另外,我沒有完全明白你的意思是樹應該看起來。你的樹圖顯示了幾個修訂版本很少的分支。這是hg的精神 - 只有短枝?因爲有時候你只需要一個單獨的分支來做大量的工作,而這些工作不在幹線上。如果你維護許多歷史版本,每個版本都有一個版本庫是不可行的,所以分支機構是唯一合理的解決方案。那麼你如何建議將這些分支保持在較短的時間?爲什麼在需要的時候會比擁有多個不同的分支更好呢? – 2010-04-02 18:24:42

+0

r6取決於r5,因爲你說過當你做r5 r6的父母時。如果你想避免這種情況,並且他們確實是不相關的,你可以在更改之前給另一個父母「更新」6.如果在做r6之前你做了'hg update r4',那麼r6的父母將是r4,而你可以將它轉移到任何已經具有r4的開發分支。 從最廣義的意義上來說,在改變時問自己「歷史上最早的一點是什麼,我可以做到這一點」,然後「更新」到那一點。然後,您可以在任何有意義的地方輕鬆合併變更集。 – 2010-04-02 21:29:59

相關問題