为什么你使用Git而不是Mercurial? (或相反亦然。)

时间:2010-11-28 22:13:13

标签: git mercurial dvcs

我目前使用的是Git,我对它很满意,但我想更多地了解Mercurial。它比Git有什么优势吗? Git比Mercurial有什么优势?

我意识到已经对两者进行了详细的比较,但这不是我要求的。我不想要冷静的信息,而是慷慨激昂(但礼貌!!!)的理由,为什么你认为一个更好/更容易/更快/更聪明/更强大等等。

11 个答案:

答案 0 :(得分:27)

我使用了Mercurial和git,我非常喜欢hg和git;它只是感觉更好。 Steve Losh在他的博客文章 The Real Difference Between Mercurial and Git 中总结了我对此的大部分看法。以下是我全心全意同意的一些引言:

  

我认为仍然存在一个非常非常重要的区别:系统感觉与使用非常不同。

  

我个人觉得Mercurial的理念更容易使用。当它们更模块化,更少整体时,我很容易围绕命令。

  

我个人不喜欢索引。我觉得git鼓励人们检查包含他们从未测试(甚至构建)的代码的变更集,因为索引是git工作流程中非常重要的一部分。

我发现索引很难处理 - 如果我想要这样的东西(也更强大)我将使用mq。同时 - 我为什么要被迫拥有不同类型的add等?为什么我应该被迫使用git commit -a(并git status - git st? - 显示奇怪的信息?)

非常认真地说,我个人可以将git的成功和广泛接受归功于GitHub。史蒂夫也抓住了这个。人们怎么可能通过这个,并“屈服于”来自git用户的压力?

  

我不喜欢使用git本身(尽管它比SVN或CVS好得多),但GitHub是一个非常棒的网站,我考虑过转换它只是为了使用它。

我会继续只在需要时使用git / GitHib - 当我想要修补那里的东西时。我自己的项目将继续使用Mercurial。感觉更好。

答案 1 :(得分:14)

(A)前3个真正的原因我选择使用Git而不是Mercurial:

  1. 历史随机性/惯性
  2. 历史随机性/惯性
  3. 历史随机性/惯性
  4. (B)鉴于上述情况,我最喜欢Git over Mercurial的三件事:

    1. 索引
    2. 轻量级分支
    3. 理智标记(标记不是跟随被标记的提交的提交)
    4. (C)Mercurial对Git的三件事:

      1. 更好的原生文档(强调原生,因为ProGit book非常出色,任何对Git或Git模型抱怨的人都是复杂或混乱应该直接去那里)
      2. 顺序提交编号(仅限本地存储库范围,但我想这可能比在摆弄时剪切和粘贴SHA-1更方便?)
      3. 更好的徽标/名称?
      4. 我认为(B)中的所有(大多数?)项目都是由于(A)因为习惯于Git模型而导致的,或者可以通过插件在Mercurial中“修复”。但事实仍然是Git以我想要的方式开箱即用,并且我可以在没有任何(C)项目的情况下生活[假设由于优秀的ProGit书而使C(1)成为非问题] 。所以,我继续使用Git而不是Mercurial。

答案 2 :(得分:12)

我使用mercurial的主要原因是:

  1. 我通常使用的更多开源资源库(即Bitbucket和Codeplex)支持
  2. 它在Windows上开箱即用
  3. 否则,就VCS操作本身而言,它们几乎是一样的。

    (编辑:为了澄清 - 我并不是说mercurial是优越的 - 根据我的理解,Git在一般使用中比mercurial更快,而且我实际上并没有使用git那么多来评论。但这些两个原因 为什么我使用的是mercurial而不是git)

答案 3 :(得分:8)

  

没有Mercurial和Git非常相似。

我个人的观点是,这些差异非常夸张和充满激情,不会受到更严格的审查。

  

存在细微差别。

Git倾向于比Mercurial更多地暴露模型。 Mercurial倾向于拥有比Git更小的命令子集,并且反映了这种理念。

  

Mercurial有大多数其他用途的扩展

通过在Mercurial中使用强大的扩展模型,可以实现大多数其他功能。它还具有易于扩展的优点,因为大多数Mercurial代码都是用Python编写的,您可以运行Extensions,就像它们是本机Mercurial命令一样。

  

一些链接

有关其他信息和详细信息,请参阅以下讨论

以下提供了Git和Mercurial之间差异的简洁视图

  

