是否可以将分支从存储库移动到mercurial中的另一个存储库?

时间:2012-09-21 07:12:14

标签: mercurial

假设我在一个存储库中有一个分支,其中有几个历史变更集,如下所示。

== repository1 ==
( init)A -> B -> C -> D - E -> ...  (default branch)
                  \ 
                   \ -> C'1 -> C'2 -> C'3 -> ....  (branch1) 


现在,我想将branch1移动(移植)到另一个单独的存储库,如下所示。

== repository1 ==
(init)A -> B -> C -> D - E -> ...  (default branch)
                  \ 
                   \ -> C'1 -> C'2 -> C'3 -> ....  (branch1)

== repository2 ==
 (init)C'1 -> C'2 -> C'3 -> ...  (default branch)

有谁知道怎么做?感谢。



更新
在不包含其祖先的情况下转移部分存储库似乎有点奇怪。我遇到的情况是我们已经开始开发一个大项目一段时间而且为项目付钱的人希望能够分别独立地开发项目的某些组件。因为他们认为组件非常适合作为独立产品或小型开源项目,因此他们不希望在存储库中留下任何不相关的历史代码。

3 个答案:

答案 0 :(得分:1)

您自己使用了这个词:您需要hg transplant

开始新的回购,然后hg transplant -s <original_repo> -b branch1。认为应该这样做。

答案 1 :(得分:1)

移植扩展(如上所述)可能是最好的,但您还应该查看convert extension。虽然它名义上是用于从其他版本控制系统转换为mercurial,但它对于从一个Mercurial存储库“转换”到另一个存储库也很有用,并且对过滤和选择提供了非常精细的支持。

根据您想要做的事情,'转换'可能是也可能不是最直接的表达方式。

答案 2 :(得分:1)

序列(init)C'1 -> C'2 -> C'3 -> ... (default branch)毫无意义。 C'1需要它的祖先!一个简单的克隆应该抓住你想要的东西。

$ hg clone repository1 clonerepo -r C'3

Clonerepo 现在只包含(init)A -> B -> C -> C'1 -> C'2 -> C'3,可能(或可能不是)你想要的。