我如何在克隆GitHub仓库之前查看其大小?

556

在决定克隆一个 Git 存储库之前,有没有办法在 GitHub 上查看它的大小?

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


5
@KennyTM问的问题非常类似,但这个问题是特指GitHub而不是仅使用git协议的任何方法。 - jhabbott
3
请查看此 Chrome 扩展程序,它会自动将存储库大小添加到 GitHub 存储库摘要中 https://github.com/harshjv/github-repo-size。**更新:已将此作为答案添加**。 - Harsh Vakharia
这是一个提示:我最大的代码仓库只包含各种格式的图像,它是一个“艺术品”图标仓库,我在各种应用程序中使用它。然而,GitHub 报告其大小为 0。因此,我认为它只考虑已知源文件的大小,不考虑未知文件类型的大小。 - Jerry Dodge
3
看到这个问题非常受欢迎,我创建了一个完全为此目的设计的网站。请点击此处查看。 - Appaji Chintimi
15个回答

418

可以通过GitHub API来访问这些信息。

在检索有关存储库的信息时,名为 size 的属性将包含整个存储库(包括其全部历史记录)的大小,以千字节表示。

例如,Git 存储库大约为 124 MB。返回的 JSON 负载的 size 属性的值为 124283

更新内容

实际上,该大小是以基于服务器端裸仓库的磁盘使用情况表示的千字节。但是,为了避免对具有大型网络的存储库浪费太多空间,GitHub 依赖于Git Alternates。在此配置中,针对裸仓库计算磁盘使用情况不考虑共享对象存储,因此通过 API 调用返回“不完整”的值。

这些信息由 GitHub 支持提供。


14
现在的大小不是以MB为单位的吗?-> 不是很清楚,看起来取决于被查询的存储库...小型存储库使用字节表示大小,大型存储库则用兆字节表示。我已经向GitHub支持提交了一个问题。一旦问题解决,我会尽快更新答案。 - nulltoken
9
这似乎对私有仓库不起作用。我有遗漏什么吗?谢谢! - nroose
25
尝试使用 $ curl -u "{:username}" https://api.github.com/repos/{:organization}/{:repository} 命令。详情请见 https://developer.github.com/v3/#authentication。 - nulltoken
3
刚刚fork了一个代码库(2018年9月9日),它的大小是kB而不是MB。 - Jacob Stamm
4
我来到这里是为了找出GitHub API返回的数据比实际下载的存储库要少得多的原因。事实证明,这个文件大小(API没有清楚地记录,但似乎是以KB为单位)并不十分可靠。 - Jerry Dodge
显示剩余7条评论

238
如果您拥有该代码库,您可以通过打开您的账户设置代码库https://github.com/settings/repositories),并查看每个代码库的指定位置旁边的大小,来找到确切的大小。
如果您不是该代码库的所有者,则可以先复制它,然后在同一位置检查大小。 注意: 您可能是托管多个代码库的组织的所有者,但在组织中没有特定代码库的角色。即使您在自己拥有的组织中创建了代码库,也不会自动添加到代码库中,因此不能在 settings/repositories 中查看它。因此,请在代码库设置中添加自己(https://github.com/org-name/repo-name/settings),才能在https://github.com/settings/repositories中查看它。 Somewhat hacky: 使用“下载ZIP文件”选项,查看显示的文件大小,然后取消下载。 我不记得以前是否可以通过下载 ZIP 文件来获取代码库大小,但无论如何,现在只会下载当前选择的分支,不包含历史记录。

我不知道有什么方法可以在下载完成之前检查zip的压缩比。当然,你可以完成下载,然后检查压缩比。但是,在那时,你可能会解压并直接检查repo的大小。这取决于你需要多准确。如果你能够承担下载repo来检查的成本,那就无妨。 - CoatedMoose
4
我没有在“设置>仓库”中找到它,但是我发现你的git主页下的“账户设置>仓库”可以查看仓库大小。当然,这只适用于你拥有(或派生的)仓库。 - modulitos
3
组织的账户设置似乎不会显示仓库大小,所以只有作为用户而不是组织拥有仓库时才能看到? - Bennett Brown
2
无法查看私有仓库的大小,烦人。 - rw-nandemo
4
压缩文件的大小并不是实际代码库大小的指示:1)它只包含给定版本库的快照,没有历史记录;2)Git 存储库以压缩的打包文件形式存储,这些文件会去除重复内容。 - kynan
显示剩余6条评论

122

