3

我想将具有多个分支的 Git 存储库转换为 Mercurial 存储库。仅使用hg convert一个默认分支创建,然后每个 Git 分支都有一个头。

我已经阅读了如何使用 hg convert 将 git 分支导入到 mercurial 中?并且知道不可能知道哪个提交属于 Git 中的哪个分支。然而,一个拥有与分支一样多的头的存储库对我来说不是一个可行的解决方案。

由于所有分支都不同,我显然不能将它们全部合并到一个头上。

如何转换或修改转换后的存储库,以使每个负责人都在不同的分支上?请注意,我不一定需要将所有现有提交分配给正确的分支,但我希望从这一刻开始的提交分配给正确的分支,并且每个分支只有一个头。

4

1 回答 1

2

必须知道一些关于 Git 的事情:

  • Git“分支”不是任何其他优秀VCS 的分支,对于 Mercurial,它们本质上是书签(“分支”仅标记头部变更集,任何较旧的变更集不包含此元数据)
  • 当 Git 男孩谈论分支时 - 他在撒谎,因为分支只是他的 Git 世界中的分支
  • Noboby(今天)将在转换存储库时将 Git-“分支”转换为分支
  • 在大多数情况下(除了非常奇特的 Git-repos)hg-git,Convert Extension 会产生更正确的(双向)转换

特别为你我重复了你的问题链接中的(优秀的共同点)VonC 答案的操作,并会向你展示一些图片(Git 来自 SmartGit,Mercurial 来自 TortoiseHG)

在所有提交之后,

GitRepo>git log --oneline
79ea101 third evolution in branch 2
720ac25 second evolution in branch 2
48951c3 first evolution in branch 2
6cf26b0 first content, to be evolved in three different branches

在导入到 Mercurial 之前,带有所有“分支”

Git 仓库

从 Mercurial 的 POV 来看,导入的结果非常不同:存储库中有一个真正的分支(名为 branch default)和 3 个匿名分支,用Mercurial 书签br1-br2-br3 标记。

HG-回购

如果要在此存储库中使用 Mercurial 命名分支,则必须手动创建命名分支并重写历史记录:

  • 提交新的空变更集作为 0 的后代,它们将是分支的起点
  • 将匿名分支重新设置为这些新父级(更改实际分支)

重新建立 HG 回购协议

作为可选和最后一步,您可以删除在第 1 步创建的空变更集(histedit做好)和所有无用的书签

清洁 HG 回购

于 2014-10-17T03:49:45.587 回答