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

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

现在…有些人跟着Mercurial。对他们来说很好:他们有自己的理由。但是我找不到任何现成的GIT HG。我不想切换到HG,但我仍然需要与他们的存储库进行互操作。

你们有谁知道简单的解决办法吗?


当前回答

我已经从https://github.com/cosmin/git-hg的git-hg取得了巨大的成功(也需要安装hg)。它支持取,拉和推,对我来说比hg-git更稳定(hg到git的类似功能)。

有关用法示例,请参阅https://github.com/cosmin/git-hg#usage。用户界面非常类似于git-svn。

git-hg对于每个克隆的hg repo都需要额外的磁盘空间。实现使用完整的mercurial克隆,一个额外的git裸克隆和实际的git回购。所需的磁盘空间大约是正常git使用量的3倍。额外的副本存储在工作目录的.git目录下(或通常由GIT_DIR指定的位置)。

注意:git-hg试图解决的基本问题是git和hg特性之间没有1:1的映射。最大的问题是git分支和hg未命名分支以及hg已命名分支和hg书签之间的阻抗不匹配(所有这些在git用户看来都很像分支)。一个相关的问题是hg试图在版本历史中保存原始的命名分支名称,而git在默认情况下只将分支名称添加到模板提交消息中。

任何声称在git和hg之间创建互操作桥梁的工具都应该解释它将如何处理这种阻抗匹配。然后您可以决定所选的解决方案是否适合您的需求。

git-hg使用的解决方案是丢弃所有hg书签,并将命名的分支转换为git分支。此外,它将git主分支设置为默认的未命名hg分支。

其他回答

Hg-Git Mercurial插件。我自己还没试过,但可能值得一试。

有一个新的git-remote-hg提供本地支持:

Git中对Mercurial和Bazaar的桥接支持

只需要复制git-remote-hg到你的$PATH,让它可执行,就是这样,没有依赖(除了Mercurial):

git clone hg::https://www.mercurial-scm.org/repo/hg/

您应该能够从它中推入和拉出,就像它是一个原生Git存储库一样。

当您推送新的Git分支时,将为它们创建Mercurial书签。

有关更多信息,请参阅git-remote-hg wiki。

2021年的最新答案似乎是git朱砂,Firefox就是用的。

本页上建议的其他脚本要么没有维护,要么需要过时的软件才能运行(通常是python 2.7)。相比之下,cinnabar可以使用python 3.5+,并且至少可以维护到本文撰写之日。

一旦朱砂安装,你可以克隆mercurial库直接前缀hg:::

git clone hg::https://hg.mozilla.org/mozilla-unified

或添加或设置一个远程到

git remote set-url origin hg::https://hg.mozilla.org/mozilla-unified
git fetch origin

你可以按下多变的遥控器。

使用hg2git和git2hg命令允许将git提交的sha1转换为mercurial更改集。 更多文档可在github页面。

您可以尝试hg2git,这是一个python脚本,是fast-export的一部分,您可以在http://repo.or.cz/w/fast-export.git上找到它。

不过,您需要安装mercurial。

由于hg-git是一个双向桥接,它还允许您将更改集从Git推到Mercurial。