将存储库从 Mercurial 转换为 Git 时,如何为 "master" 选择 "default" 以外的分支?

How do I choose a branch other than "default" for "master" when converting a repo from Mercurial to Git?

我需要将长期存在的 Mercurial 存储库转换为 Git 存储库(单向、一次性转换),我想选择 [=13= 以外的 Mercurial 分支] 成为 Git 仓库中的 master 分支。

我之前在一个较小的回购协议中从 Mercurial 转换为 Git,在遇到一些容易 Google 和修复的陷阱之后,一切顺利。在那种情况下,将 default 分支映射到 master 是有意义的。 (唯一的其他分支映射是 "dev" 到 "dev"。)

在这个新案例中,我继承的存储库使用 default 分支进行开发,然后将批准的更改合并到 stable 分支中。因此,当谈到 Git 时,我希望 Git master 分支反映 stable Mercurial 分支,另一个分支反映 default Mercurial 分支。

这可能吗?

当然可以。

只需使用您方便的任何工具将您的 Mercurial 存储库转换为 git。如果最终分支不符合您的喜好,您可以轻松地重命名它们。使用 git rename.

例如,要将分支 "master" 重命名为 "dev"(即,将分支相互交换):

git rename -m master master-old

git rename -m dev master

git rename -m master-old dev

有关详细信息,请参阅 git-rename 手册页。

另一种方法是(当使用 hg-git 时)在您想要的 branch/revision 上为特定分支创建一个名为 master 的书签。

另一个解决方案是在 将存储库转换为 Git 之前,在 Mercurial 中创建一个分支 renaming/swapping,具体指定您想要的分支有。例如,要将 default 重命名为 dev,然后将 stable 重命名为 default,请创建一个名为 branchmap.txt 的文件:

default dev
stable default

然后 运行 转换(应该在您的 hgrc 中启用 "convert" 扩展)例如:

$ hg convert --branchmap branchmap.txt previousrepo newrepo

使用 "convert" 重命名分支的唯一危险部分是您生成的存储库将完全不同:所有 SHA1 都将不同。但是因为您之后要转换为 Git,所以在这种情况下并不重要。