Performance Mercurial:是否可以将.hg文件夹压缩成几个大的blob?

Performance Mercurial:是否可以将.hg文件夹压缩成几个大的blob?,performance,mercurial,clone,Performance,Mercurial,Clone,问题:通过网络克隆mercurial存储库花费太多时间(~12分钟)。我们怀疑这是因为.hg目录包含大量文件(>15000) 我们还有更大的git存储库,但克隆性能相当好,大约1分钟。看起来是因为通过网络传输的.git文件夹只有几个文件(通常是

问题:通过网络克隆mercurial存储库花费太多时间(
~12分钟
)。我们怀疑这是因为
.hg
目录包含大量文件(
>15000

我们还有更大的
git
存储库,但克隆性能相当好,大约
1分钟。看起来是因为通过网络传输的
.git
文件夹只有几个文件(通常是
<30

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

谢谢

更新

Mercurial版本:1.8.3

访问方法:SAMBA共享(
\\server\path\to\repo


Mercurial安装在Linux box上,可从Windows计算机访问(通过Windows域登录)

Mercurial使用某种压缩在网络上发送数据(请参阅),但通过使用Samba,您完全可以绕过此机制。Mercurial认为远程存储库位于本地文件系统上,使用的机制不同

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

这种算法和整个流压缩的结合 (而不是一次修订)大大减少了 要传输的字节数,在大多数情况下可产生更好的网络性能 各种网络

因此,如果使用“真正的”网络协议,就不会有15000个文件的问题

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

  • 多人同时尝试访问存储库时锁定问题
  • 档案权利问题
  • 文件统计问题
  • 符号链接管理问题(如果使用)
您可以在wiki上找到关于发布存储库的信息:(在这里您可以看到根本不推荐使用samba)


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

Mercurial使用某种压缩在网络上发送数据(请参阅),但是通过使用Samba,您完全可以绕过这种机制。Mercurial认为远程存储库位于本地文件系统上,使用的机制不同

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

这种算法和整个流压缩的结合 (而不是一次修订)大大减少了 要传输的字节数,在大多数情况下可产生更好的网络性能 各种网络

因此,如果使用“真正的”网络协议,就不会有15000个文件的问题

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

  • 多人同时尝试访问存储库时锁定问题
  • 档案权利问题
  • 文件统计问题
  • 符号链接管理问题(如果使用)
您可以在wiki上找到关于发布存储库的信息:(在这里您可以看到根本不推荐使用samba)


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

您可以通过创建捆绑包将其压缩为blob:

  • hg bundle--all\\server\therepo.bundle
  • hg clone\\server\therepo.bundle
  • hg log-R therepo.bundle
您确实需要定期重新创建或更新捆绑包,但创建捆绑包很快,可以在服务器上的后期变更集挂钩中完成,也可以每晚完成。(因为如果您在.hg/hgrc中正确设置了[path],那么可以通过从bundle克隆后拉取repo来获取剩余的变更集)

因此,为了回答您关于几个blob的问题,您可以每X个变更集创建一个bundle,并让客户机克隆/解除绑定其中的每一个。(然而,定期更新单个变更集+正常拉动任何剩余变更集似乎更容易…)


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

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

  • hg bundle--all\\server\therepo.bundle
  • hg clone\\server\therepo.bundle
  • hg log-R therepo.bundle
您确实需要定期重新创建或更新捆绑包,但创建捆绑包很快,可以在服务器上的后期变更集挂钩中完成,也可以每晚完成。(因为如果您在.hg/hgrc中正确设置了[path],那么可以通过从bundle克隆后拉取repo来获取剩余的变更集)

因此,为了回答您关于几个blob的问题,您可以每X个变更集创建一个bundle,并让客户机克隆/解除绑定其中的每一个。(然而,定期更新单个变更集+正常拉动任何剩余变更集似乎更容易…)


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

您使用的是哪个版本的Mercurial?网络协议最近有了很大的改进。另外,您使用什么方法(ssh、http等)以及什么服务于您的回购?问题已更新。但我相信传输15000个文件比任何协议都要慢,除非该协议在内部将它们作为单个文件发送