几个月前,我将Subversion存储库转换为Mercurial,最后我在修订历史中留下了两个毫无意义的空白。我试图弄清楚是否可以弥补差距,但是我还没有获得能够准确完成我想要的工具的工具。
在项目的初期,我已经对Subversion仓库进行了两次重组:首先将单个项目的根目录转换为主干/分支/标签布局,然后在第二个根文件夹中添加第二个相关项目,并使用其自己的主干/分支/标签。
当我决定改用Mercurial时,除了第一个原始项目的主干外,没有任何重要的开发 Activity 。我能够使用Mercurial转换实用程序和路径映射在新的Mercurial存储库中重新组合一个明智的主干,或者我想。
现在我意识到我有两个额外的负责人,每个人都对应于更改历史记录从头开始的地方:
r0 ... r16 | (r17) r18 ... r61 | (r62) r63 ... tip
中断后的两个修订的结果r17和r62与中断前的相应修订的内容相同-它们完全由文件添加操作组成,其内容与先前的修订完全相同。有意义的更改仅从下一个修订版开始(分别为r18和r63)。
为了使r17和r62拼接起来,我搞砸了Mercurial Transplant扩展程序,但是最后将拼接的变更集串联到默认分支的尖端(此时为r405)。
这些多余的头脑并没有真正伤害到我的开发 Activity ,所以我让它走了一段时间。促使我解决此问题的原因是,每次我从远程存储库中提取时,MercurialEclipse都会提示这些额外的问题。
谁能提供任何有关如何解决此问题的建议?我只是在错误地获得命令标志,还是我使用了错误的工具?我应该改用Rebase扩展程序吗?我们都曾经使用过Subversion的某种dump-edit dumpfile-reload过程怎么样?
当我将项目发布到开发服务器时,那里只有几个克隆,因此销毁这些副本并重新克隆并不是什么大问题。
最佳答案
扩展命令 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
现在,不相关的历史线以有意义的方式结合在一起。
关于mercurial - 在Mercurial储存库时间轴中拼接不连续性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5149621/