2010-04-07 66 views
12

好的,所以我們最近從SVN轉換爲Mercurial。
我們通常使用TortoiseHG。

在我們的一個存儲庫中,我們有我們所有的項目,C++/.NET/ASP。我們有大約100個項目,都使用共同的圖書館項目。

因此,爲每個項目創建多個回購將是相當困難的任務。

現在,我們有default分支,並且讓我們說branchA
我正在BranchA並加入我的尤伯杯改變它,我改變一個公共庫,讓我們說的擴展方法
Mercurial僅合併某些更改集

我要提交這branchAdefault,我將如何去這件事嗎?

不過,我不希望我的branchA所有更改合併到default,我不想從default

所有其他變化但願這是足夠的信息!

+2

這是使用版本控制來管理項目的錯誤方法。如果你有一個庫在多個項目之間共享,庫應該有它自己的庫。從長遠來看,手動處理這樣的變化會導致你無盡的問題。 – 2011-06-20 04:27:48

+0

@PeterGraham mega-repos用於非常大的公司,如[Facebook](https://code.facebook.com/posts/218678814984400/scaling-mercurial-at-facebook/),取得了很好的成功。 – Fowl 2016-01-06 07:16:36

回答

11

有一種方法可以避免這個問題。您可以make all your changes on separate feature branches from some baseline revision,通常是最新版本的標籤或其他穩定點S

這樣,你的變化X將在自己的分支,它可以與其他分支(合併M1M2)不引入不必要的變更合併:

-----S--o----o---M1----o---> default 
    |  /
    |---------X feature or bugfix 
    |   \ 
    \--o---o----M2----o-----> BranchA 

這隻需要正常hg merge操作;不需要補丁,TransplantMQ

-1

您正在描述「櫻桃採摘」或進行「部分合並」,而Mercurial目前無法實現這種合併。您有幾個選項:

  • 將您的通用代碼分隔到自己的存儲庫中。
  • 生成您對通用代碼所做更改的差異,並將其應用於default分支。
+0

Downvoted,因爲mercurial支持櫻桃採摘。 Mercurial稱之爲「移植」,它可以使用移植擴展。 – 2011-06-20 04:22:28

5

如果將通用代碼分隔到自己的存儲庫中,則可以使用subrepos將其包含在每個項目中。

順便說一句,我建議爲每個項目有一個單獨的存儲庫,特別是如果有這麼多。

22

只是爲了保持一點點更新:有一個graft command實現在Mercurial櫻桃採摘。

此命令使用Mercurial的合併邏輯從其他分支複製個別更改 而不合並歷史圖中的分支。 這有時被稱爲'backporting'或'cherry-picking'。默認情況下,嫁接將從源 變更集複製用戶,日期和描述。