小编典典

Git 与 Mercurial 存储库的互操作性

all

我在 Mac 上使用 GIT。说够了。我有工具,我有经验。我想继续使用它。这里没有战争…

问题总是与互操作性有关。大多数人使用SVN,这对我来说很棒。Git SVN 开箱即用,是一个简单的解决方案。人们可以继续愉快地使用
SVN,而且我的工作流程和工具都不会丢失。

现在......有些人和Mercurial一起来了。对他们来说很好:他们有他们的理由。但我找不到任何开箱即用的 GIT HG。我不想切换到
HG,但我仍然需要与他们的存储库互操作。

你们中的任何人都知道一个简单的解决方案吗?


阅读 70

收藏
2022-07-04

共1个答案

小编典典

从 2012 年 6 月开始更新。目前,当开发人员想要从 git 端工作时,似乎有以下 Git/Hg 互操作性方法:

  1. 安装 Mercurial 和 hg-git 扩展 。您可以使用包管理器或使用easy_install hg-git. 然后确保您的 ~/.hgrc 中有以下内容:
    [extensions]
    

    hggit =

您也可能会看到一些关于在bookmarks此处指定扩展名的参考资料,但自 1.8 版以来,这已内置于 Mercurial 中。以下是有关在
Windows 上安装 hg-git 的一些提示

拥有 hg-git 后,您可以使用大致类似于上面发布的 Abderrahim Kitouni
命令。不过,自 2009
年以来,此方法已得到改进和调整,并且有一个友好的包装器: git-hg-
again
。这同时使用顶级目录作为 Mercurial 和
Git 的工作目录。它创建一个 Mercurial 书签,它与 Mercurial
存储库中(未命名)分支的尖端保持同步default,并从该书签更新本地 Git 分支。

  1. git-remote-hg 是一个不同的包装器,同样基于 Mercurialhg-git扩展。这还利用了git-remote-helpers协议(因此得名)。它仅将顶层目录用于 Git 工作目录;它保持其 Mercurial 存储库裸露。它还维护了第二个裸 Git 存储库,以使 Git 和 Mercurial 之间的同步更安全,更符合 git 的习惯。

  2. git-hg 脚本(以前在此处维护)使用hg-fast-export不同的方法,基于 快速导出项目 。与方法 2 一样,这也保留了一个裸 Mercurial 存储库和一个额外的裸 Git 存储库。

对于拉取,此工具会忽略 Mercurial 书签,而是将每个命名的 Mercurial 分支导入 Git 分支,并将默认(未命名的)Mercurial
分支导入 master。

一些评论将此工具讨论为仅 hg->git,但它声称已于 2011 年 12 月 7 日合并到 git->hg
推送支持中。不过,正如我在对这些工具的评论中解释的那样,该工具尝试实现的方式推送支持似乎不可行。

  1. 还有 另一个名为 git-remote-hg 的项目 。与上面列出的版本不同,这个版本不依赖 hg-git,而是直接访问 Mercurial Python API。目前,使用它还需要一个修补版本的 git。我还没试过这个。

  2. 最后, Tailor 是一个在各种不同 VCS 之间进行增量转换的项目。听起来这方面的发展不会积极地继续下去。

这些方法中的前三种看起来很轻巧,足以说服我进行调查。我需要以某种方式调整它们以使它们在我的设置上运行,我看到了一些进一步调整它们以改进它们的方法,然后我进一步调整它们以使它们的行为更像彼此,以便我可以评估他们更有效。然后我认为其他人可能也希望进行这些调整,以进行相同的评估。因此,我制作了一个源代码包,使您能够安装我的前三个工具中的任何一个版本。它还应该注意安装所需的hg- fast-export部件。(您需要自行安装hg-git。)

我鼓励您尝试一下,然后自己决定什么是最有效的。我很高兴听到这些工具损坏的案例。我将尝试使它们与上游更改保持同步,并确保上游作者了解我认为有用的调整。

正如我上面提到的,在评估这些工具时,我得出的结论git-hg是仅可用于从 Mercurial 中拉取,而不能用于推送。

2022-07-04