Git作为商业客户?为什么没有git-hg?


74

这个问题困扰了我一段时间。我已经完成作业并检查了stackoverflow,并至少找到了有关我的问题的以下两个主题: Git for Mercurial(如git-svn)Git与Mercurial存储库的互操作性

我已经进行了一些认真的谷歌搜索来解决这个问题,但是到目前为止还没有运气。我还阅读了《Git Internals》一书,以及《幕后的Mercurial Definitive》一书试图找出答案。我仍然有些困惑,为什么我找不到合适的git-hg工具。

从我的角度来看,git-svn是主要功能之一,为什么在工作中我还是选择使用git而不是Mercurial。它使我可以使用自己喜欢的工作流程,如果他们不在乎,则无需其他任何人打扰。正如链条之一所示,我只是看不到使用中间的hg repo来回转换的意义。

因此,无论如何,从我读过的书中,hg和git在概念设计上似乎非常相似。内在存在差异,但是这些差异都不能阻止为hg创建git客户端。在我看来,远程跟踪分支和章鱼的合并使git比hg更加强大。

因此,真正的问题是,是否有任何真正的原因导致git-hg不存在(或至少很难找到)?git用户(和开发人员)对他们的hg同行是否有敌意,导致缺少git-hg工具?你们中的任何人是否有计划开发类似的东西并公开发布?我可以自愿(尽管具有很弱的C技能)参加以完成此任务。我只是不具备自己动手的全部知识。

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


36
@pajton:还是因为git远胜于hg,对吧?
卡斯卡贝尔

4
git-hg确实存在(现在)。stackoverflow.com/questions/5225666/...
马特·鲍尔

Answers:


18

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


6
有人得到这个成绩单吗?
jk。

2
很棒的演讲!内容丰富,有趣。我以前从未见过这种情况,因为我倾向于避免在线观看任何视频。不幸的是,我仍然对答案不满意。如果功能已经存在,那为什么不一直使用它呢?我必须尝试给hggit尝试一下,但也许我应该
向该位存储桶中的

2
好吧,我还没有尝试过hg-git,但是如果我理解正确的话,从git推送到hg仍然是一个多步骤的过程。而且,关于某些人使用裸git目录的短语听起来并不令人放心。Git-svn正常工作。甚至在某种程度上,SVN作为git后端似乎都是不错的选择。至少从演示文稿中我发现git-hg距此仅几步之遥。注意,我并不是说这不是一个好项目。我只是觉得还有一些工作要做。
Kai Inkinen

5
是否易于理解,肯定不需要花一个小时的时间来回答这个问题。tl; dr会很好。
Mu Mind

3
tl; dr:您不需要git-hg,因为“服务器”上的hg-git使客户端可以从hg存储库中推送和拉取,而无需任何扩展!有关说明,请参见下面的Thomas Broyer的答案。
Nilzor 2014年

20

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

git-hg实用工具,用于签出和跟踪商品回购。

一组用于签出和跟踪商业项目的脚本。

不过,它似乎无法双向运行(请参阅问题跟踪器)。


1
似乎已经有人添加了。看看这把叉子
艾伯特

14
我是git-hg的原始作者。实际上,这只是我用于跟踪远程汞回购的快速导出周围的一组外壳包装。正如Albert所指出的,确实增加了推送支持,而我今天才合并了该叉子。由于某些原因,我一定错过了来自GitHub的电子邮件通知,因为几周前我打开了两个拉取请求,直到今天我才注意到。
Cosmin Stejerean 2011年

1
正如我在这里详细解释的那样,Git-Hg用于推向Mercurial的方法在实践中似乎不可用。我已经告诉过Cosmin了;我只是在这里发布此评论,以帮助其他最终通过与我相同的搜索路径找到使用这些工具的人。
dubiousjim 2012年

@dubiousjim:您提供的链接没有详细解释任何内容。过时的链接?
Nilzor 2014年


18

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

实际上已经有用于其他系统的git远程帮助程序(称为这些工具),它们已经存在或正在开发中。这包括对Subversion,CVS,集市甚至MediaWiki的支持。

然后通过git克隆Mercurial存储库就像这样:

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

更新:现在有第三个,也是“本地”,即费利佩在他的回答中提到的那个。看起来很快它可能是git'contrib'目录的一部分: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上找到它


1
在pycon 2013上,gitifyhg的作者听起来很自信。它说它在Windows上未经测试,所以我现在正在尝试。
2013年

