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

克里斯

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

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

由于所有分支都不相同,因此我显然无法将它们全部合并到一个单独的头中。

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

懒Bad

必须了解有关Git的一些知识:

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

特别针对您,我重复了(与众不同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-repo

与Mercurial的POV相比,导入的结果有很大不同:存储库中有一个真实分支(名为branch default)和3个匿名分支,并用Mercurial书签br1-br2-br3标记

HG回购

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

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

重新计算的HG-repo

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

清洁HG-repo

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不丢失分支的情况下将mercurial存储库转换为git存储库?

如何将旧的SVN存储库转换为GIT,并在以后创建主干/分支

Git / GitHub:如何将新的本地存储库转换为空的远程存储库

如何在Windows上将CVS存储库转换为Mercurial?

如何将带有 pip 文件的文件夹配置为本地 pip 存储库

有什么办法将所有git分支转换为存储库的文件夹?

将 git 存储库中的所有提交转换为按顺序命名的分支?

将具有多个活动分支的SVN存储库转换为GIT

如何将所有分支的git存储库从bitbucket移动到github?

如何将整个git存储库(包括所有分支)还原到以前的日期?

如何将 Git 存储库中的所有分支列出到自己的控制台中

如何更改所有分支的 Git 存储库的 url?

如何查看远程git存储库中的所有分支

如何将 git 存储库文件夹转换为常规文件夹?

如何将带有存储在ObservableCollection中的值的新行添加到数据库?

如何将带有空格的字符串存储到数据库并检索它们以获取 URL?

将Bitbucket Mercurial存储库转换为Git。维护分支机构和历史记录。在线解决方案

如何将现有的关系数据库转换为键值存储?

如何使用HG命令在Mercurial存储库上拆分分支以创建其他存储库?

如何删除Mercurial存储库

如何备份Mercurial存储库?

Git分支作为存储库

如何将Git存储库转换为嵌套在另一个(父)Git存储库中的子模块?

如何将现有git存储库的副本复制到新存储库

带有所有分支/标签的远程git存储库的完整本地副本

将带有子存储库的存储库推送到bitbucket时出现错误“存储库不相关”

Git-远程分支分支的存储库

如何将现有的存储库推到另一个存储库的分支中?

克隆包含带有本地分支的子模块的本地Git存储库