2012-03-23 59 views
2

我有一个汞库,其中changeset 0代表“添加.hgignore”。从变更集1开始,我通过脚本从大量的Subversion修订中逐步添加了变更集。然后我用Hg工作了一段时间。在更改集0(零)之前添加其他更改集?

现在我决定需要更多的Svn修订版,它们位于历史早于修订版(Hg中的变更集1)的位置。

是否可以在0和1之间插入新的变更集?如果是的话:如何?

回答

5

可以使用水银含汞转换为此。您需要为此启用convert extension。作为转换的一部分,该扩展程序将允许您将拼接历史合并在一起。这仅仅意味着您可以为现有变更集指定新父项。

所以如果你开始

$ hg glog 
@ changeset: 1:aaee9686dedf 
| tag:   tip 
| user:  Martin Geisler <[email protected]> 
| date:  Fri Mar 23 15:08:11 2012 +0100 
| summary:  bar 
| 
o changeset: 0:17474bd28fe5 
    user:  Martin Geisler <[email protected]> 
    date:  Fri Mar 23 15:08:05 2012 +0100 
    summary:  foo 

您可以首先从SVN导入需要进行修正:

$ hg update null 
$ run-your-script.sh 

这将创建一个第二根变更 - 你现在实际上有两个不相交的历史在你的库。我做了一个单一的变更,我加了baz文件:

$ hg glog 
@ changeset: 2:515e1292862b 
    tag:   tip 
    parent:  -1:000000000000 
    user:  Martin Geisler <[email protected]> 
    date:  Fri Mar 23 15:09:19 2012 +0100 
    summary:  baz 

o changeset: 1:aaee9686dedf 
| user:  Martin Geisler <[email protected]> 
| date:  Fri Mar 23 15:08:11 2012 +0100 
| summary:  bar 
| 
o changeset: 0:17474bd28fe5 
    user:  Martin Geisler <[email protected]> 
    date:  Fri Mar 23 15:08:05 2012 +0100 
    summary:  foo 

的最后一步是将历史联系在一起:我们要17474bd28fe5有515e1292862b作为其第一个父。使用hg log --debug看到完整的变更哈希值,并进行切片的地图文件,

17474bd28fe535c15c7dad3659994ab048146e99 515e1292862ba2d6776294ffb00c533dc6850c66 

然后运行

$ hg convert --splicemap map.txt your-repo your-spliced-repo 

你会发现修改后的历史your-spliced-repo

+0

感谢您的详细解答,马丁!这工作相当不错,但最后一步不起作用。汞转换告诉我,它找不到一个特定的文件(它被添加为一个大文件;大文件扩展名在用户级别启用)。 – 2012-03-27 09:06:59

+0

@ChristophJüngling:啊,这是一个大文件?这有很大的不同 - 大文件的扩展是非常有创意的扩展。恐怕'hg convert'不知道大文件。当你想重命名/包含/排除'foo/bar'时,尝试重命名'.hglf/foo/bar'。也就是说,在站点文件上而不是在工作副本中看到的文件上运行。 – 2012-03-27 12:03:09

+0

再次感谢。我在'hg convert --splicamap ...'之前试过'hg lfconvert --to-normal',然后它就起作用了! – 2012-03-27 13:10:39

1

如问:是的,你可以

我发现至少有3种方法可以做到这一点。全部 - 与扩展

导入集的版本到尖的,进口后使用任何

  • 底垫(rebase -s tip -d X每个可移动的修订,对于N个版本N操作)
  • Histedit(编辑从启动修订,在编辑窗口中重新排序修订版本,修改N版本1次)
  • MQ(选择所有版本,导入到MQ,重新排序修补程序堆栈中的内容,编辑内容(如果需要),完成所有修订,N修订N + 2操作)

我喜欢MQ作为最有力的选择(MQ内我就可以打磨前的变更,以消除冲突和|更好的方式或分割的变化)

+0

很好!你能向我解释三种方法吗? :-) – 2012-03-23 13:10:40

+0

@ChristophJüngling - 加入回答评论 – 2012-03-24 03:54:57