假设在互联网上存在一个公共的 Git 代码仓库,我想要克隆它,但是首先必须确认它的大小(包含多少个对象和千字节,就像使用 git count-objects 命令一样)。有没有什么方法可以做到这一点?
你可以使用一个小技巧,如下所示:
mkdir repo-name
cd repo-name
git init
git remote add origin <URL of remote>
git fetch origin
git fetch
显示以下类似内容的反馈信息:
remote: Counting objects: 95815, done.
remote: Compressing objects: 100% (25006/25006), done.
remote: Total 95815 (delta 69568), reused 95445 (delta 69317)
Receiving objects: 100% (95815/95815), 18.48 MiB | 16.84 MiB/s, done.
...
远程端的步骤通常会非常快,而接收端可能会花费很长时间。它实际上并没有显示总大小,但你可以观察一秒钟,如果你看到"1% ... 23.75 GiB",那么你知道出现了问题,可以取消操作。
[2021年9月21日更新]
看起来链接现在将被重定向到另一个URL,因此我们需要将-L
添加到curl中以跟随重定向。
curl -sL https://api.github.com/repos/Marijnh/CodeMirror | grep size
[旧答案]
对于Github仓库,它现在提供了API以检查文件大小。 它有效!
这个链接:see-the-size-of-a-github-repo-before-cloning-it 给出了答案。
命令:(@VMTrooper的答案)
curl https://api.github.com/repos/$2/$3 | grep size
例子:
curl https://api.github.com/repos/Marijnh/CodeMirror | grep size
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 5005 100 5005 0 0 2656 0 0:00:01 0:00:01 --:--:-- 2779
"size": 28589,
Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 140k 0 140k 0 0 155k 0 --:--:-- --:--:-- --:--:-- 155k
。 - Timojq
,您可以直接获取大小:curl -s https://api.github.com/repos/git/git | jq '.size'
。 - philbgit count-objects
并不能真正代表存储库的大小(即使使用git count-object -v
也不是真正的); 如果您使用的是除了愚蠢的http传输以外的任何东西,当您创建克隆时,将为其创建一个新的包;而且(正如VonC指出的那样),您对分析远程存储库所做的任何事情都不会考虑工作副本的大小。git-fetch
将通过线路发送的内容(到智能http传输),然后发送以分析结果,但这并不是一件好事。实质上,您正在要求目标服务器打包您将下载并丢弃的结果,以便您可以再次下载并保存它们。url=https://github.com/gitster/git.git
git ls-remote $url |
grep '[[:space:]]\(HEAD\|refs/heads/master\|refs/tags\)' |
grep -v '\^{}$' | awk '{print "0032want " $1}' > binarydata
echo 00000009done >> binarydata
curl -s -X POST --data-binary @binarydata \
-H "Content-Type: application/x-git-upload-pack-request" \
-H "Accept-Encoding: deflate, gzip" \
-H "Accept: application/x-git-upload-pack-result" \
-A "git/1.7.9" $url/git-upload-pack | wc -c
git remote ...
”处理远程库的本地副本(已获取)。clone --bare
一个远程存储库(它不会检出文件,因此您只有Git数据库),否则您将无法了解其大小。clone --bare
如何提供 OP 所请求的信息吗?这样,你的回答就会变得非常有趣和相关了。(很好的一点是 Git 不是一个服务器。) - XavierStuvw