这是一个困扰我一段时间的问题。我完成了我的作业并检查了stackoverflow,至少发现了关于我的问题的这两个主题: Git for Mercurial like git-svn和 Git 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战争的工具吗?
答案 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是双向的,所以显然可以在两者之间映射信息。