在克隆Git仓库之前估计其大小

23

是否有办法在不克隆公共 Git 存储库的情况下估算其大小?

我想使用这些信息来确保存储库的大小小于某个特定大小。如果超过了这个大小,我就不想克隆它。

我知道 Github 上可以做到这一点,但是这个存储库托管在专用服务器上。


你能够通过 ssh 登录服务器并执行 du 命令吗? - user554546
不,我无法通过ssh登录它。 - PJ Bergeron
2个回答

10

简短回答:"不需要"。

如果空间是一个问题,将存储库克隆到您可用的最大空闲空间中,如果它足够小以便放在其他地方移动它将很便宜。

获取它的一种非常粗暴的方法:将此代码放入服务器上的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

您只需使用ls-remote命令即可查看它。


谢谢你的回答。实际上,我想确保仓库小于100MB。我编辑了我的问题。 - PJ Bergeron

8

简短回答:嗯……也许。

详细回答:有一些启发式方法,您可以使用Git传输协议来获取一些信息。

我的个人观察是,在大多数基于文本的项目中,即使是非常古老的项目,.git大小也很少超过检出大小。

提取info/refs将告诉您存储库中有多少个标签和分支。

提取objects/info/packs将告诉您该项目具有哪些打包文件。然后,您可以在objects/pack/pack-WHATEVERTHEIDIS.pack上进行HEAD请求(假设它是HTTP),以查看包文件的大小。这将为存储库大小提供一个下限。

如果磁盘空间是问题(磁盘很便宜,请购买新磁盘),您可以执行git clone --bare以节省检出空间。然后,您可以克隆该本地的裸版本以获得完整的检出。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接