2010-10-19 47 views

回答

13

基本上,你不能。 Mercurial有一条硬性和快速的规则,即只有存储库中的每个祖先变更集都存在时,变更集才能存在于存储库中。

但是,您可以创建一个新的存储库,其变更集对应于另一个存储库中以后的变更集的子集。但是它们不会有相同的变更集,因为它们会有不同的哈希节点,并且原始库中的任何克隆都不能与新的哈希节点一起工作(“不相关的库”)。

你可以尝试创建一个新的回购使用过程像这样只反射另一个回购新的变更的一些:

hg -R /path/to/bigrepo export 10:tip > latestchanges.patch 
hg init newsmallrepo 
hg -R newsmallrepo import < latestchanges.patch 

这只会变更集编号10,后来与不同的散列新的变更复制在新的存储库中。合并也不会很好。

+0

这是解决方案。我查找过这个命令并没有找到。谢谢Ry4an! – 2010-12-07 11:23:47

11

查看convert扩展名(包含在Mercurial中)。一个简单的例子是:

hg convert <src> <dest> --config convert.hg.startrev=<rev> 

这将产生与指定的修订开始,以前下探历史上新的,不相关的信息库。它也会处理合并。所有用户都需要克隆新版本的存储库,因为变更集散列将全部改变。

通过添加启用扩展以下到mercurial.ini:对于选项

[extensions] 
convert = 

运行hg help convert

+0

在** Windows **下,在***'C:\ Users \ \ mercurial.ini' *中添加/创建所有内容不起作用,但是**调整了现有的** C:\ Users \ \。 hgrc' **文件做了窍门:-)(hg 2.7.1) – 2015-02-05 06:34:07

+0

我使用Windows和Mercurial.ini。两者都可以工作。参见[hgrc docs](http://www.selenic.com/mercurial/hgrc.5.html)。 – 2015-02-09 17:38:07