1

我正在尝试将 SVN 存储库转换为 Mercurial。几百年前的修订版,从主干的子目录(而不是整个主干)创建了一个分支。

trunk
  * subdir
  * ...
branches
  * foo (forked from subdir)
  * ... (other branches fork from trunk)
tags
  * ...

我尝试使用 convert 扩展来转换存储库,但是 foo 导致了问题。它显示在转换后的存储库中,不是来自主干的分支,而是来自名为“subdir”的新分支。subdir 分支与主干平行,对主干所做的任何更改都会复制到 subdir 上。

这是转换后存储库的简略视图:

  .
  .
  |
  *  202  foo      Created foo branch
. |
. *  201  subdir   Added XYZ
| |
* .  200  default  Added XYZ
| .
. .
. |
. *    4  subdir   Fixed DEF
| |
* |    3  default  Fixed DEF
| |
| *    2  subdir   Added ABC
|  
*      1  default  Added ABC

代替:

  .
  .
. |
. *  101  foo      Created foo branch
|/
*    100  default  Added XYZ
|
.
.
.
|
*      2  default  Fixed DEF
|  
*      1  default  Added ABC

如何修复存储库(转换前或转换后)以使分支与第二个图匹配?

4

1 回答 1

0

转换后方式

你有两个任务:

  • 从 subdir 分支中删除重复的修订
  • 更改 foo 分支的第一个真实变更集的父级

您可以使用不同的方法在“subdir”中杀死 202 之前的变更集

  • MQ(2 个版本)
    • 将变更集转换为 mq 补丁,取消应用所有补丁,删除补丁
    • 将变更集转换为 mq 补丁,取消应用所有补丁,将存储库克隆为新的,永远使用新的
  • Histedit 扩展(与 TortoiseHG 捆绑) - 启用、使用、删除所有错误提交

将 foo 分支链接到正确的父级

hg rebase -s 202 -d 200(根据您的第一个图表,使用哈希或书签/添加它/会更好,更防弹)。“subdir”的孤立变更集将在之后消失hg clone -r tip

于 2012-11-28T09:09:56.040 回答