7
有 Firefox 的相关端口吗? - Banee Ishaque K
3
@BaneeIshaqueK 这并不完全相同,但它确实显示了存储库的大小,请在此处检查:(https://addons.mozilla.org/en-US/firefox/addon/github-repo-size/) - Syed Shamikh Shabbir
1
更新 现在,只要提供 Github token,即使是私有仓库也可以完美地运行。 - Siddhant Rimal
6
仍然不可靠,它使用的是GitHub API,该API无法报告正确的大小。我有一个仓库只有图片(没有代码),但API报告的大小为0,尽管它是我拥有的最大的仓库。这个扩展甚至不能显示我这个特定仓库的大小(可能因为它看到了0)。 - Jerry Dodge

40

@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为单位),几乎等于1GB。

私有存储库需要身份验证。一种方法是使用GitHub个人访问令牌:

curl -u myusername:$PERSONAL_ACCESS_TOKEN https://api.github.com/repos/$2/$3 2> /dev/null | grep size | tr -dc '[:digit:]'

5
这似乎对私有仓库无效。我是否遗漏了什么?谢谢! - nroose
请问能否提供一个仅将输出打印而非写入文件的命令示例? - Shimmy Weitzhandler
我收到了“系统找不到指定的路径”的错误提示。我尝试使用几个项目的URL,包括这个项目。 - micahhoover
1
@micahhoover,你在URL方面做错了什么,请再检查一下是否有错误。这个是完美的。 - Atralb

30

通过浏览器,使用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')
  }
)


3
喜欢这个答案。只需几秒钟就可以得到尺寸。 - Dan Swain
5
Curl?浏览器扩展?NVRM的回答是本帖中最好的,非常被低估,谢谢NVRM! - Robear
它说{ "message": "未找到", "documentation_url": "https://docs.github.com/rest/reference/repos#get-a-repository" } - RegarBoy
1
最佳答案!❤️ - mdmundo
获取('https://api.github.com/repos/aws/aws-toolkit-vscode') .then(v => v.json()).then((v) => { console.log(v['size'] /1000 + '兆字节') } )。非常好。MB转化后更易读 - Carlo
显示剩余2条评论

25

如果你想知道自己的代码库大小

你只需要进入GitHub设置页面,然后打开“repositories”,你便能在浏览器中轻松查看所有大小信息,无需任何额外操作。

https://github.com/settings/repositories


2
这似乎不再显示。 - mheavers
6
截至2022年2月5日,这似乎适用于个人资料,但不适用于组织中的存储库。 - Manfred

11

使用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/reel 存储库的信息。


9

如其他答案所示,可以通过 api.github.com 获取大小。它在返回的 JSON 对象的 size 属性中。

要获取它,只需将附加的子域名 api 添加到您的存储库 URL 中,并扩展存储库路径以包括 /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
}

对于我们来说最重要的是“大小”。它现在是以“Kb”为单位,但将来可能会改变(因为它已经改变过)。
但是... 我测试了很多次,发现仓库的实际大小和上述机制显示的大小相差太大。
让我们以相同的axios仓库为例:
- 在api.github.com中显示的大小-> 4396 Kb -> ~4.29 Mb
如果克隆整个仓库呢:
- 使用“clone repo.git”命令拉取仓库 - 使用命令“du -sh ./axios”获取大小 - 有 -> 8.0 Mb - 从内部删除“.git”文件夹 - 有 -> 2.6 Mb
不好,因为“大小”约为4.29 Mb,而不是8或2.6 Mb。
如果只克隆最新提交呢?
- 使用“--depth 1”标志拉取仓库,如“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”标志拉取仓库 - 使用命令“du -sh ./axios”获取大小 - 有 -> 7.5 Mb (接近) - 从内部删除“.git”文件夹会得到相同的2.6 Mb
仍然不好,因为“大小”约为4.29 Mb,而不是7.5或2.6 Mb。
因此,size参数显示了一些接近于最新提交的内容,但它并不是该存储库大小的确切值。

我已经展示了如何在axios存储库中使用它,但是对不同存储库进行测试会得到相同的结果。

这是我的经验。

最好添加您的参考资料。 - Kangqiao Zhao
真的。我甚至注意到了API响应和实际的“du”之间的差异。 - Underoos

4
如果您已经安装了官方的GitHub CLI,您可以执行以下操作:
gh api repos/<org>/<repo> --jq '.size'

我认为它以KB为单位报告文件大小。

3
你可以使用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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接