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

Chr*_*ing 2 svn version-control mercurial dvcs

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

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

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

Mar*_*ler 5

您可以为此使用Mercurial到Mercurial转换.您需要为此启用转换扩展.该扩展程序将允许您将历史记录拼接在一起作为转换的一部分.这只是意味着您可以为现有变更集指定新父项.

所以,如果你开始

$ 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
Run Code Online (Sandbox Code Playgroud)

您可以先从SVN导入所需的修订:

$ hg update null
$ run-your-script.sh
Run Code Online (Sandbox Code Playgroud)

这将创建第二个根变更集 - 您现在在存储库中实际上有两个不相交的历史记录.我在一个变更集中添加了一个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
Run Code Online (Sandbox Code Playgroud)

最后一步是将历史链接在一起:我们希望17474bd28fe5将515e1292862b作为其第一个父级.使用hg log --debug查看完整的变更哈希值,并与片地图文件

17474bd28fe535c15c7dad3659994ab048146e99 515e1292862ba2d6776294ffb00c533dc6850c66
Run Code Online (Sandbox Code Playgroud)

然后跑

 $ hg convert --splicemap map.txt your-repo your-spliced-repo
Run Code Online (Sandbox Code Playgroud)

您将在中找到修改过的历史记录your-spliced-repo.