【问题标题】:How to convert mercurial repository to git repository without losing branches?如何在不丢失分支的情况下将 mercurial 存储库转换为 git 存储库?
【发布时间】:2019-05-14 11:56:47
【问题描述】:

我想将 mercurial repo 转换为 git repo。实际上我做到了,但我没有看到树枝。转换 repo 后,我只能看到一个分支(作为主分支),我看不到任何其他分支,但我可以看到历史记录(所有更改)是正确的。当点击任何提交时,我可以看到这样的信息:

Date: 19 Nisan 2019 Cuma 15:14:37
Committer: sevgi.cakmak
Change dialog header

--HG--
branch : sevgi-2.0.0   

但我在左侧看不到 sevgi-2.0.0 分支(我正在使用 sourcetree)。

我的步骤:

mercurial.ini 文件:

[extensions]
strip = 
histedit = 
rebase = 
hggit = C:\Users\sevgi.cakmak\Desktop\hg-git\hggit
hgext.bookmarks =

[git]
intree = True

hg bookmark -r 2.0.0 master(也试过这样:hg bookmark -r default master) 然后我从 cmd 工作了这一行

hg gexport --debug //this line converting all revision

在完成这一行之后,我的输出如下:

converting revision a318482e0769e2fceb13a1545cb477d60a00b434
converting revision e444655d161131f9ed1676f6c175813097fd18g8
converting revision 0ab06d22eaf4ff4ecb96caba343fdcc3a85e367k
converting revision 8a4e7f4defb0b04e76e67a825bedf746fe4f3fc5  ......etc

然后我在这条线上工作 git config --bool core.bare false 。 毕竟我确实在 .git 下打开了分支文件夹,而这个旧文件夹是空的。我想在我的仓库中查看分支。

参考:https://helgeklein.com/blog/2015/06/converting-mercurial-repositories-to-git-on-windows/

我也尝试过快速导出,但没有成功。

【问题讨论】:

    标签: git version-control mercurial atlassian-sourcetree hg-git


    【解决方案1】:

    来自docs section Usage

    Hg-Git 将您的书签作为分支推送到 Git 服务器,并将 拉下 Git 分支并将它们设置为书签。

    ...

    配置

    ...

    git.branch_bookmark_suffix
    

    hg-git 不会在 Mercurial 命名分支和 git 之间转换 分支,因为两者在概念上是不同的;相反,它使用 代表 git 分支概念的 Mercurial 书签。 因此,在将 hg repo 转换为 git 时,您通常需要 创建书签以镜像您想要的所有命名分支 看到转移到 git。主要的警告是你 不能为您的书签使用与命名分支相同的名称, 而且没有可行的方法来重命名一个分支 水银。

    对于希望将 hg repo 转移到的用例 git,并维护与 hg 上相同的命名分支 一方面,branch_bookmark_suffix 可能就是所需要的。这 显示将在每个书签上识别的字符串“后缀” 名称,并在书签被转换为 git 分支时被剥离:

    [git]
    branch_bookmark_suffix=_bookmark
    

    上面,如果一个 hg repo 有一个名为的分支 release_6_maintenance,然后您可以将其链接到名为的书签 release_6_maintenance_bookmark。 hg-git 然后将剥离 _bookmark从此书签名称后缀,并创建一个git分支 叫release_6_maintenance。当从 git 拉回到 hg 时, _bookmark 后缀被应用回来,当且仅当一个 hg 命名为 该名称的分支存在。例如,当更改 release_6_maintenance 分支被检入 git,这些将是 放入 hg 上的 release_6_maintenance_bookmark 书签中。但 如果一个名为 release_7_maintenance 的新分支被拉到 hg, 并且已经没有 release_7_maintenance 命名的分支, 书签将被命名为release_7_maintenance,不使用 后缀。

    branch_bookmark_suffix 选项与作者选项一样, 用于迁移遗留 hg 命名分支。继续前进,一个hg 要与 git repo 链接的 repo 应该只使用书签 用于命名分支。

    【讨论】:

    • @eagle 很高兴它有帮助。
    • @eagle @DavelnCaz 您能否分享您使用的 hg 和 hggit 版本以及该解决方案在哪里起作用?我正在使用branch_bookmark_suffix,但我打开的分支在推送(转换)到 git 期间仍然丢失
    • @Jan 对不起,但我不记得了,几年前我最后一次使用它。但是,它似乎确实有效。
    • @DaveInCaz 没问题。我最终使用了 github 导入功能 - 它可以在从 mercurial 导入期间处理所有(包括未合并的)分支
    • 那么,我需要在 mercurial 中为我的每个分支创建一个书签吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多