gitifyhg实际上是git-remote-hg的一个分支,我不相信任何一个都需要hg-git(它们直接使用Mercurial python模块)。与最初开发git-remote-hg的人相比,从事gitifyhg的工作人员似乎对错误报告的反应更快,因此我已转向gitifyhg。
保罗·普赖斯


5

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

git中的桥梁支持,用于购物和集市

它比msysgit具有更多功能,并且应该更可靠地工作,但最重要的是;您不需要任何依赖关系或自定义git build。只需复制到$ PATH即可

它具有广泛的测试来检查输出是否与hg-git完全相同,因此它至少应该也可以正常工作。


如何git-remote-hg处理hg分支和git分支之间的阻抗不匹配(有关详细信息,请参阅我在stackoverflow.com/a/11223644/334451上的答案)?
Mikko Rantalainen

1
git-remote-hg从Mercurial导入命名分支和书签,因为书签与Git分支相同,所以'foo'书签在Git中获得'foo'分支。但是,一个名为“ bar”的分支会在Git中获得一个“ branches / bar”分支。如果您在该分支的顶部进行任何操作,则所有这些提交都将带有标签“ bar”,因此它们最终将位于命名的分支“ bar”中。此外,还有一个hg-git兼容模式,在这种模式下,我们与hg-git完全相同,并在指定Mercurial命名分支的提交末尾添加额外的代码。因此,根本不会丢失任何信息。
FelipeC

3

有一个新项目可以完成以下任务:

它很好地集成了双向功能。


1
凉。将不得不检查出来。尽管最近开始感觉到越来越多的项目正在转换为git,而mercurial变得越来越不有趣了。也许这只是我的观点,但仍然...
Kai Inkinen

感谢您使用此工具。我在这里发布了详细的讨论(尤其是“评估”页面)。
dubiousjim 2012年

2
felipec的解决方案现已集成到Git中,并且运行良好,因此应优先使用
CharlesB 2014年

2

我认为确实没有太多动机去创造一个。没有人会因为不得不使用一个而被严重地残废。他们都是DVCS。当然,每个人都可能有他们的偏爱,但是他们通常只会吸食它,并在必要时使用另一个。我认为hg-git之所以出现是因为git的使用非常广泛,而采用hg的项目却很少。

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

您可能是对的,但是,假设两者中的一个并没有慢慢地胜过另一个(我相信git确实具有更大的用户群),那可能是对的。

您也很对,没有什么大的技术障碍-hg-git是双向的,因此很显然可以在两者之间映射信息。


4
根据我的经验,git在该领域获得了很多关注,但是到目前为止,我一直在咨询的许多公司都在选择git而不是git。原因通常是,对于具有svn / cvs背景的人来说,Mercurial更容易掌握,这大约占所有开发人员的99%。这意味着很多商业VCS正在转换为汞,这有效地排除了git。对于任何使用git的人,由于git-svn,将服务器保持为SVN会更好。开发这个对于git确实是一个很好的PR特技,因此对于git开发人员很有趣,您不同意吗?
Kai Inkinen

3
@aapeli:有趣。我没有进行调查,但是我的工作场所使用git,在自由软件项目中,git似乎更受欢迎。非常不幸(但并不奇怪)的是,公司使用从cvs / svn过渡的便捷性是主要原因-在理想的世界中,他们只会选择最能满足其需求的产品,并期望开发人员学习使用它。的确,让git得到更广泛采用的任何事情都将对该项目有所帮助-但是自由软件界的压倒性支持可能总是足以确保git的未来。
卡斯卡贝尔

4
我想很多Windows商店可能会因为git的Windows支持
jk的

2
至少在一年前,当对一家使用Java的公司进行这种评估时,我们发现与mercurial相比,git中还有许多劣质的东西。其中最重要的一些是对IDE和CI环境的支持不佳或不佳。Netbeans,Eclipse和Hudson的主要工具。这些确实对生产率有直接影响。Windows在这种情况下不是问题,在我听说过的许多其他类似情况下也不是问题。我猜至少现在情况有所改善。
Kai Inkinen

@aapeli:我想这很有道理。我知道我对所有这些事情都抱有理想主义的态度。我并不真正认为IDE界面很重要-如果您花时间学习命令,那么命令行界面就可以了,并且您最终会更好地了解git的实际工作原理。至于CI ...我的态度是,您应该选择具有所需功能的VCS,然后根据需要为CI工具编写一个插件。这不是像你需要任何真正复杂的VCS操作克隆结账构建清洁等
Cascabel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.