2010-04-16 113 views
7

我正在努力爲使用Subversion的項目做出貢獻。我用Mercurial和它的hgsubversion擴展來克隆回購。我的工作發生在一個功能分支上。如何處理與hgsubversion的合併?

如何讓功能分支與默認分支(hg speak)又名幹線(svn speak)上發生的事情保持同步?

所以我用hg up feature更新到功能分支,然後hg pull這給了我默認分支的變更集。所以我做了hg merge default,承諾合併,然後嘗試hg push將我的變更集發送到Subversion。 Mercurial說:「對不起,找不到合併版本的svn父母。」

回答

1

水銀爲幾個不同的分支模式:http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/

的一個你所描述的是「命名的分支」,這是最流行的,當你與唯一通過水銀訪問的回購工作(或HG -git)。

但是,當你使用hg-subversion時,你需要將變化推送到/從subversion(名義上只包含分支),你最好保留默認命名分支中的所有mercurial更改,並使用'克隆和分支'模式(我更喜歡)。

具體而言,該消息Sorry, can't find svn parent of a merge revision.不是在顛覆中具有直接匹配的修訂的後代。

如果我是你,我會從svn回憶,然後用'移植'命令(打包擴展)將我的工作移動到該回購的'默認'分支。如果你想同時使用多個功能w/hg-subversion使用單獨的克隆(它們非常便宜),因爲它更符合subversion如何考慮分支。

+0

謝謝,瑞安。 但是根據你的建議,我的作品不會出現在上游(即在Subversion中)。我希望能夠承諾Subversion分支。實際上,我可以提交給Subversion分支,但我無法從Mercurial的主幹中合併。 (Subversion「只有名義上」有分支嗎?似乎在Subversion中合併分支的支持比Mercurial中的支持要弱,但它並不太可怕。至少我可以將一個分支從trunk中分支出來,然後從trunk中重複合併當我想將分支重新集成到主幹時,問題就出現了。) – hibbelig 2010-04-17 16:20:17

+0

我的建議一定不清楚,因爲沒有任何東西阻止你向上遊推進。我只是建議,一旦將變更集變爲mercurial,您將自己限制爲一個命名分支,因爲正常情況下mercurial分支之間的合併會阻止您推送到顛覆(如您所見)。如果你想要單獨的開發軌道,將所有cset保留在mercurial land的同一命名分支上,並使用多個克隆,而且你應該沒問題。 – 2010-04-17 18:14:29

+0

再次感謝你,瑞恩。那麼我如何使用多個* Subversion *分支? 請注意,我在Subversion中做了兩個分支的'hg merge',然後想把合併推回到Subversion。以上錯誤信息推進合併失敗。如果我在Subversion一側完成了相同的合併,Mercurial一方會完成合並(在'hg pull'之後)。 – hibbelig 2010-04-17 20:26:06

0

我需要想這一點爲自己和寫在這裏:

http://notebook.3gfp.com/2010/05/pushing-a-new-feature-from-a-mercurial-repo-into-an-svn-repo/

我還沒有想出如何在顛覆關閉了分公司,並有善變的圖形看起來是正確的。

+0

Hi Harvey, 你正在Subversion方面進行合併。我寧願在Mercurial方面進行合併,但如果這不可能的話,我想這就是這樣。可惜,但。 Kai – hibbelig 2010-05-08 20:23:43

+1

@hibbelig:是的,我問過hgsubversion的作者,他們說這是svn限制,因爲我認爲他們沒有像hg那樣的雙「父母」。這就是hg對合並的瞭解。 – Harvey 2010-06-23 21:06:58

5

我終於想出瞭如何在問題中描述的事件之後讓我的存儲庫不被楔住,這樣我就可以繼續工作而不必重新克隆父存儲庫(很明顯,當您從Subversion提取時,操作速度慢!)。如果Subversion的「小費」讓你無法繼續推送,只需確保你的Mercurial中已經通過$ HOME/.hgrc這一行激活了內置的「rebase」擴展名:

[extensions] 
rebase = 

然後你應該能夠運行這個命令時,你的版本庫楔:

$ hg rebase --svn 

如果我理解這個正確的,它溶解已採取你遠離顛覆HEAD當前分支,並重建它頂上Mercurial中的分支「tip」對應於Subversion中的HEAD。從那裏,你可以繼續工作,併成功地再次推動。迄今爲止,它一直爲我工作;讓我知道如果你遇到任何問題!

+1

我已經結束了幾次使用這個命令。我的本地分支機構針對SVN回購的工作流程往往是hg pull,hg rebase --svn,hg push。 – MattGWagner 2011-03-25 18:44:46

+0

這不是一個答案:-( – Kugel 2013-01-05 07:10:31