在克隆之前估计Git存储库的大小

PJ *_*ron 19 git

有没有办法估计公共Git存储库的大小而不必克隆它?

我想使用此信息来确保存储库小于特定大小.如果不是,我不想克隆它.

我知道它可以在Github上完成,但是这个存储库托管在专用服务器上.

jth*_*ill 7

简短回答:"不."

如果空间完全是一个问题,那么将repo克隆到你最大的可用空间,如果它足够小,可以放在其他地方移动它将是便宜的.

一个非常强大的方法来获取它:把它放在服务器上的post-receive hook中

git for-each-ref refs/size | while read . . ref; do git update-ref --delete $ref; done
set -- $(du -sh .git/objects)
git update-ref refs/size/$1-as-of-$(date +%Y%m%dT%H%M%S%Z) HEAD
Run Code Online (Sandbox Code Playgroud)

而且你可以对它进行远程控制.


Sch*_*ern 7

简短的回答:Nnn ......也许吧.

答案很长:有一些启发式方法,你可以使用Git传输协议来收集一些信息.

我个人的观察是,对于大多数基于文本的项目,即使对于非常古老的项目,.git大小也很少超过结账大小.

获取info/refs将告诉您存储库中有多少标记和分支.

获取objects/info/packs将告诉您项目包含的文件包.然后,您可以执行HEAD请求(假设它是HTTP)objects/pack/pack-WHATEVERTHEIDIS.pack以查看包文件的大小.这将为您提供存储库大小的下限.

如果磁盘空间有问题(磁盘很便宜,买一个新的),你可以做一个git clone --bare为你节省结账空间.然后,您可以克隆该本地裸版以获得完整的结帐.

最后,如果你很聪明,你可以在对象树中执行HEAD请求以获取每个对象的大小,并在收到标题后忽略对象GET(忽略数据部分).这将为您提供存储库的大小,而无需下载整个存储库.