Git是一个善变的客户?为什么没有git-hg?

时间:2010-03-26 20:40:22

标签: git mercurial interop

这是一个困扰我一段时间的问题。我完成了我的作业并检查了stackoverflow,至少发现了关于我的问题的这两个主题: Git for Mercurial like git-svnGit interoperability with a Mercurial repository

我已经做了一些严肃的谷歌搜索来解决这个问题,但到目前为止没有运气。我还阅读了Git Internals书,Mercurial Definitive Behind the Scenes试图解决这个问题。我仍然有点疑惑为什么我找不到任何合适的git-hg类型的工具。

从我的角度来看,git-svn是主要功能之一,为什么我选择在工作中使用git而不是mercurial。它允许我使用我喜欢的工作流程,如果他们不在乎,没有其他人需要打扰。我只是没有看到使用中间hg repo来回转换的重点,正如其中一个链中所建议的那样。

所以无论如何,从我读过的内容来看,hg和git在概念设计上看起来非常相似。有differences under the hood,但这些都不会阻止为hg创建git客户端。在我看来,远程跟踪分支和章鱼合并使得git比hg更强大。

那么,真正的问题是,为什么git-hg不存在(或者至少很难找到)有任何真正的原因吗? git用户(和开发人员)对他们的hg对手是否有一些敌意导致缺乏git-hg工具? 你们有没有计划开发类似的东西,并公开上市?我可以自愿参加(尽管有非常微弱的C技能)参与完成这项工作。我只是没有完全的知识来自己开始这个。

这可以成为结束所有DVCS战争的工具吗?

7 个答案:

答案 0 :(得分:20)

我没试过这个,但似乎有一个git-hg项目。该项目在页面上自我描述,自述文件描述为:

  

用于签出和签出的git-hg实用程序   追踪一个多变的回购。

     

一套   用于签出和跟踪的脚本   一个mercrial [sic]项目。

但它似乎并不是双向工作(见issue tracker)。

答案 1 :(得分:18)

hg-git和作者的Pycon presentation解释了他对这种情况的看法。不确定你是否在谷歌搜索时遇到过这些但是他们回答了我的问题。

答案 2 :(得分:17)

还有另一个项目可以实现这一点: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

更新:到目前为止,还有第三个,也就是“本土”,即Felipe在他的答案中提到的那个。这个看起来很快可能会成为git'inco'dir的一部分: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,在内部使用完全不同的方法(尽管如果你不关心它,使用它或多或少与其他git-remote-hg实现相同) )。我自己还没有尝试过,但你可以在https://github.com/glandium/git-cinnabar

找到它

答案 3 :(得分:8)

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

也不要错过那里的评论。

答案 4 :(得分:5)

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

Bridge support in git for mercurial and bazaar

它具有更多功能,应该比msysgit更可靠,但最重要的是;您不需要任何依赖项或自定义git构建。只需复制到 $ PATH 即可。

它有大量的测试来检查输出是否与hg-git完全相同,所以它至少应该起作用。

答案 5 :(得分:3)

有一个新项目可以实现:

它很好地整合了双向的东西。

答案 6 :(得分:2)

我认为真的没有太大的动力来创造一个。没有人会因为不得不使用其他人而惨遭残疾;他们都是DVCS。当然,每个人都可能有他们的偏好,但他们通常只是吮吸它并使用另一个,如果他们必须。我认为hg-git已经出现,因为git被广泛使用,而采用hg的项目却少得多。

相比之下,如果一个项目正在使用svn或cvs,任何喜欢DVCS的人都会受到伤害 - 他们会想要那个git-svn / hg-svn实用程序。有许多项目仍在使用cvs / svn,因此需求量很大。

你可能是正确的,但是,假设两者中的一个没有慢慢地胜过另一个(git确实拥有更大的用户群,我相信)。< / p>

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