【问题标题】:How to handle merges with hgsubversion?如何处理与 hgsubversion 的合并?
【发布时间】:2011-02-08 19:33:16
【问题描述】:

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

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

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

【问题讨论】:

    标签: version-control mercurial branch hgsubversion


    【解决方案1】:

    我终于想出了如何在问题中描述的事件发生后让我的存储库不楔入,这样我就可以继续工作而不必重新克隆父存储库(显然,这很慢当您从 Subversion 中提取时操作!)。如果 Subversion 的“提示”超过了您,以至于您无法再推送,只需确保您通过 $HOME/.hgrc 行在 Mercurial 中激活了内置的“rebase”扩展,如下所示:

    [extensions]
    rebase =
    

    然后你应该能够在你的存储库被楔入时运行这个命令:

    $ hg rebase --svn
    

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

    【讨论】:

    • 我已经多次使用这个命令了。我针对 SVN 回购的本地分支机构的工作流程往往是 hg pull、hg rebase --svn、hg push。
    【解决方案2】:

    Mercurial 作为几种不同的分支模式:http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/

    您所描述的是“命名分支”,当您使用只能通过 mercurial(或 hg-git)访问的存储库时,这是最流行的。

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

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

    如果我是你,我会从 svn 重新克隆,然后使用“移植”命令(打包扩展)将我的工作移动到该 repo 的“默认”分支中。如果您希望多个功能与 hg-subversion 并行使用,请使用单独的克隆(它们非常便宜),因为它更符合 subversion 对分支的看法。

    【讨论】:

    • 谢谢,瑞恩。但是根据您的建议,我的作品不会出现在上游(即在 Subversion 中)。我希望能够提交到 Subversion 分支。实际上,我可以提交到 Subversion 分支,但我不能从 Mercurial 中的主干合并。 (Subversion“只是名义上”如何有分支?似乎Subversion对合并分支的支持比Mercurial弱,但这并不算太糟糕。至少我可以从主干分叉一个分支,然后轻松地从主干重复合并方便。当我想将分支重新整合到主干时,问题就来了。)
    • 我的建议一定是不清楚的,因为其中没有任何内容阻止您向上游推进。我只是建议一旦你将变更集放入 mercurial 中,你就将自己限制在一个命名的分支中,因为在 mercurial 分支之间来回合并会阻止你推动颠覆(如你所见)。将所有 csets 保留在 mercurial 土地上的同一个命名分支上,如果您想要单独的开发轨道,请使用多个克隆,您应该没问题。
    • 再次感谢您,瑞恩。那么,如何使用多个 Subversion 分支呢?请注意,我对 Subversion 中存在的两个分支进行了hg merge,然后想将合并推送回 Subversion。推送合并失败,出现上述错误消息。如果我在 Subversion 端进行了相同的合并,合并将在 Mercurial 端完好无损(在hg pull 之后)。
    • 恐怕你把我弄到了那里。除了远程仓库的主干之外,我没有对任何东西使用 hg-subversion。
    • 什么是“克隆和分支”模式?
    【解决方案3】:

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

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

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

    【讨论】:

    • 嗨,Harvey,您正在 Subversion 端进行合并。我宁愿在 Mercurial 方面合并,但如果那不可能,那我猜就是这样。可惜,虽然。凯
    • @hibbelig:是的,我向 hgsubversion 作者询问了这个问题,他们说这是一个 svn 限制,因为我认为他们没有像 hg 那样的双重“父母”。这就是 hg 知道合并的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2012-12-09
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多