7

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

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

所以我曾经hg up feature更新到功能分支,然后hg pull它给了我默认分支上的变更集。所以我做hg merge default了,提交了合并,然后尝试hg push将我的变更集发送到 Subversion。Mercurial 说:“对不起,找不到合并修订的 svn parent。”

4

3 回答 3

5

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

[extensions]
rebase =

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

$ hg rebase --svn

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

于 2010-09-09T15:25:17.157 回答
1

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 对分支的看法。

于 2010-04-16T13:48:10.657 回答
0

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

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

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

于 2010-05-07T16:12:14.117 回答