为什么,我更喜欢Mercurial胜过Git。

[再次表达个人激情和偏见]

这些命令确实是Git中可用的一部分,看起来非常充足。更重要的是,感觉过度放纵。

答案 4 :(得分:6)

我使用Mercurial,因为code.google.com支持它。我也使用它,因为它(主要)是用Python编写的,并且很容易扩展。它也可以轻松安装在许多操作系统上。我工作的一些人害怕命令行,并且有能力使用GUI工具,所以我将它们指向TortoiseHg。

两者各有利弊。使用你更舒服的任何一个。

奖金链接:

gitvsmercurial.com

gitvsmercurial.com via Wayback Machine

Post Mortem

自写这个答案以来,我主要成为git用户,主要是因为GitHub。我也开始在工作中使用Subversion。我宁愿不使用Subversion。

答案 5 :(得分:5)

一个中的6个,另一个中的1/2个。我从Mercurial转到Git,因为我团队中的另一个人更喜欢它。但是,我认为他更喜欢它只是因为他先学会了它。

答案 6 :(得分:5)

我更喜欢git,因为:

  • 它(似乎)更快对我来说。
  • 更多内置工具
  • 提供更多帮助,问题和讨论(即使在此网站上)。
  • GitHub 非常有用。
  • 现在使用Git进行了很多活跃/前沿的开发,特别是在 Javascript和Ruby社区

答案 7 :(得分:5)

几年前我在审查DVCS时:

  • bzr与Python 2.4绑定,不会安装/运行2.5开箱即用。

  • Windows上的git支持充其量是粗略的。

那离开了。我对hg非常满意。 hg社区似乎关注用户体验,这让我,一个用户,开心。 git UX似乎需要很长时间才能开始朝着“易用性”方向发展,这并不能让我对它有好感。

我认为hg需要具备的一些东西:灵活的元数据和大文件的易用性脱颖而出。但是,这些方面不会干扰我的常规用例,如果我真的需要它,我可以编写/修改扩展而不会有明显的悲伤。

答案 8 :(得分:4)

你可以用两者来达到相同的效果,但这并不意味着差异是肤浅的。

每天使用Git几年,Mercurial每天使用约一个月,我发现两者都有明显不同的感觉。

到目前为止,我的经验是,在集中式工作流程中进行协作时,Mercurial使得保留私有开发分支变得更加困难,而无需保留存储库的多个克隆。有了Git,你必须明确你所分享的内容。

因此,对于Git而言,随意进行黑客攻击并不是什么大不了的事。例如,如果它是一个工作项目,也许你“不应该”做的事情。它降低了尝试新想法的心理障碍。

由于我希望能够在我自己的存储库副本上做任何我想做的事情,并且只与他人分享我希望他们看到的东西(以及对他们有用的东西),我更喜欢Git因为它似乎让这更容易。


另一件事:我第一次看到Mercurial的Python API时感到非常兴奋(因为我是Python用户)。我以为我会很开心写分机。然后我看到warnings表示API无法保证兼容。

由于我很懒(我认为这是一种高贵的特征,在某些时候也是一个Haskell dabbler),我很快就失望地放弃了这个想法。

答案 9 :(得分:2)

虽然 有一些可用性差异(我的主要功能是Git默认不启用颜色;默认情况下,Hg缺少寻呼机,颜色,colordiff的hack,清除 - 只是因为有扩展名框架并不意味着你不应该发送它们并在任何地方启用它们),我坚持使用Git的一个重要原因是它在对我来说很重要的社区中有更多的思想共享。尽管Hg早期领导了Mozilla项目,但Git已经成为社区提到的标准(特别是javascript和web基础设施),Gnome,内核显然,以及我觉得有用的随机项目的长尾。

仅仅因为有网络效应并不意味着营销决定一切。 Git的工具集具有生成性和非常高效(它用于许多备份,存档和数据完整性的东西); Hg的扩展也必须是生成性的,但更多的是在ui增强的层面上。 Git启动了一些有用的标准,如快速导入。我认为这就是为什么它吸引了更多的系统构建器类型,它们都是改善git,完成它以及将它们放在git中的良好种子。

答案 10 :(得分:1)

历史事故。在Mercurial发布之前的几天内,我开始使用Git。我使用Git保持因为我懒得重新学习。

IOW:当我开始使用Git时Mercurial不存在,所以我从来没有在两者之间做出有意识的决定。

然而,我喜欢以下几件事: