【问题标题】:Mercurial: is it possible to compress .hg folder to several large BLOBs?Mercurial:是否可以将 .hg 文件夹压缩为几个大 BLOB?
【发布时间】:2012-01-01 05:48:22
【问题描述】:

问题:通过网络克隆 mercurial 存储库需要太多时间 (~ 12 minutes)。我们怀疑这是因为.hg 目录包含很多文件(> 15 000)。

我们还有git 存储库,它更大,但克隆性能相当不错——大约1 minute。貌似是因为.git通过网络传输的文件夹只有几个文件(通常是< 30)。

问题: Mercurial 是否支持“将存储库压缩为单个 blob”?如果支持,如何启用?

谢谢

更新

Mercurial 版本:1.8.3

访问方式:SAMBA分享(\\server\path\to\repo)

Mercurial 安装在 Linux 机器上,从 Windows 机器访问(通过 Windows 域登录)

【问题讨论】:

  • 您使用的是什么版本的 Mercurial?网络协议最近得到了很大的改进。另外,您使用什么方法(ssh、http 等)以及为您的 repo 提供什么服务?
  • 问题已更新。但我相信在任何协议上传输 15 000 个文件都会很慢,除非该协议在内部将它们作为单个 blob 发送。

标签: performance mercurial clone


【解决方案1】:

Mercurial 使用某种压缩方式在网络上发送数据(请参阅http://hgbook.red-bean.com/read/behind-the-scenes.html#id358828),但是通过使用 Samba,您完全绕过了这种机制。 Mercurial 认为远程存储库位于本地文件系统上,使用的机制不同。

在链接的文档中明确指出,每个数据在发送之前都被压缩为一个整体:

这种算法与整个流的压缩相结合 (而不是一次修订)大大减少了 要传输的字节,比大多数网络性能更好 各种网络。

因此,您不会遇到使用“真实”网络协议的 15'000 个文件的问题。

顺便说一句,我强烈建议不要使用 Samba 之类的东西来共享您的存储库。这真的是在问各种各样的问题:

  • 多人同时尝试访问存储库时出现锁定问题
  • 文件权限问题
  • 文件统计问题
  • 符号链接管理问题(如果使用)

您可以在 wiki 上找到有关发布存储库的信息:PublishingRepositories(在那里您可以看到根本不推荐使用 samba)

为了回答这个问题,AFAIK,没有办法压缩 Mercurial 元数据或类似减少文件数量的东西。但如果存储库发布正确,这将不再是问题。

【讨论】:

    【解决方案2】:

    您可以通过创建一个包将其压缩为一个 blob:

    • hg bundle --all \\server\therepo.bundle
    • hg clone \\server\therepo.bundle
    • hg log -R therepo.bundle

    您确实需要定期重新创建或更新包,但创建包的速度很快,可以在服务器上的 post-changeset 挂钩中完成,也可以在夜间完成。 (如果您在 .hg/hgrc 中正确设置了 [paths],则可以通过从 bundle 克隆后拉取 repo 来获取剩余的变更集)。

    因此,要回答您关于几个 blob 的问题,您可以为每个 X 变更集创建一个捆绑包,并让客户端克隆/取消捆绑其中的每一个。 (但是,定期更新一个 + 对任何剩余变更集进行正常拉取似乎更容易......)

    但是,既然您在服务器上运行 Linux,我建议运行 hg-ssh 或 hg-web.cgi。这就是我们所做的,它对我们很有效。 (使用 Windows 客户端)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多