如何处理与hgsubversion的合并?

时间:2010-04-16 12:13:00

标签: version-control mercurial branch hgsubversion

我正在尝试为使用Subversion的项目做出贡献。我使用Mercurial及其hgsubversion扩展来克隆repo。我的工作发生在一个功能部门。

如何使功能分支与默认分支上发生的事情保持同步(hg说话)又称主干(svn发言)?

所以我使用hg up feature更新到功能分支,然后hg pull使我在默认分支上给出了更改集。所以我做了hg merge default,提交合并,然后尝试hg push将我的更改集发送到Subversion。而Mercurial说:“抱歉,找不到合并修订版的svn父版。”

3 个答案:

答案 0 :(得分:5)

我终于想出了如何在问题中描述的事件之后取消我的存储库,这样我就可以继续工作而不必重新克隆父存储库(显然,这很慢)从Subversion中提取操作!)。如果Subversion的“提示”超出你的意思,你不能再推动,只需确保你的Mercurial中通过$ HOME / .hgrc这样的行激活了内置的“rebase”扩展名:

[extensions]
rebase =

然后,当您的存储库被楔入时,您应该能够运行此命令:

$ hg rebase --svn

如果我理解正确的话,它会解散你的当前分支,它已经让你远离Subversion HEAD,并在Mercurial中与Subversion中的HEAD对应的分支“tip”上重建它。从那里,你可以继续工作,并成功再次推动。到目前为止,它一直对我有用;如果你遇到任何问题,请告诉我!

答案 1 :(得分:1)

Mercurial是一些不同的分支模式:http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/

您所描述的是“命名分支”,当您使用仅通过mercurial(或hg-git)访问的仓库时,这是最受欢迎的。

但是,当你使用hg-subversion以便将更改推送到/从subversion(只有名义上有分支)时,你最好在'default'命名分支中保留所有的mercurial更改,并使用'克隆和分支'模式(无论如何我都喜欢)。

具体而言,该消息Sorry, can't find svn parent of a merge revision.不是在subversion中具有直接匹配的修订版的后代。

如果我是你,我会从svn中退回,然后使用'transplant'命令(打包扩展名)将我的工作转移到repo的'default'分支。如果你想要多个并行的功能w / hg-subversion使用单独的克隆(它们是如此便宜),因为它更符合subversion对分支的看法。

答案 2 :(得分:0)

我需要自己解决这个问题,然后在这里写下来:

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

我还没有弄清楚如何在subversion中关闭分支并让mercurial图看起来正确。