如何找出mercurial存储库的大小?

时间:2012-08-31 16:18:52

标签: mercurial command

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

这样的东西
hg size https://code.google.com/p/potentiallyLarge

另外,是否有为subversion存储库执行此操作的命令?

2 个答案:

答案 0 :(得分:4)

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

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

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

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

$ hg bundle --all my-bundle.hg

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

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

答案 1 :(得分:2)

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

不是一个好方法,而是一种解决方法。 hg 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选项,可以将任何传入的数据保存到一个文件中,以后可以从中提取,以避免双重下载。