我有一个Hg存储库,变更集0代表“添加.hgignore”。从变更集1开始,我通过脚本从许多Subversion修订版中逐步添加了变更集。然后我和Hg一起工作了一段时间。
现在我决定需要更多的Svn修订版,它们位于历史早期,而不是开始修订版(Hg中的变更集1)。
是否可以在0和1之间插入新的变更集?如果是:如何?
答案 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 -s tip -d X
,N个版本的N个操作)我更喜欢MQ作为最强大的选择(在MQ中我将能够改进以前的变更集以便更好地消除冲突和/或拆分更改)