Mercurial和Git有什么区别?

726

我已经使用过Windows上的Git (msysGit) 一段时间了,并且我喜欢分布式源代码控制的理念。最近,我开始看Mercurial (hg),它看起来很有趣。然而,我无法理解hg和git之间的区别。

是否有人进行过git和hg的对比?我想知道hg和git之间的区别,而不必卷入支持者讨论。

25个回答

11

没有区别,它们都能完成相同的任务,性能几乎相同。唯一选择其中一个的原因是你要参与的项目已经使用了其中一个。

另一个可能的选择原因是应用程序或服务只支持其中一个系统。例如,我选择学习git主要是因为github


6
看起来你的回答过于实用主义了。 :) - Arafangion

8

1
Mercurial的信息并不完全准确:Mercurial确实具有“移动或重命名后的智能合并”。具体来说,这意味着如果我将 dir-a/foo.c 重命名为 dir-b/foo.c 并继续在 dir-b/foo.c 上工作,那么您对 dir-a/foo.c 的工作将在拉取后与我的工作正确合并。 - Martin Geisler
关于Git的信息(据我所知,它来自Better SCM Initiative的比较)在一些地方也是不准确甚至无效的。 - Jakub Narębski

7

你的项目中有基于Windows的协作者吗?

如果有的话,Git-for-Windows GUI 看起来很笨拙、困难和不友好。

相比之下,Mercurial-on-Windows 就是一个易于使用的选择。


我喜欢Git,但我必须在这里承认。Git具有更好的命令行和阶段控制,而且文档更加友好。我很愿意在posix shell上使用git命令。然而,在Windows上,TortoiseHG非常出色,它甚至与多个差异工具(如Beyond Compare)集成,并且完全支持子存储库和许多HG插件,例如strip / mq。 - Benbob
至少有一个非常好用的Windows(和OS X + Linux)Git GUI可用。 - Mot

7

在处理分支时(特别是短期分支),存在相当大的差异。

这在这篇文章(BranchingExplained)中得到了解释,该文章将Mercurial与Git进行了比较。


7

需要注意的一点是,bitbucket.org的mercurial和github的git之间有一个区别,那就是mercurial可以拥有任意数量的私有仓库,而github则需要升级到付费账户才能使用。因此,我选择了使用mercurial的bitbucket。


5
去年我评估了git和hg,最终决定选择hg。我认为它看起来更加简洁,且在当时的多个平台上表现更好。虽然两者强弱不分。但最近,由于git-svn的出现和作为Subversion客户端的能力,我开始使用git,并完全转向了git。我认为它有稍微较高的学习曲线(特别是如果你需要深入了解内部情况),但它真的是一个很棒的系统。我现在要去看看John发的那两篇比较文章了。

4
请看hgsubversion: http://bitbucket.org/durin42/hgsubversion/。它目前需要一个开发版本的Mercurial,但他们将会为即将在7月1日发布的Mercurial 1.3版本做一个发布。 - Martin Geisler

4

InfoQ的DVCS指南中,有关于git、Mercurial和Bazaar的详细对比表格和图表。


4

我目前正在从SVN迁移到DVCS(同时记录我的发现,这是我第一次真正的博客努力...),并进行了一些研究(=谷歌)。就我所知,两种软件包都可以完成大部分工作。看起来git有更多或更好的高级功能, 我觉得mercurial与TortoiseHg在Windows集成方面稍微好一些。我知道也有Git Cheetah(我都试过),但是mercurial解决方案感觉更加健壮。

考虑到它们都是开源的(对吗?),我不认为任何一种缺少重要功能。如果某些功能很重要,人们会要求它,人们会编写它。

我认为,对于常见的操作,Git和Mercurial已经足够了。它们都有使用它们的大型项目(Git-> Linux内核,Mercurial-> Mozilla基金会项目,当然还有其他项目),因此我不认为任何一种缺少什么。

话虽如此,我对其他人对此的看法很感兴趣,因为这将成为我博客努力的重要来源;-)


1
是的,它们都是开源项目。 - Martin Geisler

3

我知道这不是答案的一部分,但就此而言,我认为像NetBeans和Eclipse这样的平台稳定插件的可用性也在选择哪个工具更合适于任务方面发挥了作用,或者说,哪个工具最适合“你”。也就是说,除非你真的想通过CLI方式完成。

Eclipse(以及基于它的所有内容)和NetBeans有时会出现远程文件系统(例如SSH)和文件的外部更新问题;这是选择任何您想要无缝工作的原因之一。

我现在也正在尝试回答自己的这个问题..并将候选项简化为Git或Mercurial..感谢大家在这个话题上提供有用的输入而不会变得极端。


2
+1,因为“无缝”体验比不涉足这些领域的人想象中更重要。一个稳定的IDE插件可以带来很大的不同。 - eksortso

2
如果您对Mercurial和Git的性能比较感兴趣,请查看这篇文章。结论是:
Git和Mercurial都表现不错,但在速度和存储库大小之间做出了有趣的权衡。Mercurial在添加和修改方面速度快,并同时控制存储库的增长。Git也很快,但它的存储库会随着修改文件的增多而迅速增长,直到您重新打包,而这些打包可能非常缓慢。但打包后的存储库比Mercurial的要小得多。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接