Git和Mercurial

我想知道:

  • Git和Mercurial有什么区别?
  • 使用它们的优点和缺点是什么?
  • Windows对这两种工具的支持有多好?

有一段时间,谷歌做了Git和Mercurial的分析。 你可以在网上阅读

http://code.google.com/p/support/wiki/DVCSAnalysis

你可能想要阅读这个问题在计算器上:

Git,Mercurial和Bazaar的相对优势和劣势是什么?

首先,任何一个系统都将比以前的系统大幅度提高 – 这实在是一个不错的select。

Git有点难以使用,但明显更快,可以说更强大。

Mercurial是友好的,并且 – 感谢TortoiseHg – 在Windows上使用起来更容易。

在这两种情况下,你都可以select优秀的托pipe(GitHub,Bitbucket,最终谷歌代码),从其他系统的许多指南和迁移工具。 如果你需要Windows用户,我build议使用Mercurial,否则尝试两种方法,看看你喜欢哪一种。 我发现Mercurial更舒适,但是Git并没有那么落后,并且有一些令人恐怖的function(ierebase -i)。

Git和Mercurial比它们有更多的共同之处。 两者都很好。

我使用Mercurial,并没有与Git的经验。 从使用Git的朋友,我听到它需要一些习惯,但在那之后它是真棒。

Windows支持…我相信这两个都有GUI前端。 Mercurial是用Python编写的,所以没有问题。

git和mercurial有什么区别?

在那里有很多详细的DVCS研究(见上面答案中的链接)。 我喜欢这个最近的博客: http : //stevelosh.com/blog/2010/01/the-real-difference-between-mercurial-and-git/,并非常赞同。 git今天(2010年初)的主要优点可能是github! 🙂

使用它们有什么优点和缺点?

除非你有非常特殊的要求,否则我会说99%的时间都是非常擅长你所需要的。

我听说,Git的Windows支持不好(即需要大多数Windows开发者没有的Cygwin),但看到TortoiseGit的演示后,我会说这不是真的了。

另外我听说你可以很容易的在Git中删除文件/目录,而不是在Mercurial中,但是我发现使用convert --filemap也很容易! 另外在shell或Python中的扩展可以非常强大(创build命令等),Queue扩展允许通过rebasing来清理历史logging,就像在Git中一样。

总之,差异往往会变小:看看两者,select哪一个,他们都是好的。 例如,如果你已经知道颠覆,Mercurial可能会更容易处理,因为类似的命令比Git更匹配。

这两个工具的Windows支持有多好?

往上看。

希望它会有所帮助。

干杯,
克里斯托夫。

我喜欢分布式修订控制系统:Git与Mercurial与SVN :

是一系列的工具,就像unix一样,包含一些图层,比如它的pipe道和porcelin,mercurial更像是一个单独的工具ala svn。

当我开始学习两种方法时,我也发现有些东西在windows上工作得更好。 为了公平的git现在是相当稳定的。

这里有一篇关于Eric Sink分布式SCM的文章:

Mercurial,Subversion和Wesley Snipes

对于系统pipe理员 ,我认为向后兼容性,稳定性,健壮性,安全性和备份是重要的话题,然后部署一个新的工具。 我可以给你一些有关Mercurial的信息:

  • 向后兼容性: Mercurial在向后兼容性方面有一个明确的政策 。 规则说不同版本的Mercurial 必须能够通过HTTP(S)和SSH相互通话。

    这意味着您可以安全地升级客户端,而无需同时升级服务器。 你也可以做相反的事情,并单独升级服务器,但是这通常不那么重要,因为新function显示在客户端,并且通常不需要服务器上的任何东西。

    磁盘格式有时会改变 – 直到现在我们已经有了4个改变。 当发生这种情况时,旧的客户端将拒绝在磁盘上的存储库上操作(但是请记住,它们仍然可以推/拉networking)。 新的客户端仍然可以读取/写入旧的存储库格式,并且永远不会自动将现有的存储库升级到新的格式,以防存储库通过NFS与旧客户端共享。 总而言之,我们试图使升级变得无痛苦 。

  • 输出稳定性:这与上述密切相关。 作为兼容性规则的一部分,我们也确保Mercurial的输出是稳定的。 这意味着你今天编写的shell脚本将在明天继续工作。

  • 健壮性:与Git一样,变更集由在每个更改和父变更集上计算的encryption哈希值来标识。 这使得改变历史的任何部分而不被注意到是不可行的。 每次检出文件时都会validation哈希值。

    Mercurial存储库由很多revlog文件组成 。 它们被devise成仅仅追加 ,这使得通过截断文件来修复某些forms的硬件损坏成为可能。 你总是可以在储存库上使用hg verify来让Mercurial仔细检查一切是否如实。

  • 安全性:当存储库使用SSH托pipe时,所有正常的访问控制规则都适用 – Mercurial没有做任何特殊的事情。 所以,如果我可以login并读取存储库中的文件,那么我也可以创build一个克隆。 如果我也有写入权限,那么我可以推送到存储库。 因此pipe理这个工作非常简单:只需设置一个组,并确保新文件可由组成员写入。

    当使用HTTP(S)进行托pipe时,它是处理身份validation的前端Web服务器。 我们提供了与存储库交互的CGI(具有FastCGI,WSGI和ISAPI风格),但脚本没有进行身份validation。 这意味着将Mercurial与现有设置集成非常简单:如果您已经使用Active Directory对用户进行身份validation,那么您就可以使用Mercurial进行AD设置了。 有关AD和Mercurial的更多信息,请参阅此问题 。

    最后,不是使用我们提供的hgweb CGI脚本,而是使用类似RhodeCode的东西。 这个问题将进一步讨论。

  • 备份:使用只附加devise,您几乎可以复制“实时”存储库以进行备份。 但是,由于备份程序在复制“清单”之前可能会复制“更改日志”,而Mercurial在写入更新日志之前写入清单,所以可能会发生这种情况。 更新日志引用清单,所以备份将在清单中以未引用的条目结束。 运行hg verify会检测到这一点, hg recover可以回滚未完成的事务。

    备份的正确方法是使用hg clone 。 这将确保复制一致的快照,即使在备份运行时人们正在将数据推入存储库。 由于您可以通过networking进行克隆,因此您可以轻松地将数据发送到非现场机器以保持安全。

Git的一个重大胜利就是Github,以及它通过社交networking来源托pipe的方式来改变软件项目的文化。

尽pipe其他的dcvss在技术上可能是可比的,但github在我看来是在文化上向前迈进的。

在GNOME中find分布式SCM – > http://live.gnome.org/DistributedSCM

对于有偏见的比较,请参阅为什么Git比X好