我的存储库的历史记录如下:
A -- B -- C (branch "foo")
\
-- D (branch "bar")
这两个分支都是“运输”分支,并且与共同的后端基本上是不同的前端。
所有代码都在一个分支中,foo
或bar
功能由编译器开关打开或关闭,但我分支以便更容易单独处理每个。< / p>
问题在于,常见的“后端”文件本身可能应该是一个单独的分支 - 而且我经常希望只是处理这些常见文件。由于我创建这些分支的方式,历史有点搞砸了:在分支bar
的过去,它曾经有foo
的功能。
目前,我只是在一个分支上进行更改,然后使用hg transplant
将相同的更改复制到另一个分支。
相反,我希望能够以这种方式进行更改:
__ C __ D' (branch "foo")
/ /
A -- B -- D (branch "backend")
\ \
-- E -- D'' (branch "bar")
即,在分支backend
上工作,然后在每个发货分支(foo
和bar
)中工作,我使用hg merge backend
。
从我目前的状况到我描述的那种情况,最好的方法是什么?我能想到的唯一方法是:
删除所有foo
和bar
功能,并将该分支命名为backend
。
删除旧的foo
和bar
分支。
将foo
个功能手动添加到backend
,并为该分支foo
命名,同样为bar
命名。
有更好的方法吗?
另外,这是正确的做法吗?
答案 0 :(得分:1)
分支机构foo
和bar
有多少变更集?后端(移植)变更集是否与前端变更集分开?
如果变更集不多,并且它们很干净,那么您可能希望这样做:
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与条形相关。)
- 即根据backend
和foo
的最新共同祖先创建您的bra bar
,然后在那里移植所有与后端相关的变更集。从现在开始,您将能够将backend
合并到任一分支中。
答案 1 :(得分:0)
我选择将其拆分为多个存储库而不是一个存储库中的多个分支,如下所示:
我关闭了bar
分支。
我将原始存储库克隆到新的存储库backend
。
我删除了所有与foo
相关的代码。
我将这些更改提取到主存储库中,然后立即退出它们(因此foo
代码仍然存在)。这成了我的foo
存储库。
我将backend
存储库克隆到新存储库bar
。
我将现已关闭的bar
分支中的所有文件复制并粘贴到bar
存储库中。
这保留了foo
的历史记录,并且遗失了历史记录bar
的连续性(尽管所有的历史仍然存在,如果我需要的话);现在,foo
和bar
都是backend
存储库的克隆,这些正是我想要的。