【问题标题】:How can I see the size of a GitHub repository before cloning it?如何在克隆之前查看 GitHub 存储库的大小?
【发布时间】:2012-01-28 14:40:45
【问题描述】:

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

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

【问题讨论】:

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

标签: git github github-api


【解决方案1】:

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

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

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

更新

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

此信息已由 GitHub 支持人员提供。

【讨论】:

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

如果您拥有存储库,您可以通过打开您的帐户设置存储库 (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 存储库存储为压缩包文件,不存储重复等。
【解决方案3】:

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

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

【讨论】:

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

@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。

【讨论】:

  • 这似乎不适用于私人回购。有什么我想念的吗?谢谢!
  • 您能否提供一个仅打印输出而不是将其写入文件的命令示例?
  • 我得到“系统找不到指定的路径。”我尝试了几个项目的 URL,包括这个。
【解决方案5】:

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

【讨论】:

    【解决方案6】:

    在浏览器中,使用 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" }
    【解决方案7】:

    如果您想了解自己的存储库的大小。

    您只需访问 GitHub 设置存储库,即可在浏览器中看到所有尺寸,无需额外工作。

    https://github.com/settings/repositories

    【讨论】:

    • 这似乎不再显示了。
    【解决方案8】:

    您需要遵循 GitHub API。有关您的存储库的所有详细信息,请参阅文档 here。 它要求您发出GET 请求:

    GET /repos/:owner/:repository

    你需要替换两件事:

    1. :owner - 仓库所有者的用户名
    2. :repository - 存储库的名称

    例如,我的用户名 ma​​heshmnj,并且我拥有一个存储库 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 的键```我说你应该probably在第 78 行看到它,所以这表明您应该在 78 左右看到大小键,如果来自 github api 的大小不准确,第二件事,我认为您不会找到比 github api 更准确的东西。
    • 我有一个图片库。图像是二进制数据。这个 repo 中根本没有文本文件。 GitHub 到处报告它消耗了 0 个字节。甚至是网站/插件。
    【解决方案9】:

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

    【讨论】:

      【解决方案10】:

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

      【讨论】:

        【解决方案11】:

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

        【讨论】:

          猜你喜欢
          • 2021-12-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-09
          • 1970-01-01
          • 1970-01-01
          • 2019-12-31
          • 2020-03-25
          相关资源
          最近更新 更多