2012-11-27 52 views
1

有没有办法克隆mercurial repo(即clone -r xxx)的一部分,但保留指定修订版之前的所有变更集,而不仅仅是祖先?合并变更集之前的mercurial克隆分支

例如,假设回购,看起来像这样:

 -- 2 (branch default) -- 5 -- 8 (merge) -- 9 (merge) -- 
    /       /  /
0 -- 1 -- 3 (branch foo) ------ 6 --   /
     \          /
     -- 4 (branch bar) ------ 7 ------------- 

我想克隆仅前合并的提交,即所以造成回购看起来是这样的:

 -- 2 (branch default) -- 5 
    /
0 -- 1 -- 3 (branch foo) ------ 6 
     \ 
     -- 4 (branch bar) ------ 7 

但运行

hg clone -r 7 repo repo2 

只会给我承诺1,4和7(分支条)。这似乎让我什么的唯一方式是经过是这样的:

hg clone -r 5 repo repo2 
cd repo2 
hg pull -r 6 
hg pull -r 7 

是正确的,或者没有人知道的一个更快的方式做到这一点?

+3

有你认为像“克隆repo repo2 && hg -R repo2 strip --rev 9”?根据回购的规模和复杂程度,这可能是最快的方法。 –

+0

当然适用于上述简单情况,并且可能会为我正在尝试修复的回购做好准备,所以谢谢。 – fakeleft

+0

与问题没有直接关系,但您为什么要这样做? –

回答

2

必须读取hg help clone并记住选项,它们可以在一个克隆中多次使用(-r和-b即)。

你想要的,易懂的语言 “克隆都在默认到5包容FOO分支BAR分支

翻译成克隆 hg clone -r 5 -b foo -b bar <SRC REPO> <DST-REPO>

1

hg help clone

-r --rev REV [+]  include the specified changeset 

这比hg help log不同的,例如,它说

-r --rev REV [+]   show the specified revision or range 

,你就可以做的最好的是多次使用-r更多:

hg clone -r 5 -r 6 -r 7 repo repo2 

您可以使用log和修订版设置以确定您需要包含哪些其他版本。

+1

我一直无法让'clone'在revsets上运行。对我来说'hg clone -r:7 repo repo2'返回“unknown revision”:7'“。我做错了吗? – Edward

+0

我可以发誓工作,但恐怕我没有仔细阅读帮助。 'hg help clone'说“包含指定的* changeset *” 'hg help log'说“包含指定的*修订版或范围*” – moswald

+0

废话。拥有克隆使用的复制权似乎就像我之后的那种优雅的解决方案。噢 - 很值得看看revset语法的多功能性,谢谢。 – fakeleft