AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 13267
Accepted
Michael Ellick Ang
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 11 个回答
  • 1372 Views

11 个回答

  • Voted
  1. 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

    (根据评论,这可能与上述死链接有关;由于评论不稳定,我将其编辑为答案)

    • 11
  2. bene
    2009-05-28T12:53:27+08:002009-05-28T12:53:27+08:00

    你可能想在 stackoverflow 上阅读这个问题:

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

    • 7
  3. dwc
    2009-05-28T11:43:55+08:002009-05-28T11:43:55+08:00

    Git 和 Mercurial 的共同点多于不同点。两者都很棒。

    我使用 Mercurial 并且没有使用 Git 的经验。从使用 Git 的朋友那里,我听说这需要一些时间来适应,但在那之后就很棒了。

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

    • 3
  4. Michael Ellick Ang
    2009-05-29T15:13:47+08:002009-05-29T15:13:47+08:00

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

    Mercurial、Subversion 和 Wesley Snipes

    • 3
  5. 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. 这将确保复制一致的快照,即使人们在备份运行时将数据推送到存储库中也是如此。由于您可以通过网络进行克隆,因此您可以轻松地将数据发送到异地机器以进行安全保存。

    • 3
  6. 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 现在相当稳定。

    • 2
  7. 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)。

    • 2
  8. 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 对这两种工具的支持有多好?

    看上面。

    希望它会有所帮助。

    干杯,
    克里斯托夫。

    • 1
  9. Michael Ellick Ang
    2009-05-28T13:47:37+08:002009-05-28T13:47:37+08:00

    在 GNOME 中找到分布式 SCM -> http://live.gnome.org/DistributedSCM

    • 0
  10. interstar
    2009-06-05T07:34:41+08:002009-06-05T07:34:41+08:00

    Git 的一个主要胜利是 Github 以及它跨源托管与社交网络以改变软件项目文化的方式。

    尽管其他 dcvss 在技术上可能具有可比性,但 github 在我看来是文化上真正的进步。

    • 0

相关问题

  • 如何修复 git 中第一次提交的元信息?

  • 如何编辑 git 的历史记录以更正不正确的电子邮件地址/名称 [关闭]

  • git如何控制访问权限

  • 如何在 Windows 2008 服务器上设置中央存储库

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve