如何在克隆之前看到GitHub存储库的大小?

在你决定克隆它之前,有没有办法看看GitHub上的Git存储库有多大?

这似乎是一个非常明显/基本的统计数据,但我根本找不到如何在GitHub上看到它。

208028 次浏览

有一种方法可以通过GitHub API来访问此信息。

当检索关于存储库的信息时,命名为size的属性的值是整个存储库的大小(包括它的所有历史),单位为千字节。

例如,Git存储库的重量约为124 MB。返回的JSON有效负载的size属性的值为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用户名。

.使用存储库名称替换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 /卷存储库的信息。

如果你拥有存储库,你可以通过打开帐户设置存储库 (https://github.com/settings/repositories)来找到准确的大小,存储库的大小显示在它的名称旁边。

如果您不拥有存储库,则可以对其进行分叉,然后在同一位置检查。

注意:你可能是拥有多个存储库的组织的所有者,但在组织内部的特定存储库中没有角色。默认情况下,即使你在你拥有的组织中创建了一个存储库,你也不会被添加到repo中,因此在settings/repositories中看不到那个repo。因此,将自己添加到存储库设置(https://github.com/org-name/repo-name/settings)中,以便在https://github.com/settings/repositories中看到它

有点笨拙:使用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。

私有回购需要身份验证。一种方法是使用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存储库大小扩展。

enter image description here

回购在这里:https://github.com/harshjv/github-repo-size

你需要遵循GitHub API。有关存储库的所有细节,请参阅文档在这里。 它要求你做一个得到请求:

获得/回购:所有者/:库

你需要替换两个东西:

  1. :老板 -存储库所有者的用户名
  2. :存储库 -存储库的名称

例如,我的用户名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设置存储库,你可以在浏览器中看到所有的大小,不需要额外的工作。

https://github.com/settings/repositories

如果你已经安装了官方的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属性中。

要得到它,只需在你的回购URL中添加一个额外的子域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中,但将来可能会被改变(因为它已经被改变了)。

< p >但是… 我测试了很多次,看到回购的实际大小和上面机制显示的大小太不一样了

让我们给出相同的axios repo:

  • 大小显示在api.github.com ->4396 Kb ->~ 4.29 Mb

如果克隆一个完整的回购:

  • 使用clone repo.git命令调用repo
  • 使用du -sh ./axios命令获取权重
  • 有→8.0 Mb
  • 从里面删除.git文件夹
  • 有→2.6 Mb

不好,因为size ~4.29 Mb也不是82.6 Mb

如果只克隆最新的提交:

  • 调用带有--depth 1标志的repo,如clone repo --depth 1
  • 使用du -sh ./axios命令获取权重
  • 有→3.2 Mb (that's close)
  • 从里面删除.git文件夹
  • 有→相同的2.6 Mb

不好,因为size ~4.29 Mb也不是3.22.6 Mb

如果只克隆一个分支:

  • 在上面的JSON中,我们有一个名为default_branch的参数。让我们克隆
  • 调用带有-b v1.x --single-branch标志的repo
  • 使用du -sh ./axios命令获取权重
  • 有→7.5 Mb (that's close)
  • 从内部删除.git文件夹会得到相同的2.6 Mb

仍然不好,因为size ~4.29 Mb也不是7.52.6 Mb

因此,size参数显示了一些东西,它接近于最近的提交,但它不是回购的强正确大小。

我已经在上面展示了它如何与axios回购工作,但测试不同的回购显示相同的结果。

这是我的经验。