ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

@KennyTM 非常相似的问题,是的,但这是特定于 github 而不是仅使用 git 协议的任何方法。
仅供参考,查看这个 chrome 扩展,它会自动将存储库大小添加到 GitHub 的存储库摘要 github.com/harshjv/github-repo-size更新:将此添加为答案
这里有一个提示:我绝对最大的存储库只包含各种格式的图像,它是我在各种应用程序中使用的图标的“艺术品”存储库。然而,GitHub 报告的大小为 0。所以我假设它只考虑已知源文件的大小,而不考虑未知文件类型。
在看到这个问题非常受欢迎后,我为此创建了一个网站。结帐 here

i
iBug

有一种方法可以通过 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 支持提供。


现在不是以 MB 为单位的大小 - > 不是很清楚,看起来它取决于被查询的存储库......小存储库以字节为单位公开大小,以兆字节为单位的大存储库公开大小。我在 GitHub 支持上打开了一个问题。问题关闭后,我会立即更新答案。
这似乎不适用于私人回购。我错过了什么吗?谢谢!
@nroose 试试 $ curl -u "{:username}" https://api.github.com/repos/{:organization}/{:repository}。请参阅developer.github.com/v3/#authentication
刚刚分叉了一个回购(2018 年 9 月 9 日),它是 kB,而不是 MB
来到这里寻找关于为什么 GitHub API 返回的方式比实际下载的 repo 少的答案。原来这个文件大小(API 没有明确记录但似乎以 KB 为单位)不是很可靠。
y
yuranos

如果您拥有存储库,则可以通过打开您的帐户设置存储库 (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 格式下载是否有效,但无论如何,现在这样做只会下载当前选择的没有历史记录的分支。


不应该考虑 zip 压缩吗?我认为源代码和文本文件可以压缩到大约 60%。
我在 Settings > Repositories 中找不到它,而是在您的 git 主页的 Account Settings > Repositories 下找到了 repo 大小。当然,这只适用于您拥有(或分叉)的存储库。
组织的帐户设置似乎没有显示 repo 大小,所以只有当您作为用户而不是组织拥有 repo 时?
无法查看私人仓库的大小,grr
zip 文件的大小并不能说明实际存储库的大小:1)它只包括给定版本的存储库快照,没有历史记录;2)Git 存储库存储为压缩的包文件,不要存储重复项等
G
Gabriel

如果您使用 Google Chrome 浏览器,则可以安装 GitHub Repository Size 扩展程序。

https://i.stack.imgur.com/82V7l.png

此处回购:https://github.com/harshjv/github-repo-size


任何火狐端口?
@BaneeIshaqueK 它不一样,但它确实向您显示了 repo 大小检查它here
更新现在,只要您提供 Github 令牌,即使在私有存储库中也能完美运行。
仍然不可靠,它使用 GitHub API,它不报告正确的大小。我有一个只有图像(无代码)的存储库,API 报告大小为 0,尽管它是我拥有的最大的存储库。这个扩展甚至没有告诉我这个特定 repo 的大小(可能是因为它看到 0)。
m
mmell

@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:]'

这似乎不适用于私人回购。有什么我想念的吗?谢谢!
您能否包含一个仅打印输出而不是将其写入文件的命令示例?
我得到“系统找不到指定的路径”。我尝试了几个项目的 URL,包括这个。
@micahhoover您的网址有问题,请再次检查您在其中犯的错误。这完美地工作。
N
Nathan Weiler

如果您试图找出自己的存储库的大小。

您所要做的就是转到 GitHub 设置存储库,您可以在浏览器中看到所有尺寸,无需额外工作。

https://github.com/settings/repositories


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

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


喜欢这个答案。只需几秒钟即可获得尺寸。
卷曲?浏览器扩展? NVRM 的答案实际上是该线程中最好的答案。被严重低估。感谢 NVRM!
它说{ "message": "Not Found", "documentation_url": "https://docs.github.com/rest/reference/repos#get-a-repository" }
最佳答案!❤️
非常非常棒。 MB 转换 fetch('api.github.com/repos/aws/aws-toolkit-vscode') .then(v => v.json()).then((v) => { console.log(v['size'] /1000 + ' MB') } )
P
Peter Mortensen

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


P
Peter Mortensen

您需要遵循 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


A) 正如许多人所报告的那样,这个尺寸不准确且不可靠。 B)即使是这样,您关于视觉读取 JSON、行号和格式的注释……都是毫无意义的。 JSON 不是供人类阅读的,它是供计算机阅读的。您应该提到读取响应中的 size 键,而不是第 78 行。更不用说,不同的格式化程序将在不同的位置有不同的换行符,从而将所需的数据留在不同的行号。
@JerryDodge 首先你应该仔细阅读我提到的答案```你应该看到一个名为 size 的键大约 78 左右,第二件事如果来自 github apis 的大小不准确,我认为你不会找到比 github apis 更准确的东西。
我有一个图像存储库。图像是二进制数据。这个 repo 中根本没有文本文件。 GitHub 到处报告它消耗了 0 个字节。甚至是网站/插件。
A
Alon Barad

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

M
Mike Godin

对于私有存储库,您需要从 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 为单位。


B
Besworks

我使用 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)`))})()

w
woolfi makkinan

如其他答案所示,可以通过 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 的测试显示了相同的结果。

这是我的经验。


g
golem

总结@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

A
Artyom

如果您安装了官方的 GitHub CLI,您可以执行以下操作:

gh api repos/<org>/<repo> --jq '.size'

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