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


330

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

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



4
@KennyTM非常相似的问题,是的,但这是特定于github的,而不是仅使用git协议的任何方法。
jhabbott 2011年

1
仅供参考,请查看此chrome扩展程序,该扩展程序会自动将存储库大小添加到GitHub的存储库摘要github.com/harshjv/github-repo-size中更新:添加为答案
严厉的瓦哈里亚

这是一个提示:我绝对最大的存储库仅包含各种格式的图像,这是我在各种应用程序中使用的图标的“艺术品”存储库。但是,GitHub报告的大小为0。因此,我假设它仅考虑已知源文件的大小,而不考虑未知文件类型。
杰里·道奇

Answers:


276

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

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

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

更新资料

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

该信息已由GitHub支持提供。


12
现在不是以MB为单位的大小->尚不清楚,它似乎取决于要查询的存储库...小存储库以字节为单位公开大小,以MB为单位大。我在GitHub支持处打开了一个问题。问题解决后,我会立即更新答案。
nulltoken

6
这似乎不适用于私人仓库。我想念什么吗?谢谢!
nroose

14
@nroose试试$ curl -u "{:username}" https://api.github.com/repos/{:organization}/{:repository}。参见developer.github.com/v3/#authentication
nulltoken 2014年

1
@nulltoken关于kB / MB等的查询有任何响应吗?
nealmcb

2
只是分叉了一个存储库(2018年9月9日),它是kB,而不是MB
Jacob Stamm,

109

如果您拥有存储库,则可以通过打开“ 帐户设置” →“ 存储库”https://github.com/settings/repositories)找到确切的大小,并且存储库大小显示在其名称旁边。

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

有点hacky:使用该download as a zip file选项,读取指示的文件大小,然后将其取消。

我不记得以zip​​格式进行下载是否可行,但是无论如何,现在这样做只能下载没有历史记录的当前选定分支。


难道不应该考虑zip压缩吗?我认为源代码和文本文件最多可以压缩60%。
2013年

我不知道在不完成下载的情况下检查zip压缩率的方法。当然,您可以完成下载,然后检查压缩率。但是,此时,您也可以直接解压缩并检查存储库大小。这实际上取决于您需要的准确性。并且,如果您有能力下载该仓库以进行检查。
CoatedMoose13年

1
我在中找不到它Settings > Repositories,但是在Account Settings > Repositoriesgit主页下找到了仓库的大小。当然,这仅适用于您拥有(或分叉)的存储库。
modulitos

组织的帐户设置似乎没有显示回购规模,因此仅当您以用户而非组织的身份拥有回购时?
Bennett Brown

2
zip文件的大小并不表示所有实际存储库大小:1)它仅包括给定版本的存储库快照,没有历史记录; 2)Git存储库存储为压缩的打包文件,不包含存储副本等
kynan 2015年

74

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

在此处输入图片说明

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


4
任何Firefox端口?
巴尼·伊沙克

2
@BaneeIshaqueK它不一样,但它确实向您显示了回购大小,请在此处进行
Syed Shamikh Shabbir

1
UPDATE现在,只要您提供Github令牌,即使在私有存储库中也能完美工作。
Siddhant Rimal

2
仍然不可靠,它使用GitHub API,该API无法报告正确的大小。我有一个只有图片(没有代码)的存储库,API报告的大小为0,尽管这是我拥有的最大存储库。这个扩展甚至没有显示此特定回购的大小(可能是因为它看到了0)。
杰里·道奇

19

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


5
这似乎不适用于私人仓库。我有什么想念的吗?谢谢!
nroose

1
我希望您能通过一些解释来进一步扩展您的答案,以便人们可以根据自己的需要进行更改。
Shimmy Weitzhandler,

10

要使用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

用您的GitHub用户名替换YOURGITHUBUSERNAME(如图)。

用存储库所有者的Git用户名替换OWNER。用存储库名称替换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存储库的信息。


1

您需要遵循GitHub API。有关存储库的所有详细信息,请参见此处的文档。它要求您以以下方式发出GET请求:

GET / repos /:所有者/:存储库

您需要替换两件事:

  1. :owner-拥有存储库的人的用户名
  2. :repository-存储库的名称

例如,我的用户名maheshmnj,我拥有一个存储库flutter-ui-nice,因此我的GET URL为:

https://api.github.com/repos/maheshmnj/flutter-ui-nice

在发出GET请求时,您将充满一些JSON数据,并且可能在第78行上,您应该看到一个名为size的键,该键将返回存储库的大小。

提示:使用JSON时,建议您添加一个格式化JSON数据的插件,以使读取JSON变得容易。安装插件


A)正如许多人所报告的那样,此大小不准确且不可靠。B)即使是这样,您关于视觉读取JSON,行号和格式的注释也没有意义。JSON并非供人类阅读,而是供计算机阅读。您应该提到读取size响应中的密钥,而不是第78行。更不用说,不同的格式化程序在不同的位置会有不同的换行符,从而将所需的数据保留在不同的行号上。
杰里·道奇

@JerryDodge首先,您应该仔细阅读我提到的答案“您应该看到一个名为size的键”,并且我说您应该probably在第78行看到它,因此这表明您应该在78左右的某个地方看到size键第二件事,如果github api的大小不准确,我认为您不会找到比github api更准确的东西。
maheshmnj

我有一个图像库。图像是二进制数据。此仓库中根本没有文本文件。GitHub到处都报告它消耗了0个字节。甚至是网站/插件。
杰里·道奇

0

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

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.