将Mercurial分支转换为相同的存储库,但不同的分支

时间:2013-09-29 15:16:02

标签: mercurial

我们面临着在同一个存储库中维护两个代码库的情况。文件夹结构如下所示:

/的WebRoot /

在我们的默认分支中,/ WebRoot /与Stable分支中的/ WebRoot /非常不同。目标是将/ WebRoot /从Stable分支移动到/ WebRoot /默认分支。而当前的默认/ WebRoot /将成为/ WebRootX /。因此,最后,所有代码都将处于默认状态,并且在对两个不同的代码库进行更改时,我们不必在默认和稳定分支之间来回切换。

|      |      | 
|      |      |
|      --------
|      |      QA
|      |
-------|
|     Stable
|

默认

我认为我们必须使用hg convert将Stable代码移出到另一个(临时)存储库。然后将默认WebRoot重命名为WebRootX。然后重新导入Stable / WebRoot /文件夹。

我做了几次测试,但是没有得到预期的结果。我已经尝试使用hg convert和branchmap(“Stable default”)来将Stable分支输出到临时存储库,但这不起作用。我在那里看到默认代码。

实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

在尝试以下任何事情之前,先备份你的回购。

现在您可以尝试以下操作:在default分支中,将WebRoot重命名为WebRootX。承诺这一改变。

仍在default分支中,使用stable合并工具合并internal:fail分支(git称之为合并策略):

hg merge --tool internal:fail stable

此时,您的工作副本处于一种状态,如果已提交,Mercurial将接受为成功合并。在提交之前但是,您想要告诉Mercurial将整个WebRoot目录结构恢复到stable分支中的状态,同时不回复其中的任何内容WebRootX目录结构:

hg revert --all -r stable -IWebRoot* -XWebRootX*

此时,您应该拥有WebRootX分支中的default目录结构,同时具有WebRoot目录结构,就像stable目录结构一样。 1}} branch,也保留了他们的历史。

我必须警告你,虽然我只是在虚拟回购中大致测试了这一点,但我不确定你会在“真正的”回购中获得什么结果。

来自here的一些想法。