我想知道:
- Git 和 Mercurial 有什么区别?
- 使用它们有什么优点和缺点?
- Windows 对这两种工具的支持程度如何?
答案1
前段时间,谷歌对 Git 和 Mercurial 进行了分析。你可以在线阅读
http://code.google.com/p/support/wiki/DVCSAnalysis
(根据评论这可能与上面的死链接有关;由于评论不稳定,我将其编辑到答案中)
答案2
你可能想在 stackoverflow 上阅读这个问题:
答案3
Git 和 Mercurial 的共同点比不同点多。两者都很出色。
我使用 Mercurial,没有使用过 Git。听使用 Git 的朋友说,它需要一段时间才能习惯,但习惯之后就很棒了。
Windows 支持... 我相信两者都有 GUI 前端。Mercurial 是用 Python 编写的,所以没有问题。
答案4
为一个系统管理员,我相信向后兼容性、稳定性、稳健性、安全性和备份是部署新工具的重要主题。我可以给你一些关于 Mercurial 的信息:
向后兼容性:Mercurial 有一个既定政策关于向后兼容性。规则规定,不同版本的 Mercurial必须始终能够通过 HTTP(S) 和 SSH 互相交谈。
这意味着你可以安全升级客户端而不必同时升级服务器。您也可以做相反的事情,单独升级服务器,但这通常不那么重要,因为新功能出现在客户端中,并且通常不需要服务器的任何操作。
这磁盘格式有时会发生变化——到目前为止,我们已经进行了 4 次更改。当发生这种情况时,旧客户端将拒绝对磁盘上的存储库进行操作(但请记住,它们仍然可以通过网络推送/拉取)。新客户端仍然可以读取/写入旧的存储库格式,并且永远不会自动将现有存储库升级为新格式,以防存储库通过 NFS 与旧客户端共享。总而言之,我们试图让升级变得轻松。
输出稳定性:这与上述内容密切相关。作为兼容性规则,我们还确保 Mercurial 的输出是稳定的。这意味着你今天编写的 shell 脚本明天将继续有效。
鲁棒性:与 Git 一样,变更集通过对每个变更和父变更集计算的加密哈希值来标识。这使得更改历史记录的任何部分都无法不被察觉。每次签出文件时都会验证哈希值。
Mercurial 存储库包含许多revlog 文件. 它们的设计目的是仅追加,这使得通过简单地截断文件即可修复某些形式的硬件损坏。您始终可以
hg verify
在存储库上使用,以使 Mercurial 再次检查一切是否正常。安全:当使用以下方式托管存储库时SSH,所有常规的访问控制规则均适用 — Mercurial 并未做任何特殊的事情。因此,如果我可以登录并读取存储库中的文件,那么我也可以进行克隆。如果我还具有写入权限,那么我就可以推送到存储库。因此,管理这一点很容易:只需设置一个组并确保新文件可由该组的成员写入即可。
当托管HTTP(S),它是处理身份验证的前端 Web 服务器。我们提供与存储库交互的 CGI(具有 FastCGI、WSGI 和 ISAPI 风格),但脚本不执行身份验证。这意味着可以轻松地将 Mercurial 与现有设置集成:如果您已经使用 Active Directory 来验证用户,那么您就可以将 AD 与 Mercurial 结合使用。请参阅有关 AD 和 Mercurial 的更多信息请咨询此问题。
备份:使用仅附加设计,您几乎只需复制“实时”存储库即可进行备份。但是,这样可能会获得过多的数据,因为备份程序可能会在复制“清单”之前复制“更改日志”,而 Mercurial 会在写入更改日志之前写入清单。更改日志引用清单,因此备份最终会在清单中出现未引用的条目。运行
hg verify
将检测到这种情况并hg recover
可以回滚未完成的事务。这合适的方式执行备份的方法是使用
hg clone
。这将确保复制一致的快照,即使在备份运行时人们将数据推送到存储库。由于您可以通过网络克隆,因此您可以轻松地将数据发送到异地机器以进行安全保管。