8

因此,例如,如果有一个 mercurial 存储库https://code.google.com/p/potentiallyLarge是否有一个命令可以让我在克隆它之前找出它的大小?就像是

hg size https://code.google.com/p/potentiallyLarge

此外,是否有用于颠覆存储库的命令?

4

2 回答 2

4

磁盘上使用的大小与用于克隆的带宽不同。一些托管站点(例如 Bitbucket)会在磁盘上显示大小,以便您在克隆之前预先知道系统需要多少空间。但我可以看到谷歌代码没有,所以它不会在这里帮助你。

Mercurial有线协议不公开任何可以告诉您存储库有多大的命令。当您进行正常克隆时,客户端不知道它将接收多少数据,它只是接收数据流。收到变更日志后,客户端知道需要多少清单和文件日志,但不知道它们的大小

事实上,服务器很难计算克隆将使用多少数据:使用的网络带宽小于磁盘空间,因为使用的压缩方式不同(bzip2 与 gzip)。但是,如果您使用--uncompressed您的克隆(Google 代码不支持),那么有一个技巧,见下文。

了解克隆使用多少带宽的唯一方法是制作一个。如果您已经有一个克隆,您可以使用它hg bundle来模拟一个克隆:

$ hg bundle --all my-bundle.hg

捆绑包的大小将告诉您存储库中有多少数据。

一个技巧:如果 Google Code 支持hg clone --uncompressed,那么您可以使用它来了解远程存储库的大小!当您使用--uncompressed时,客户端会要求服务器按原样发送.hg/目录的内容 — 无需使用 bzip2 重新压缩它。方便的是,服务器通过告诉客户端存储库的大小来启动流。因此,您可以启动这样的克隆,然后在您的客户端打印告诉您存储库大小的行时(使用 Control-C)中止它。

于 2012-09-01T09:36:13.883 回答
2

更新:我在下面的回答是错误的,但我把它留在这里,因为 MG 提供了一些很好的信息作为回应。看起来正确的答案是“不”。

不是一个好方法,而是一种解决方法。Ahg clone URL真的很简单hg init ; hg pull URL 并且该命令hg incoming会告诉您如果进行拉动会得到什么,因此您可以这样做:

hg init theproject
cd theproject
hg incoming --stat URL_TO_THE_PROJECT

如果你跟进,你会得到一个相当不错的猜测你会提取多少数据:

hg pull URL_TO_THE_PROJECT

我不确定网络效率,hg incoming但我认为它不会从所有变更集中下载所有内容,尽管我可能错了。它提供了一个--bundle选项,可以将任何传入的下拉内容保存到一个文件中,您以后可以从中拉取以避免重复下载。

于 2012-09-01T00:31:47.210 回答