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

Kai*_*nen 73 git mercurial interop

这是一个困扰我一段时间的问题.我完成了我的作业并检查了stackoverflow,至少找到了关于我的问题的两个主题: Git for Mercurial,如git-svnGit与Mercurial存储库的互操作性

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

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

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

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

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

aka*_*ola 20

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

用于检出和跟踪mercurial repo的git-hg实用程序.

用于签出和跟踪mercrial [sic]项目的一组脚本.

它似乎并不是双向工作(参见问题跟踪器).

  • 我是git-hg的原作者.它实际上只是一组围绕快速导出的shell包装器,我用它来跟踪远程hg repo.正如Albert所说,有人确实增加了推送支持,我今天刚刚合并了这个分支.出于某种原因,我一定是错过了GitHub的电子邮件通知,因为几周前我有两次拉取请求,直到今天我才注意到. (14认同)

Tom*_*lis 18

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

  • 有人拿到了这份的成绩单吗? (6认同)
  • 容易跟随与否,肯定不需要一个小时的演讲来回答这个问题.一个人;博士会很好. (4认同)
  • tl; dr:你不需要git-hg,因为"服务器"上的hg-git使客户端可以在没有任何扩展的情况下从hg仓库推送和拉取!有关说明,请参阅下面的Thomas Broyer的答案. (3认同)
  • 精彩的演示!信息丰富,有趣的观看.我之前没有见过这个,因为我倾向于避免在线观看任何视频.不幸的是,我仍然不满意答案.如果功能已经存在,那么为什么不一直采用它?我将不得不尝试一下hggit,但也许我应该给bitbucket家伙发一封电子邮件...... (2认同)
  • 好吧,我还没能尝试过hg-git,但是如果我理解正确的话,从git推送到hg仍然不止一步.关于一些人使用裸git目录的短语也听起来并不那么令人放心.Git-svn正常工作.即使在某种程度上,SVN作为git后端似乎是不错的选择.至少从演示文稿中我发现git-hg距离它还有几步之遥.请注意,我并不是说这不是一个伟大的项目.我只觉得还有一些工作要做. (2认同)

Max*_*Max 18

还有另一个项目可以实现这一点: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
Run Code Online (Sandbox Code Playgroud)

更新:到目前为止还有第三个,也是"本土的",即费利佩的一个,他在这里提到了答案.这看起来很快就可能成为git'inco'dir的一部分:https://github.com/felipec/git-remote-hg 它可以在不需要补丁的情况下进行git本身,尽管有一些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找到它.


Tho*_*yer 8

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

不要错过那里的评论.


Fel*_*peC 5

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

用于mercurial和bazaar的git桥支持

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

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