Git作为mercurial客户端? 为什么没有git-hg?

这是一个困扰我一段时间的问题。 我已经完成了我的功课,并检查了stackoverflow,发现至less有两个关于我的问题的主题: Git Mercurial像git-svn和Git与Mercurial存储库的互操作性

我已经做了一些严重的谷歌search来解决这个问题,但迄今没有运气。 我也读过Git Internals一书,以及Mercurial Definitive的幕后花絮 ,试图弄明白这一点。 我仍然有点困惑,为什么我一直找不到合适的git-hgtypes的工具。

从我的angular度来看,git-svn是主要特性之一,为什么我select在工作中使用git而不是mercurial。 它允许我使用我喜欢的工作stream程,如果他们不关心,没有人需要打扰。 就像其中一个连锁店所暗示的那样,我只是没有看到使用中间hg repo来回转换的意义。

所以无论如何,从我读过的hg和git在概念devise上看起来非常相似。 在引擎盖下有差异 ,但是这些都不应该阻止为hg创build一个git客户端。 就我看来,远程跟踪分支和章鱼合并使git比hg更强大。

所以,真正的问题是,为什么git-hg不存在(或者至less很难find)有真正的原因吗? Git用户(和开发人员)对于他们的hg对手有一些敌意,导致缺lessgit-hg工具吗? 你们有没有计划去开发这样的东西,然后公之于众? 我可以自愿(尽pipeC语言技能很弱)参与完成这个任务。 我只是没有充分的知识来开始自己。

这可能是结束所有DVCS战争的工具吗?

hg-git和作者的Pycon演示文稿解释了他对这个情况的看法。不知道你是否在search时遇到了这些,但他们回答了我的问题。

我没有尝试过,但似乎有一个git-hg项目。 该项目在页面和自述文件中描述如下:

一个git-hg工具用于检出和跟踪一个mercurial repo。

用于检查和跟踪一个mercrial [sic]项目的一组脚本。

它似乎并没有双向工作(见问题跟踪 )。

还有另外一个项目可以实现:git-remote-hg。 其实两个,本地的(见https://github.com/msysgit/msysgit/wiki/Guide-to-git-remote-hg )和另一个基于hg-git(请参阅https:// github。 com / rfk / git-remote-hg )。 前者比后者快得多,但仍不完整,正在开发中。

实际上有其他系统的git远程助手(就像这些工具被调用一样),既可以在那里,也可以在开发中; 这包括对Subversion,CVS,bazaar,甚至MediaWiki的支持。

通过git克隆一个Mercurial仓库就是这样做的:

 git clone hg::https://hg.example.com/some-mercurial-repo 

更新:到目前为止,还有第三个,也是“本地”,即菲利普,他在这里他的答案中提到的。 这看起来很快可能是git的一部分'contrib'目录: https : //github.com/felipec/git-remote-hg它的工作原理不需要补丁来自己,虽然一些补丁git(现在审查)可以应用于改善整体用户体验。

更新2:现在还有另一个竞争者,这是一个相当积极的发展,并基于felipe的代码: https : //github.com/buchuki/gitifyhg – 它对我来说工作到目前为止,但有还有一些粗糙的地方。

更新3:gitifyhg和Felipe的git-remote-hg目前都没有被主动维护。 目前,我做了一些Felipe的代码修正,其中包括一些与最近的Mercurial版本一起工作的代码。 你可以从https://github.com/fingolfin/git-remote-hg得到它。; 最后,还有另外一个最近的竞争者, git-cinnabar ,在内部使用了完全不同的方法(尽pipe如此,如果你不在意这一点,使用它与其他git-remote-hg实现差不多)。 我还没有尝试过,但你可以在https://github.com/glandium/git-cinnabarfind它;

hg-git显然可以用来在本地使用git,用一个远程的mercurial repo: http : //traviscline.com/blog/2010/04/27/using-hg-git-to-work-in-git-and -push至HG /

不要错过那里的评论。

有人已经提到了两个git-remote-hg,但是这里有一个新的:

在git for mercurial和bazaar的桥梁支持

它有更多的function,应该比msysgit更可靠,但最重要的是; 你不需要任何依赖或定制的git构build。 只需复制到您的$ PATH ,就是这样。

它有广泛的testing,以检查输出是完全相同的,因此它应该至less工作。

有一个新项目可以达到这个目的:

它将双向的东西整合在一起。

我觉得创造一个真的没什么动力。 没有人会因为不得不相互使用而受到严重的损害, 他们都是DVCS。 当然,每个人可能都有自己的偏好,但是如果他们必须的话,他们通常会把它吸引起来,并使用另一个。 我认为hg-git已经出现了,因为git被广泛使用,而采用hg的项目却less得多。

相反,如果一个项目使用svn或者cvs,那么任何一个吃过DVCS的人都会受到伤害 – 他们会想要git-svn / hg-svn工具。 还有很多项目使用cvs / svn,所以需求量很大。

尽pipe假设其中一个不会慢慢地胜过另一个(我相信git确实拥有更大的用户基础),但你可能是有道理的。

你也没错,没有什么大的技术障碍–gg-git是双向的,所以显然可以在两者之间映射信息。