我在项目的早期两次重组了Subversion repo:首先将单个项目根目录转换为trunk / branches / tags布局,然后在第二个根文件夹中添加第二个相关项目并使用它自己的主干/支链/标签
当我决定切换到Mercurial时,在第一个原始项目的主干之外没有重要的开发活动。我能够使用Mercurial转换实用程序和路径映射在新的Mercurial存储库中重组一个合理的主干,或者我认为。
现在我意识到我有两个额外的头,每个头对应于更改历史基本上从哪里开始:
r0 ... r16 | (r17) r18 ... r61 | (r62) r63 ... tip
中断后的两个修订版本r17和r62的结果与中断前的相应修订版本相同 - 它们完全由文件添加操作组成,其内容与先前版本完全相同。有意义的更改仅从下一次修订开始(分别为r18和r63)。
我试图在r17和r62上拼接Mercurial Transplant扩展,但它最终在默认分支的顶端连接拼接的变更集(此时为r405)。
这些额外的头脑并没有真正伤害我的开发活动,所以我已经放了一段时间。推动我解决这个问题的原因是,每当我从远程存储库中取出时,MercurialEclipse都会抱怨这些额外的头部。
任何人都可以就如何处理此问题提出任何建议吗?我只是错误地命令标志,或者我使用了错误的工具?我应该使用Rebase扩展吗?那些我们以前用Subversion做的dump-edit dumpfile-reload过程呢?
虽然我已将项目发布到我的开发服务器,但只有几个克隆,所以销毁这些副本并重新克隆应该不是什么大问题。
答案 0 :(得分:5)
扩展程序命令rebase
和collapse
应该可以解决问题。以下面的小存储库为例:
$ hg glog -p
o changeset: 3:bc701d12d956
| tag: tip
| summary: hack
|
| diff --git a/file b/file
| --- a/file
| +++ b/file
| @@ -1,1 +1,1 @@
| -hello world
| +hello big world
|
o changeset: 2:2bb8c95d978e
parent: -1:000000000000
summary: history breaking svn reorganization
diff --git a/file b/file
new file mode 100644
--- /dev/null
+++ b/file
@@ -0,0 +1,1 @@
+hello world
@ changeset: 1:b578b2ec776b
| summary: hack
|
| diff --git a/file b/file
| --- a/file
| +++ b/file
| @@ -1,1 +1,1 @@
| -hello
| +hello world
|
o changeset: 0:c3d20f0b7072
summary: initial
diff --git a/file b/file
new file mode 100644
--- /dev/null
+++ b/file
@@ -0,0 +1,1 @@
+hello
它基本上类似于你的情况,即有两条不相关的历史记录,其中第二行(r2)的第一个修订版是第一行(r1)的最后修订版中出现的所有内容的简单添加。
您可以使用rebase
将第二行放到第一行:
$ hg rebase -s 2 -d 1
$ hg glog
@ changeset: 3:020d1b20caa8
| summary: hack
|
o changeset: 2:2a44eb4b74c3
| summary: history breaking svn reorganization (empty changeset now)
|
o changeset: 1:b578b2ec776b
| summary: hack
|
o changeset: 0:c3d20f0b7072
summary: initial
如您所见,两条线已经连接在一起。修订版2现在是一个过时的空变更集。您可以使用collapse
命令组合修订版本1和2来删除它:
$ hg collapse -r 1:2
<edit commit message>
$ hg glog -p
@ changeset: 2:d283fe96a5e6
| tag: tip
| summary: hack
|
| diff --git a/file b/file
| --- a/file
| +++ b/file
| @@ -1,1 +1,1 @@
| -hello world
| +hello big world
|
o changeset: 1:c486d8191bf0
| summary: hack
|
| diff --git a/file b/file
| --- a/file
| +++ b/file
| @@ -1,1 +1,1 @@
| -hello
| +hello world
|
o changeset: 0:c3d20f0b7072
summary: initial
diff --git a/file b/file
new file mode 100644
--- /dev/null
+++ b/file
@@ -0,0 +1,1 @@
+hello
现在,不相关的历史路线以有意义的方式加入。