【问题标题】:Migrating with subdirectory branch使用子目录分支迁移
【发布时间】:2012-08-31 13:00:25
【问题描述】:

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

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

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

【问题讨论】:

    标签: svn mercurial


    【解决方案1】:

    转换后方式

    你有两个任务:

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

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

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

    将 foo 分支链接到右父节点

    hg rebase -s 202 -d 200(根据您的第一张图,使用散列或书签 /add it/ 会更好,更防弹)。 “subdir”的独立变更集将在hg clone -r tip 之后消失

    【讨论】:

    • 我尝试了变基,它几乎可以工作,只是它在根级别的 subdir 中留下了东西。因此,rebase 后的 /subdir/bar.txt 现在是 /bar.txt,而旧版本的 bar.txt 仍在 /subdir 中。重新设置的变更集也丢失了它们的分支名称,但我认为可以使用 --keepbranches 修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多