2012-09-21 102 views
0

比方说,我有一个存储库中有一个分支,其中有如下几个历史变更集。是否可以将存储库中的分支从存储库移至另一个存储库?

== 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) 

有没有人知道该怎么做?谢谢。



更新:
这似乎有点陌生,不包括其祖先转移信息库的一部分。我在一段时间开始开发一个大项目时遇到的情况以及为项目付款的人希望能够分别独立地开发项目的某些组件。因为他们认为这些组件非常适合作为独立产品或小型开源项目,所以他们不希望任何不相关的历史代码留在存储库中。

回答

1

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

取决于你想要做什么,'转换'可能是也可能不是表达它的最直接的方式。

1

您已经使用过这个词:您需要hg transplant

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

+0

谢谢你的回答。我不知道我是否以正确的方式做到了。在我尝试运行你提到的命令后,我得到了一个如下的新库: (init)A→B→C→D→E→C'1→C'2→C'3 - > ...(默认分支) 但我需要的是 (init)C'1 - > C'2 - > C'3 - > ...(默认分支) –

+0

我不确定你想要那么 - 除非你有AB和C的历史,你如何期待C'1有任何明智的内容? – Hbcdev

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,这可能(也可能不会)是你想要的。

相关问题