在变更集0(零)之前添加其他变更集?

时间:2012-03-23 12:04:14

标签: svn version-control mercurial dvcs

我有一个Hg存储库,变更集0代表“添加.hgignore”。从变更集1开始,我通过脚本从许多Subversion修订版中逐步添加了变更集。然后我和Hg一起工作了一段时间。

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

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

2 个答案:

答案 0 :(得分:5)

您可以使用 Mercurial进行Mercurial 转换。您需要为此启用convert extension。该扩展程序可让您将拼接历史记录作为转换的一部分。这只是意味着您可以为现有变更集指定新父项。

所以,如果你从

开始
$ hg glog
@  changeset:   1:aaee9686dedf
|  tag:         tip
|  user:        Martin Geisler <mg@lazybytes.net>
|  date:        Fri Mar 23 15:08:11 2012 +0100
|  summary:     bar
|
o  changeset:   0:17474bd28fe5
   user:        Martin Geisler <mg@lazybytes.net>
   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 <mg@lazybytes.net>
   date:        Fri Mar 23 15:09:19 2012 +0100
   summary:     baz

o  changeset:   1:aaee9686dedf
|  user:        Martin Geisler <mg@lazybytes.net>
|  date:        Fri Mar 23 15:08:11 2012 +0100
|  summary:     bar
|
o  changeset:   0:17474bd28fe5
   user:        Martin Geisler <mg@lazybytes.net>
   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找到修改过的历史记录。

答案 1 :(得分:1)

如上所述:是的,您可以

我至少看到3种方法。全部 - 带扩展

在导入后使用任何

导入修订集到tip中
  • Rebase(每个可移动修订版rebase -s tip -d X,N个版本的N个操作)
  • Histedit(从开始修订编辑,在编辑窗口中重新编辑修订版,N修订版进行1次操作)
  • MQ(选择所有修订,导入到MQ,重新排序补丁堆中的修订,如果需要,编辑内容,完成所有修订,N个修订的N + 2操作)

我更喜欢MQ作为最强大的选择(在MQ中我将能够改进以前的变更集以便更好地消除冲突和/或拆分更改)