如何重组一个Mercurial库有两个主要的平行分支(How to restructure a me

2019-09-17 07:49发布

我的仓库的历史是这样的:

A -- B -- C (branch "foo")
      \
       -- D (branch "bar")

两个分支都是“送货”的分支,并有本质的不同前端到后端常见。

曾经是一个分支的所有代码,与foobar功能开启或关闭由编译器开关,但我支,使其更容易与每个独立工作。

问题是常见的“后端”的文件,由自己,也许应该是一个独立的分支-我经常想只是这些共同文件的工作。 因为我创建这些分支的方式,历史上是有点搞砸了:在分公司bar的过去,它曾经具有的功能foo

目前,我只是做出一个分支的更改,然后使用hg transplant到相同的更改复制到其他分支。

相反,我希望能够做出改变这种方式:

       __ C __ D'   (branch "foo")
      /      /
A -- B -- D         (branch "backend")
      \      \
       -- E -- D''  (branch "bar")

也就是说,在分支工作backend ,然后在每个装运分支(中foobar ),我使用hg merge backend

什么是从我目前的情况对一个我所描述去的最佳途径? 我能想到的是唯一的方法:

  1. 删除所有foobar的功能,并命名该分支backend

  2. 删除旧foobar分支机构。

  3. 手动添加foo功能, backend并命名该分支foo ,同样对bar

有没有更好的办法?

此外,这是应该做的事情吗?

Answer 1:

有多少的变更在树枝上是没有foobar ? 从前端分离的变更后端(移植)的变更?

如果变更并不多,而且他们是干净的,那么你可能想这样做:

       C -- 1 -- 2 -- D -- 3   (branch "foo")
      /      
A -- B ----------- C" -- D"   (branch "backend")
      \      
       C' -- 4 ------ D' --- 5   (branch "bar")

(这里A,B,C,d是后端有关; 1,2,3为FOO有关; 4,图5是条相关的)

-即创建BRACH backend基础上的最近的共同祖先foobar ,然后移植所有后端相关的变更有。 从这个角度上,你就可以合并backend进入任一分支。



Answer 2:

我选择了它拆分成多个存储库,而不是在一个存储库几个分支,具体如下:

  1. 我关了bar分支。

  2. 我克隆原来的仓库到一个新的存储库backend

  3. 我删除了所有的foo -相关代码。

  4. 我把这些变化到主存储库中,然后立即退出了他们的(所以foo代码保持)。 这成了我的foo库。

  5. 我克隆了backend资料库到一个新的仓库bar

  6. 我复制和粘贴一切从现已关闭的文件bar支进bar库。

因此,这在我的历史foo ,而失去了历史的连续性bar (虽然所有的历史仍然存在,如果我需要的话); 现在无论foobar是克隆,经过修改,该的backend存储库,这正是我想要的。



文章来源: How to restructure a mercurial repository with two main, parallel branches