有没有办法在决定克隆之前查看 GitHub 上的 Git 存储库有多大?
这似乎是一个非常明显/基本的统计数据,但我根本找不到如何在 GitHub 上看到它。
有没有办法在决定克隆之前查看 GitHub 上的 Git 存储库有多大?
这似乎是一个非常明显/基本的统计数据,但我根本找不到如何在 GitHub 上看到它。
有一种方法可以通过GitHub API访问这些信息。
GET /repos/:user/:repo
检索有关存储库的信息时,命名属性size
的值是整个存储库(包括其所有历史记录)的大小,以千字节为单位。
例如,Git 存储库的重量约为 124 MB。返回的 JSON 有效负载的size
属性值为124283
。
根据服务器端裸存储库的磁盘使用情况,该大小确实以千字节为单位。但是,为了避免在具有大型网络的存储库中浪费太多空间,GitHub 依赖于Git Alternates。在此配置中,针对裸存储库计算磁盘使用情况不考虑共享对象存储,因此通过 API 调用返回“不完整”值。
此信息由 GitHub 支持提供。
如果您拥有存储库,您可以通过打开帐户设置→存储库( https://github.com/settings/repositories ) 找到确切的大小,存储库大小显示在其名称旁边。
如果您不拥有该存储库,则可以对其进行 fork,然后在同一位置进行检查。
注意:您可能是托管多个存储库的组织的所有者,但在组织内的特定存储库中没有角色。默认情况下,即使您在自己拥有的组织中创建存储库,您也不会添加到存储库中,因此不会在settings/repositories
. 因此,将自己添加到存储库 Setting( https://github.com/org-name/repo-name/settings
) 中即可查看https://github.com/settings/repositories
有点hacky:使用download as a zip file
选项,读取指示的文件大小,然后取消它。
我不记得以 zip 格式下载是否有效,但无论如何,现在这样做只会下载当前选择的没有历史记录的分支。
如果您使用 Google Chrome 浏览器,您可以安装GitHub Repository 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 设置存储库,您可以在浏览器中看到所有尺寸,无需额外工作。
使用 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。有关您的存储库的所有详细信息,请参阅此处的文档。它要求您发出GET请求:
获取 /repos/:owner/:repository
您需要更换两件事:
例如,我的用户名maheshmnj,我拥有一个存储库,flutter-ui-nice,所以我的 GET URL 将是:
https://api.github.com/repos/maheshmnj/flutter-ui-nice
在发出 GET 请求时,您将被一些 JSON 数据淹没,并且可能在第 78 行,您应该看到一个名为size的键,它将返回存储库的大小。
提示:使用 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 为单位。
你可以使用 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)
总结@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