有没有办法在决定克隆之前查看 GitHub 上的 Git 存储库有多大?
这似乎是一个非常明显/基本的统计数据,但我根本找不到如何在 GitHub 上看到它。
有一种方法可以通过 GitHub API 访问此信息。
语法:GET /repos/:user/:repo
示例:https://api.github.com/repos/git/git
在检索有关存储库的信息时,名为 size
的属性的值是整个存储库(包括其所有历史记录)的大小,以千字节为单位。
例如,Git 存储库的重量约为 124 MB。返回的 JSON 负载的 size
属性值为 124283
。
更新
根据服务器端裸存储库的磁盘使用情况,该大小确实以千字节为单位。但是,为了避免在具有大型网络的存储库中浪费太多空间,GitHub 依赖于 Git Alternates。在此配置中,针对裸存储库计算磁盘使用情况不考虑共享对象存储,因此通过 API 调用返回“不完整”值。
此信息由 GitHub 支持提供。
如果您拥有存储库,则可以通过打开您的帐户设置 → 存储库 (https://github.com/settings/repositories) 找到确切的大小,并且存储库大小显示在其名称旁边。
如果您不拥有该存储库,则可以对其进行 fork,然后在同一位置进行检查。
注意:您可能是托管多个存储库的组织的所有者,但在组织内的特定存储库中没有角色。默认情况下,即使您在自己拥有的组织中创建存储库,您也不会添加到存储库中,因此在 settings/repositories
中看不到该存储库。因此,将您自己添加到存储库设置(https://github.com/org-name/repo-name/settings
)中以在 https://github.com/settings/repositories
中查看它
有点老套:使用 download as a zip file
选项,读取指示的文件大小,然后取消它。 罢工>
我不记得以 zip 格式下载是否有效,但无论如何,现在这样做只会下载当前选择的没有历史记录的分支。
Settings > Repositories
中找不到它,而是在您的 git 主页的 Account Settings > Repositories
下找到了 repo 大小。当然,这只适用于您拥有(或分叉)的存储库。
如果您使用 Google Chrome 浏览器,则可以安装 GitHub Repository Size 扩展程序。
https://i.stack.imgur.com/82V7l.png
此处回购:https://github.com/harshjv/github-repo-size
@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。
私有仓库需要身份验证。一种方法是使用 GitHub 个人访问令牌:
curl -u myusername:$PERSONAL_ACCESS_TOKEN https://api.github.com/repos/$2/$3 2> /dev/null | grep size | tr -dc '[:digit:]'
如果您试图找出自己的存储库的大小。
您所要做的就是转到 GitHub 设置存储库,您可以在浏览器中看到所有尺寸,无需额外工作。
https://github.com/settings/repositories
从浏览器,使用 JavaScript,因为 Github API 已启用 CORS:
fetch('https://api.github.com/repos/webdev23/source_control_sentry') .then(v => v.json()).then((v) => { console.log(v['size' ] + 'KB') } )
{ "message": "Not Found", "documentation_url": "https://docs.github.com/rest/reference/repos#get-a-repository" }
使用 curl (sudo apt-get curl) 和 json pretty (sudo gem install jsonpretty json) 做到这一点:
curl -u "YOURGITHUBUSERNAME" http://github.com/api/v2/json/repos/show/OWNER/REPOSITORY |
jsonpretty
将 YOURGITHUBUSERNAME 替换为您的 GitHub 用户名(如图)。
将 OWNER 替换为存储库所有者的 Git 用户名。将 REPOSITORY 替换为存储库名称。
或者作为一个不错的 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/reel 存储库的信息。
您需要遵循 GitHub API。有关您的存储库的所有详细信息,请参阅文档 here。它要求您发出 GET 请求:
获取 /repos/:owner/:repository
您需要更换两件事:
:owner - 存储库所有者的用户名 :repository - 存储库的名称
例如,我的用户名 maheshmnj,我拥有一个存储库,flutter-ui-nice,所以我的 GET URL 将是:
https://api.github.com/repos/maheshmnj/flutter-ui-nice
在发出 GET 请求时,您将被一些 JSON 数据淹没,并且可能在第 78 行,您应该看到一个名为 size 的键,它将返回存储库的大小。
提示:使用 JSON 时,我建议您添加一个格式化 JSON 数据的插件,以便轻松读取 JSON。 Install the plugin。
size
键,而不是第 78 行。更不用说,不同的格式化程序将在不同的位置有不同的换行符,从而将所需的数据留在不同的行号。
你可以使用 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)
对于私有存储库,您需要从 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 为单位。
我使用 NVRM's Answer 中的方法创建了一个 bookmarklet 脚本来执行此操作。
要使用它,请创建一个新书签,为其命名,然后将此脚本粘贴到 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
属性中。
要获得它,只需向您的 repo URL 添加一个额外的子域 api
并使用 /repos
扩展 repo 路径:
# 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
中,但将来可能会更改(因为它已经是)。
但是...我测试了很多次,发现repo的实际大小和上面机制显示的大小相差太大。
让我们给出相同的 axios
存储库:
api.github.com 中显示的大小 -> 4396 Kb -> ~4.29 Mb
如果克隆一个完整的仓库怎么办:
使用 clone repo.git 命令拉取 repo
使用命令 du -sh ./axios 获取重量
有 -> 8.0 Mb
从内部删除 .git 文件夹
有 -> 2.6 Mb
不好,因为大小 ~4.29 Mb 也不是 8 或 2.6 Mb
如果只克隆最新的提交怎么办:
使用 --depth 1 标志提取 repo,例如 clone repo --depth 1
使用命令 du -sh ./axios 获取重量
有 -> 3.2 Mb(接近)
从内部删除 .git 文件夹
有 -> 相同的 2.6 Mb
不好,因为大小 ~4.29 Mb 也不是 3.2 或 2.6 Mb
如果只克隆一个分支怎么办:
在上面的 JSON 中,我们有一个参数,称为 default_branch。让我们克隆
使用 -b v1.x --single-branch 标志拉取 repo
使用命令 du -sh ./axios 获取重量
有 -> 7.5 Mb(接近)
从内部删除 .git 文件夹给出相同的 2.6 Mb
仍然不好,因为大小 ~4.29 Mb 也不是 7.5 或 2.6 Mb
因此,size
参数显示了一些接近最新提交的内容,但它不是 repo 的正确大小。
我已经在上面展示了它是如何与 axios repo 一起工作的,但是使用不同 repos 的测试显示了相同的结果。
这是我的经验。
总结@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
如果您安装了官方的 GitHub CLI,您可以执行以下操作:
gh api repos/<org>/<repo> --jq '.size'
我认为它以 KB 为单位报告大小。
$ curl -u "{:username}" https://api.github.com/repos/{:organization}/{:repository}
。请参阅developer.github.com/v3/#authentication