Mercurial:将克隆转换为分支

时间:2010-07-26 20:20:49

标签: mercurial

我正在尝试清理一些克隆的存储库,基本上将克隆转换为命名分支。

最简单的方法是什么?

2 个答案:

答案 0 :(得分:5)

您可以将它们命名为分支的唯一方法是重写其历史记录,因为分支的名称是历史记录的一部分。但是,如果你能够在没有过去分支的情况下生存(未来很好),那么你可以把所有的回购都拉到主要的(没有合并!),然后在它们进入时标记你的分支。 / p>

例如,如果您有MainRepo,Feature1Repo和Feature2Repo,则可以执行以下操作:

$ cd MainRepo
$ hg pull ../Feature1Repo
$ hg pull ../Feature2Repo

现在,如果你看看像TortoiseHg这样的DAG,你会看到几个不同的头。在这里,您只需hg uphg branch

$ hg up feature1headrev
$ hg branch Feature1
$ hg up feature2headrev
$ hg branch Feature2

从这里开始,你将拥有你的命名分支。

注意:如果hg pull抱怨存储库不相关,则可以执行hg pull -f,这将在存储库中创建多个尾部。这通常不是真正的分支,但它有时是有用的。

答案 1 :(得分:3)

您可以使用hg export创建一组更改,然后hg import将它们添加到新分支。

假设您有一个共同的基础,revA,然后是两个克隆,每个克隆从revA分为revB和revC。

在第一个克隆中:hg export -r revA -r revB > revB.patch
在第二个克隆中:hg export -r revA -r revC > revC.patch

现在您有两个补丁,其中包含克隆中所做的所有更改。

在原始存储库中:

hg up revA
hg branch branchB
hg commit
hg import revB.patch
hg up revA
hg branch branchC
hg commit
hg import revC.patch

现在你有两个命名分支与revA不同。如果您在revA-> revB或revA-> revC之间的区域进行合并,我不确定这是否会完美地保留它们。

另一种选择是使用移植扩展。或者您可以将克隆的更改推送到一个仓库,然后将创建的头移动到新的分支。