Mercurial和Git有什么区别?

我一直在Windows上使用git(使用msysGit),我喜欢分布式源代码管理的想法。 就在最近我一直在看Mercurial(hg),它看起来很有趣。 不过,我无法围绕着hg和git之间的差异。

有没有人在git和hg之间做过并排比较? 我很想知道什么是不同的hg和git,而不必跳进fanboy讨论。


这些文章可能有助于:

  • Git与Mercurial:请放松(Git是MacGyver,Mercurial是James Bond)
  • Mercurial与Git的区别
  • 编辑 :比较Git和Mercurial名人似乎是一种趋势。 还有一个:

  • Git是Wesley Snipes,Mercurial是Denzel Washington

  • 我从事Mercurial的工作,但基本上我相信这两个系统是等价的。 他们都使用相同的抽象:构成历史的一系列快照(变更集)。 每个变更集知道它来自哪里(父变更集),并且可以有许多子变更集。 最近的hg-git扩展为Mercurial和Git之间提供了一个双向桥梁,并展示了这一点。

    Git非常注重变更这个历史图表(带来所有后果),而Mercurial并不鼓励历史重写,但无论如何这很容易做到,而且这样做的后果正是您应该期望它们的结果(即,如果我修改了你已有的变更集,那么如果你从我那里取得的话,你的客户将会看到它是新的)。 所以Mercurial对非破坏性命令有偏见。

    至于轻量级的分支机构,Mercurial支持自多个分支机构以来的存储库,总是我认为。 具有多个分支的Git存储库正是这样的:在一个存储库中存在多个不同的开发链。 然后Git为这些链添加名称,并允许您远程查询这些名称。 Mercurial的书签扩展添加了本地名称,在Mercurial 1.6中,您可以在推/拉时移动这些书签。

    我使用Linux,但显然TortoiseHg比Windows上的Git等效物更快,更好(由于较差的Windows文件系统的更好使用)。 http://github.com和http://bitbucket.org都提供在线托管服务,Bitbucket的服务非常棒,反应迅速(我还没有尝试过github)。

    我选择了Mercurial,因为它感觉干净而优雅 - 我被Git获得的shell / Perl / Ruby脚本推迟了。 如果您想知道我的意思,请尝试查看git-instaweb.sh文件:它是一个生成Ruby脚本的shell脚本,我认为它运行的是Web服务器。 shell脚本生成另一个shell脚本来启动第一个Ruby脚本。 还有一些Perl ,这是一个很好的方法。

    我喜欢将Mercurial和Git与James Bond和MacGyver进行比较的博客文章 - Mercurial比Git更低调。 在我看来,使用Mercurial的人并不那么容易被打动。 这体现在每个系统如何做Linus所描述的“最酷的合并永远!”。 在Git中,您可以通过执行以下操作与不相关的存储库合并:

    git fetch <project-to-union-merge>
    GIT_INDEX_FILE=.git/tmp-index git-read-tree FETCH_HEAD
    GIT_INDEX_FILE=.git/tmp-index git-checkout-cache -a -u
    git-update-cache --add -- (GIT_INDEX_FILE=.git/tmp-index git-ls-files)
    cp .git/FETCH_HEAD .git/MERGE_HEAD
    git commit
    

    这些命令对我来说看起来非常神秘。 在Mercurial中我们这样做:

    hg pull --force <project-to-union-merge>
    hg merge
    hg commit
    

    注意Mercurial命令是简单的而不是特殊的 - 唯一不寻常的是 - hg pull--force标志,这是需要的,因为当你从一个不相关的仓库中取出时,Mercurial将会中止。 正是这种差异使得Mercurial看起来更加优雅。


    Git是一个平台,Mercurial仅仅是一个应用程序。 Git是一个版本化的文件系统平台,恰巧在箱子里装有一个DVCS应用程序,但平常的平台应用程序更复杂,边缘比专注的应用程序要粗糙。 但是这也意味着git的VCS非常灵活,并且您可以使用git进行非源代码控制。

    这是差异的本质。

    Git最好从头开始理解 - 从存储库格式开始。 Scott Chacon的Git Talk是一个很好的入门书。 如果你试图在不知道引擎盖下发生了什么的情况下使用git,那么最终你会在某个时候感到困惑(除非你只坚持非常基本的功能)。 这听起来可能听起来很愚蠢,当你想要的只是日常编程例程的DVCS时,但git的天才在于存储库格式实际上非常简单,你可以很容易地理解git的整个操作。

    对于一些更注重技术性的比较,我个人看到的最好的文章是Dustin Sallings':

  • Mercurial与Git的区别
  • Reddit线程,git经验丰富的达斯汀回答了他自己的git新手问题
  • 他实际上广泛使用了两个DVCS,并且都很好地理解了这两个DVCS,并最终选择了git。

    链接地址: http://www.djcxy.com/p/7789.html

    上一篇: What is the Difference Between Mercurial and Git?

    下一篇: Loadbalancing web sockets