有没有办法估算公共Git存储库的大小而不必克隆它?
我想使用此信息来确保存储库小于特定大小。如果不是,我不想克隆它。
我知道它可以在Github上完成,但是此存储库托管在专用服务器上。
答案 0 :(得分:6)
简短回答:"没有。"
如果空间完全是一个问题,请将repo克隆到最大的可用空间,如果它足够小,可以放在其他地方移动,那将很便宜。
获得它的一种非常强力的方法:把它放在例如您在服务器上的接收后挂钩
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
你可以远程使用它。
答案 1 :(得分:6)
简短的回答:Nnn ......也许。
答案很长:有一些启发式方法,您可以使用Git transfer protocols来搜索一些信息。
我个人观察到,对于大多数基于文本的项目,即使对于非常古老的项目,.git大小也很少超过结帐大小。
获取info/refs
将告诉您存储库中有多少个标记和分支。
获取objects/info/packs
将告诉您项目包含的文件包。然后,您可以在objects/pack/pack-WHATEVERTHEIDIS.pack
上执行HEAD请求(假设它是HTTP),以查看包文件的大小。这将为您提供存储库大小的下限。
如果磁盘空间有问题(磁盘便宜,请购买新磁盘空间),您可以执行git clone --bare
以节省结帐空间。然后,您可以克隆该本地裸版以获得完整的结帐。
最后,如果你很聪明,你可以在对象树中执行HEAD请求以获取每个对象的大小,并在收到标题后忽略对象GET(忽略数据部分)。这将为您提供存储库的大小,而无需下载整个存储库。