在你决定克隆它之前,有没有办法看看GitHub上的Git存储库有多大?
这似乎是一个非常明显/基本的统计数据,但我根本找不到如何在GitHub上看到它。
有一种方法可以通过GitHub API来访问此信息。
GET /repos/:user/:repo
当检索关于存储库的信息时,命名为size的属性的值是整个存储库的大小(包括它的所有历史),单位为千字节。
size
例如,Git存储库的重量约为124 MB。返回的JSON有效负载的size属性的值为124283。
124283
大小实际上是根据服务器端裸存储库的磁盘使用情况以千字节表示的。然而,为了避免在拥有大型网络的存储库上浪费太多空间,GitHub依赖于Git Alternates。在此配置中,根据裸存储库计算磁盘使用情况并不考虑共享对象存储,因此通过API调用返回“不完整”的值。
此信息由GitHub支持提供。
使用curl (sudo apt-get curl)和jsonpretty (sudo gem install jsonpretty json)来做到这一点:
curl -u "YOURGITHUBUSERNAME" http://github.com/api/v2/json/repos/show/OWNER/REPOSITORY | jsonpretty
用你的GitHub用户名替换YOURGITHUBUSERNAME。
将OWNER替换为仓库所有者的Git用户名。
或者作为一个漂亮的Bash脚本(粘贴到一个名为gitrepo-info的文件中):
#!/bin/bash if [ $# -ne 3 ] then echo "Usage: gitrepo-info <username> <owner> <repo>" exit 65 fi curl -u "$1" http://github.com/api/v2/json/repos/show/$2/$3|jsonpretty
像这样使用它:
gitrepo-info larowlan pisi reel
这将给我关于GitHub上pisi /卷存储库的信息。
如果你拥有存储库,你可以通过打开帐户设置→存储库 (https://github.com/settings/repositories)来找到准确的大小,存储库的大小显示在它的名称旁边。
如果您不拥有存储库,则可以对其进行分叉,然后在同一位置检查。
注意:你可能是拥有多个存储库的组织的所有者,但在组织内部的特定存储库中没有角色。默认情况下,即使你在你拥有的组织中创建了一个存储库,你也不会被添加到repo中,因此在settings/repositories中看不到那个repo。因此,将自己添加到存储库设置(https://github.com/org-name/repo-name/settings)中,以便在https://github.com/settings/repositories中看到它
settings/repositories
https://github.com/org-name/repo-name/settings
https://github.com/settings/repositories
有点笨拙:使用download as a zip file选项,读取指定的文件大小,然后取消它。
download as a zip file
我不记得以zip方式下载是否有效,但在任何情况下,这样做现在只下载当前选择的没有历史记录的分支。
@larowlan很棒的示例代码。在新的GitHub API V3中,curl语句需要更新。此外,不再需要登录:
curl https://api.github.com/repos/$2/$3 2> /dev/null | grep size | tr -dc '[:digit:]'
例如:
curl https://api.github.com/repos/dotnet/roslyn 2> /dev/null | grep size | tr -dc '[:digit:]'
返回931668 (KB),几乎是GB。
931668
私有回购需要身份验证。一种方法是使用GitHub个人访问令牌:
curl -u myusername:$PERSONAL_ACCESS_TOKEN https://api.github.com/repos/$2/$3 2> /dev/null | grep size | tr -dc '[:digit:]'
总结一下@larowlan、@VMTrooper和@vahid chakoshy解决方案:
#!/usr/bin/env bash if [ "$#" -eq 2 ]; then echo "$(echo "scale=2; $(curl https://api.github.com/repos/$1/$2 2>/dev/null \ | grep size | head -1 | tr -dc '[:digit:]') / 1024" | bc)MB" elif [ "$#" -eq 3 ] && [ "$1" == "-z" ]; then # For some reason Content-Length header is returned only on second try curl -I https://codeload.github.com/$2/$3/zip/master &>/dev/null echo "$(echo "scale=2; $(curl -I https://codeload.github.com/$2/$3/zip/master \ 2>/dev/null | grep Content-Length | cut -d' ' -f2 | tr -d '\r') / 1024 / 1024" \ | bc)MB" else printf "Usage: $(basename $0) [-z] OWNER REPO\n\n" printf "Get github repository size or, optionally [-z], the size of the zipped\n" printf "master branch (`Download ZIP` link on repo page).\n" exit 1 fi
如果你使用谷歌Chrome浏览器,你可以安装GitHub存储库大小扩展。
回购在这里:https://github.com/harshjv/github-repo-size
获得/回购:所有者/:库
你需要替换两个东西:
例如,我的用户名maheshmnj,我拥有一个存储库flutter-ui-nice,所以我的GET URL将是:
https://api.github.com/repos/maheshmnj/flutter-ui-nice
在发出GET请求时,你会收到一些JSON数据,可能在第78行你会看到一个名为大小的键,它将返回存储库的大小。
提示:当使用JSON时,我建议您添加一个插件来格式化JSON数据,使读取JSON变得容易。安装插件。
对于私有存储库,您将需要从https://github.com/settings/tokens获取个人访问令牌。
然后使用以下curl命令获取详细信息(用值替换[token], [owner]和[name]):
curl -u git:[token] https://api.github.com/repos/[owner]/[name] 2> /dev/null | grep size
如前所述,大小的单位可以是MB或KB。
在浏览器中,使用JavaScript,因为Github API启用了歌珥:
fetch('https://api.github.com/repos/webdev23/source_control_sentry') .then(v => v.json()).then((v) => { console.log(v['size'] + 'KB') } )
你可以使用Github API
下面是Python示例:
import requests if __name__ == '__main__': base_api_url = 'https://api.github.com/repos' git_repository_url = 'https://github.com/garysieling/wikipedia-categorization.git' github_username, repository_name = git_repository_url[:-4].split('/')[-2:] # garysieling and wikipedia-categorization res = requests.get(f'{base_api_url}/{github_username}/{repository_name}') repository_size = res.json().get('size') print(repository_size)
你所要做的就是去GitHub设置存储库,你可以在浏览器中看到所有的大小,不需要额外的工作。
如果你已经安装了官方的GitHub CLI,你可以执行以下操作:
gh api repos/<org>/<repo> --jq '.size'
我想它的单位是kb。
我创建了一个书签脚本来使用NVRM的回答中的方法来完成此操作。
要使用它,请创建一个新书签,为其命名,并将此脚本粘贴到URL字段中。在浏览一个回购时点击这个书签会弹出一个提醒,提醒的大小有兆字节和千字节。
javascript:(()=>{let url=new URL(document.location.href);if(url.origin!="https://github.com"){return}if(url.pathname=="/"){return}let p=url.pathname.slice(1,url.pathname.length);let parts=p.split('/');if(parts.length<2){return}let x=[parts[0],parts[1]].join('/');fetch(`https://api.github.com/repos/${x}`).then(r=>r.json()).then((b)=>alert(`${(b['size']/1000).toFixed(2)}mb (${b['size']}kb)`))})()
如其他答案所示,可以通过api.github.com获取大小。它在返回的JSON对象的size属性中。
api.github.com
要得到它,只需在你的回购URL中添加一个额外的子域api,并用/repos扩展回购路径:
api
/repos
# For public repos -> # Repo example: Axios # Repo URL: https://github.com/axios/axios ⤵ ⤵ curl https://api.github.com/repos/axios/axios # For private repos -> # Repo example: My-repo # Repo URL: https://github.com/my-org/my-repo curl https://{username}:{api-token}@api.github.com/repos/{orgname}/{reponame}
由于它只是URL,您可以使用任何编程语言获取数据。
回复会是这样的:
// Much more props inside { "id": 23088740, "name": "axios", "full_name": "axios/axios", "private": false, "size": 4396, "default_branch": "v1.x", "visibility": "public", "network_count": 9581, "subscribers_count": 1213 }
对我们来说最重要的是size。它现在在Kb中,但将来可能会被改变(因为它已经被改变了)。
Kb
让我们给出相同的axios repo:
axios
4396
4.29
如果克隆一个完整的回购:
clone repo.git
du -sh ./axios
8.0
.git
2.6
不好,因为size ~4.29 Mb也不是8或2.6 Mb
8
如果只克隆最新的提交:
--depth 1
clone repo --depth 1
3.2
that's close
不好,因为size ~4.29 Mb也不是3.2或2.6 Mb
如果只克隆一个分支:
default_branch
-b v1.x --single-branch
7.5
仍然不好,因为size ~4.29 Mb也不是7.5或2.6 Mb
因此,size参数显示了一些东西,它接近于最近的提交,但它不是回购的强正确大小。
我已经在上面展示了它如何与axios回购工作,但测试不同的回购显示相同的结果。
这是我的经验。