Michael Ellick Ang Asked: 2009-05-28 11:28:39 +0800 CST2009-05-28 11:28:39 +0800 CST 2009-05-28 11:28:39 +0800 CST Git 和 Mercurial 772 我想知道: Git 和 Mercurial 有什么区别? 使用它们的优点和缺点是什么? Windows 对这两种工具的支持有多好? mercurial scm git 11 个回答 Voted Best Answer Vihang D 2009-05-28T20:25:18+08:002009-05-28T20:25:18+08:00 一段时间前,谷歌对 Git 和 Mercurial 进行了分析。你可以在网上阅读 http://code.google.com/p/support/wiki/DVCSAnalysis (根据评论,这可能与上述死链接有关;由于评论不稳定,我将其编辑为答案) bene 2009-05-28T12:53:27+08:002009-05-28T12:53:27+08:00 你可能想在 stackoverflow 上阅读这个问题: Git、Mercurial 和 Bazaar 的相对优势和劣势是什么? dwc 2009-05-28T11:43:55+08:002009-05-28T11:43:55+08:00 Git 和 Mercurial 的共同点多于不同点。两者都很棒。 我使用 Mercurial 并且没有使用 Git 的经验。从使用 Git 的朋友那里,我听说这需要一些时间来适应,但在那之后就很棒了。 Windows 支持...我相信两者都有 GUI 前端。Mercurial 是用 Python 编写的,所以没有问题。 Michael Ellick Ang 2009-05-29T15:13:47+08:002009-05-29T15:13:47+08:00 这是 Eric Sink 的一篇关于分布式 SCM 的文章: Mercurial、Subversion 和 Wesley Snipes Martin Geisler 2011-12-23T13:41:24+08:002011-12-23T13:41:24+08:00 对于系统管理员,我相信向后兼容性、稳定性、健壮性、安全性和备份是重要的主题,然后是部署新工具。我可以给你一些关于 Mercurial 的信息: 向后兼容性: Mercurial 对向后兼容性有明确的政策。规则规定不同版本的 Mercurial必须始终能够通过 HTTP(S) 和 SSH 相互通信。 这意味着您可以安全地升级客户端,而无需同时升级服务器。您也可以做相反的事情并单独升级服务器,但这通常不那么重要,因为新功能会出现在客户端中并且通常不需要服务器提供任何东西。 磁盘格式有时会发生变化——到目前为止,我们已经进行了 4 次更改。发生这种情况时,旧客户端将拒绝对磁盘上的存储库进行操作(但请记住,它们仍然可以通过网络推送/拉取)。新客户端仍然可以读取/写入旧存储库格式,并且永远不会自动将现有存储库升级到新格式,以防存储库通过 NFS 与旧客户端共享。总而言之,我们试图让升级变得无痛。 输出稳定性:这与上述密切相关。作为兼容性规则的一部分,我们还确保 Mercurial 的输出是稳定的。这意味着您今天编写的 shell 脚本明天将继续工作。 健壮性:与 Git 一样,变更集由加密哈希值标识,该哈希值在每个变更和父变更集上计算得出。这使得在不引起注意的情况下更改历史的任何部分是不可行的。每次签出文件时都会验证哈希值。 Mercurial 存储库包含大量revlog 文件。它们被设计为仅附加,这使得可以通过简单地截断文件来修复某些形式的硬件损坏。您始终可以hg verify在存储库上使用 Mercurial 仔细检查一切是否正常。 安全性:当使用SSH托管存储库时,所有正常的访问控制规则都适用——Mercurial 没有做任何特别的事情。因此,如果我可以登录并读取您存储库中的文件,那么我也可以进行克隆。如果我也有写权限,那么我可以推送到存储库。因此管理起来很容易:只需设置一个组并确保该组的成员可以写入新文件。 使用HTTP(S)托管时,处理身份验证的是前端网络服务器。我们提供了一个与存储库交互的 CGI(具有 FastCGI、WSGI 和 ISAPI 风格),但脚本不进行身份验证。这意味着很容易将 Mercurial 与现有设置集成:如果您已经在使用 Active Directory 对用户进行身份验证,那么您就可以将 AD 与 Mercurial 一起使用。有关 AD 和 Mercurial 的更多信息,请参阅此问题。 最后,hgweb您可以使用RhodeCode 之类的东西,而不是使用我们提供的 CGI 脚本。这将在这个问题中进一步讨论。 备份:使用仅附加设计,您几乎可以只复制“实时”存储库来进行备份。但是,您可能会以这种方式获得太多数据,因为备份程序可能会在复制“清单”之前复制“更改日志”,而 Mercurial 在写入更改日志之前写入清单。更改日志引用了清单,因此备份将在清单中以未引用的条目结束。运行hg verify将检测到这一点并hg recover可以回滚不完整的事务。 进行备份的正确方法是使用hg clone. 这将确保复制一致的快照,即使人们在备份运行时将数据推送到存储库中也是如此。由于您可以通过网络进行克隆,因此您可以轻松地将数据发送到异地机器以进行安全保存。 chollida 2009-05-28T11:50:34+08:002009-05-28T11:50:34+08:00 我喜欢分布式修订控制系统:Git vs. Mercurial vs. SVN: 是一系列工具,就像 unix 一样,包含几层,例如它的管道和瓷器,而 mercurial 更像是一个单一的工具 ala svn。 当我开始学习两者时,我还发现 mecurial 在 Windows 上工作得更好。公平地说,Windows 的 git 现在相当稳定。 Chris Adams 2009-05-28T18:40:49+08:002009-05-28T18:40:49+08:00 首先,任何一个都将比旧系统迈出一大步——这确实不是一个糟糕的选择。 Git 使用起来有点困难,但速度明显更快,可以说更强大。 Mercurial 更友好,并且 - 感谢 TortoiseHg - 在 Windows 上更易于使用。 在任何一种情况下,您都可以选择出色的托管(GitHub、Bitbucket,最终是 Google Code),以及来自其他系统的大量指南和迁移工具。如果您需要 Windows 用户,我会推荐 Mercurial - 否则尝试两者并查看您更喜欢哪一个可能是有意义的。我发现 Mercurial 更舒服,但 Git 也不甘落后,并且有一些很酷的特性(ierebase -i)。 Christophe Muller 2010-01-22T07:06:15+08:002010-01-22T07:06:15+08:00 git 和 mercurial 和有什么不一样? 那里有许多详细的 DVCS 研究(请参阅上面答案中的链接)。我喜欢这个最近的博客:http ://stevelosh.com/blog/2010/01/the-real-difference-between-mercurial-and-git/并且非常同意它。今天(2010 年初)git 的主要优点可能是 github!:-) 使用它们的优缺点是什么? 除非您有非常特殊的要求,否则我会说 99% 的时间两者都非常擅长做您需要的事情。 我听说 Git windows 支持不好(即,需要大多数 windows 开发人员没有的 Cygwin)但是在看到 TortoiseGit 的演示后,我会说这不再是真的了。 另外我听说你可以在 Git 中轻松地删除文件/目录,而不是在 Mercurial 中,但我发现convert --filemap它也很容易!shell 或 Python 中的扩展也非常强大(用于创建命令等),队列扩展允许通过变基来清理历史记录,就像在 Git 中一样。 总之,差异往往会变得更小:看看两者并选择哪一个,它们都很好。例如,如果您已经知道 subversion,Mercurial 可能更容易处理,因为类似的命令比 Git 更匹配。 Windows 对这两种工具的支持有多好? 看上面。 希望它会有所帮助。 干杯, 克里斯托夫。 Michael Ellick Ang 2009-05-28T13:47:37+08:002009-05-28T13:47:37+08:00 在 GNOME 中找到分布式 SCM -> http://live.gnome.org/DistributedSCM interstar 2009-06-05T07:34:41+08:002009-06-05T07:34:41+08:00 Git 的一个主要胜利是 Github 以及它跨源托管与社交网络以改变软件项目文化的方式。 尽管其他 dcvss 在技术上可能具有可比性,但 github 在我看来是文化上真正的进步。
一段时间前,谷歌对 Git 和 Mercurial 进行了分析。你可以在网上阅读
http://code.google.com/p/support/wiki/DVCSAnalysis(根据评论,这可能与上述死链接有关;由于评论不稳定,我将其编辑为答案)
你可能想在 stackoverflow 上阅读这个问题:
Git、Mercurial 和 Bazaar 的相对优势和劣势是什么?
Git 和 Mercurial 的共同点多于不同点。两者都很棒。
我使用 Mercurial 并且没有使用 Git 的经验。从使用 Git 的朋友那里,我听说这需要一些时间来适应,但在那之后就很棒了。
Windows 支持...我相信两者都有 GUI 前端。Mercurial 是用 Python 编写的,所以没有问题。
这是 Eric Sink 的一篇关于分布式 SCM 的文章:
对于系统管理员,我相信向后兼容性、稳定性、健壮性、安全性和备份是重要的主题,然后是部署新工具。我可以给你一些关于 Mercurial 的信息:
向后兼容性: Mercurial 对向后兼容性有明确的政策。规则规定不同版本的 Mercurial必须始终能够通过 HTTP(S) 和 SSH 相互通信。
这意味着您可以安全地升级客户端,而无需同时升级服务器。您也可以做相反的事情并单独升级服务器,但这通常不那么重要,因为新功能会出现在客户端中并且通常不需要服务器提供任何东西。
磁盘格式有时会发生变化——到目前为止,我们已经进行了 4 次更改。发生这种情况时,旧客户端将拒绝对磁盘上的存储库进行操作(但请记住,它们仍然可以通过网络推送/拉取)。新客户端仍然可以读取/写入旧存储库格式,并且永远不会自动将现有存储库升级到新格式,以防存储库通过 NFS 与旧客户端共享。总而言之,我们试图让升级变得无痛。
输出稳定性:这与上述密切相关。作为兼容性规则的一部分,我们还确保 Mercurial 的输出是稳定的。这意味着您今天编写的 shell 脚本明天将继续工作。
健壮性:与 Git 一样,变更集由加密哈希值标识,该哈希值在每个变更和父变更集上计算得出。这使得在不引起注意的情况下更改历史的任何部分是不可行的。每次签出文件时都会验证哈希值。
Mercurial 存储库包含大量revlog 文件。它们被设计为仅附加,这使得可以通过简单地截断文件来修复某些形式的硬件损坏。您始终可以
hg verify
在存储库上使用 Mercurial 仔细检查一切是否正常。安全性:当使用SSH托管存储库时,所有正常的访问控制规则都适用——Mercurial 没有做任何特别的事情。因此,如果我可以登录并读取您存储库中的文件,那么我也可以进行克隆。如果我也有写权限,那么我可以推送到存储库。因此管理起来很容易:只需设置一个组并确保该组的成员可以写入新文件。
使用HTTP(S)托管时,处理身份验证的是前端网络服务器。我们提供了一个与存储库交互的 CGI(具有 FastCGI、WSGI 和 ISAPI 风格),但脚本不进行身份验证。这意味着很容易将 Mercurial 与现有设置集成:如果您已经在使用 Active Directory 对用户进行身份验证,那么您就可以将 AD 与 Mercurial 一起使用。有关 AD 和 Mercurial 的更多信息,请参阅此问题。
最后,
hgweb
您可以使用RhodeCode 之类的东西,而不是使用我们提供的 CGI 脚本。这将在这个问题中进一步讨论。备份:使用仅附加设计,您几乎可以只复制“实时”存储库来进行备份。但是,您可能会以这种方式获得太多数据,因为备份程序可能会在复制“清单”之前复制“更改日志”,而 Mercurial 在写入更改日志之前写入清单。更改日志引用了清单,因此备份将在清单中以未引用的条目结束。运行
hg verify
将检测到这一点并hg recover
可以回滚不完整的事务。进行备份的正确方法是使用
hg clone
. 这将确保复制一致的快照,即使人们在备份运行时将数据推送到存储库中也是如此。由于您可以通过网络进行克隆,因此您可以轻松地将数据发送到异地机器以进行安全保存。我喜欢分布式修订控制系统:Git vs. Mercurial vs. SVN:
是一系列工具,就像 unix 一样,包含几层,例如它的管道和瓷器,而 mercurial 更像是一个单一的工具 ala svn。
当我开始学习两者时,我还发现 mecurial 在 Windows 上工作得更好。公平地说,Windows 的 git 现在相当稳定。
首先,任何一个都将比旧系统迈出一大步——这确实不是一个糟糕的选择。
Git 使用起来有点困难,但速度明显更快,可以说更强大。
Mercurial 更友好,并且 - 感谢 TortoiseHg - 在 Windows 上更易于使用。
在任何一种情况下,您都可以选择出色的托管(GitHub、Bitbucket,最终是 Google Code),以及来自其他系统的大量指南和迁移工具。如果您需要 Windows 用户,我会推荐 Mercurial - 否则尝试两者并查看您更喜欢哪一个可能是有意义的。我发现 Mercurial 更舒服,但 Git 也不甘落后,并且有一些很酷的特性(ierebase -i)。
那里有许多详细的 DVCS 研究(请参阅上面答案中的链接)。我喜欢这个最近的博客:http ://stevelosh.com/blog/2010/01/the-real-difference-between-mercurial-and-git/并且非常同意它。今天(2010 年初)git 的主要优点可能是 github!:-)
除非您有非常特殊的要求,否则我会说 99% 的时间两者都非常擅长做您需要的事情。
我听说 Git windows 支持不好(即,需要大多数 windows 开发人员没有的 Cygwin)但是在看到 TortoiseGit 的演示后,我会说这不再是真的了。
另外我听说你可以在 Git 中轻松地删除文件/目录,而不是在 Mercurial 中,但我发现
convert --filemap
它也很容易!shell 或 Python 中的扩展也非常强大(用于创建命令等),队列扩展允许通过变基来清理历史记录,就像在 Git 中一样。总之,差异往往会变得更小:看看两者并选择哪一个,它们都很好。例如,如果您已经知道 subversion,Mercurial 可能更容易处理,因为类似的命令比 Git 更匹配。
看上面。
希望它会有所帮助。
干杯,
克里斯托夫。
在 GNOME 中找到分布式 SCM -> http://live.gnome.org/DistributedSCM
Git 的一个主要胜利是 Github 以及它跨源托管与社交网络以改变软件项目文化的方式。
尽管其他 dcvss 在技术上可能具有可比性,但 github 在我看来是文化上真正的进步。