gpt4 book ai didi

git - 如何将带有分支的 Git 存储库转换为可用的 Mercurial 存储库?

转载 作者:太空狗 更新时间:2023-10-29 14:13:17 27 4
gpt4 key购买 nike

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

我已经读过How are git branches imported into mercurial with hg convert?并且我知道不可能知道哪个提交属于 Git 中的哪个分支。但是,拥有与分支一样多的头的存储库对我来说不是一个可行的解决方案。

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

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

最佳答案

必须了解一些关于 Git 的事情:

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

专门为你我重复操作从(优秀的共同点)VonC answer在你的问题链接中,并会向你展示一些图片(来自 SmartGit 的 Git,来自 TortoiseHG 的 Mercurial)

所有提交之后,

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-repo

从 Mercurial 的 POV 来看,import 的结果非常不同:repository 有一个 real branch (named branch default) 和 3 个匿名分支,标记为 Mercurial 书签 br1-br2-br3。

HG-repo

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

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

Rebased HG-repo

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

Clean HG-repo

关于git - 如何将带有分支的 Git 存储库转换为可用的 Mercurial 存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26407045/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com