Как узнать размер репозитория GitHub перед его клонированием?

331

Есть ли способ узнать, насколько большой Git-репозиторий на GitHub, прежде чем вы решите его клонировать?

Это похоже на действительно очевидную / основную статистику, но я не могу найти, как ее увидеть на GitHub.

jhabbott
источник
4
@KennyTM очень похожий вопрос, да, но это характерно для github, а не для любого метода, использующего только протокол git.
Джабботт
1
К вашему сведению, ознакомьтесь с этим расширением Chrome, которое автоматически добавляет размер хранилища к сводной информации о хранилище GitHub github.com/harshjv/github-repo-size . ОБНОВЛЕНИЕ: добавил это как ответ
Суровая Вахария
Вот подсказка: мой самый большой репозиторий содержит только изображения различных форматов, это «репродукция» иконок, которые я использую в различных приложениях. Тем не менее, GitHub сообщает о размере как 0. Поэтому я предполагаю, что он учитывает только размер известных исходных файлов и не учитывает неизвестные типы файлов.
Джерри Додж

Ответы:

276

Есть способ получить доступ к этой информации через GitHub API .

При получении информации о репозитории указанное свойство sizeоценивается размером всего хранилища (включая всю его историю) в килобайтах.

Например, репозиторий Git весит около 124 МБ. sizeСвойство возвращенного JSON полезной нагрузки переоцененный 124283.

Обновить

Размер действительно выражается в килобайтах в зависимости от использования диска в голом хранилище на стороне сервера. Однако, чтобы не тратить слишком много места на репозитории с большой сетью, GitHub использует Git Alternates . В этой конфигурации при расчете использования диска с использованием чистого хранилища не учитывается хранилище общих объектов, и, таким образом, возвращается «неполное» значение через вызов API.

Эта информация была предоставлена ​​поддержкой GitHub.

nulltoken
источник
12
Разве это не размер в МБ сейчас -> Это не так ясно, похоже, это зависит от запрашиваемого репо ... Маленькие репо предоставляют размер в байтах, большие в мегабайтах. Я открыл вопрос при поддержке GitHub. Я обновлю ответ, как только проблема будет закрыта.
nulltoken
6
Это не работает для частных репозиториев. Я что-то упускаю? Спасибо!
nroose
14
@nroose Попробуй $ curl -u "{:username}" https://api.github.com/repos/{:organization}/{:repository}. См developer.github.com/v3/#authentication
nulltoken
1
@nulltoken Любой ответ на запрос о КБ / МБ и т. д.?
nealmcb
2
Только что раздвоил репо (9 сентября 2018 года), и это КБ, а не МБ
Джейкоб Стамм
109

Если вы являетесь владельцем репозитория, точный размер можно узнать, открыв « Настройки учетной записи» → « Репозитории» ( https://github.com/settings/repositories ), и размер репозитория отображается рядом с его назначением.

Если вы не являетесь владельцем репозитория, вы можете его разветвить, а затем проверить в том же месте.

Несколько странно: используйте download as a zip fileопцию, прочитайте указанный размер файла и затем отмените его.

Я не помню, работала ли когда-либо загрузка в формате zip, но в любом случае, теперь она загружает только выбранную ветку без истории.

CoatedMoose
источник
Не следует ли учитывать сжатие почтовых индексов? Я думаю, что исходный код и текстовые файлы могут быть сжаты до 60%.
птенец
Я не знаю, как проверить степень сжатия почтового индекса без завершения загрузки. Конечно, вы можете завершить загрузку, а затем проверить степень сжатия. Однако в этот момент вы можете также распаковать и проверить размер репо. Это действительно зависит от того, насколько точно вы должны быть. И если вы можете позволить себе скачать репо, чтобы проверить.
CoatedMoose
1
Я не смог найти его Settings > Repositories, но вместо этого нашел размер репо под Account Settings > Repositoriesвашей домашней страницей git. Конечно, это работает только с репо, которые у вас есть (или форк).
модуль
Настройки учетной записи организации не отображают размер репо, поэтому только если вы являетесь владельцем репо как пользователь, а не как организация?
Беннет Браун,
2
Размер zip-файла вообще не указывает на фактический размер репозитория: 1) он включает в себя только снимок репозитория с заданной ревизией без истории и 2) Git-репозитории хранятся как сжатые файлы пакета, но не хранить дубликаты и т. д.
Kynan
74

Если вы используете браузер Google Chrome, вы можете установить расширение GitHub Repository Size .

введите описание изображения здесь

Репо здесь: https://github.com/harshjv/github-repo-size

Большая волна
источник
4
любой порт Firefox?
Banee Ishaque K
2
@BaneeIshaqueK это не то же самое, но он показывает размер репо, проверьте это здесь
Syed Shamikh Shabbir
1
ОБНОВЛЕНИЕ Теперь отлично работает даже в частных репозиториях, если вы предоставляете токен Github.
Сиддхант Римал
2
Все еще не надежный, он использует GitHub 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(в КБ), что почти в ГБ.

VMTrooper
источник
5
Это не работает для частных репозиториев. Есть ли что-то, что мне не хватает? Спасибо!
nroose
1
Я хотел бы, чтобы вы расширили свой ответ некоторыми объяснениями, чтобы люди могли изменить его в соответствии со своими потребностями.
Шимми Вайцхандлер
10

Чтобы сделать это с помощью curl (sudo apt-get curl) и json pretty (sudo gem установите jsonpretty json):

curl -u "YOURGITHUBUSERNAME" http://github.com/api/v2/json/repos/show/OWNER/REPOSITORY |
  jsonpretty

Замените YOURGITHUBUSERNAME своим именем пользователя GitHub (см. Рисунок).

Замените ВЛАДЕЛЬЦА на имя пользователя Git владельца хранилища. Замените хранилище именем хранилища.

Или как хороший скрипт 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

Это даст мне информацию о хранилище pisi / reel на GitHub.

larowlan
источник
1

Вы должны следовать GitHub API. Смотрите документацию здесь для всех деталей, касающихся вашего хранилища. Это требует от вас сделать запрос GET как:

GET / repos /: owner /: хранилище

Вам необходимо заменить две вещи:

  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. Установите плагин .

maheshmnj
источник
А) Как сообщают многие, этот размер не является точным и ненадежным. Б) Даже если бы это было так, ваши заметки о визуальном чтении JSON, номере строки и форматировании ... все это бессмысленно. JSON не предназначен для чтения людьми, он предназначен для чтения компьютерами. Вы должны упомянуть, чтобы прочитать sizeключ в ответе, а не строку 78. Не говоря уже о том, что разные форматеры будут иметь разные разрывы строк в разных местах, оставляя желаемые данные под другим номером строки.
Джерри Додж
@JerryDodge Прежде всего, вы должны внимательно прочитать ответ, который я упомянул, `` `вы должны увидеть ключ с именем size` ``, и я сказал, что вы должны probablyувидеть его в строке № 78, так что это означает, что вы должны увидеть ключ размера где-то около 78 Во-вторых, если размер из github apis был неточным, я не думаю, что вы найдете что-то более точное, чем github apis.
Махешмн
У меня есть хранилище изображений. Изображения являются двоичными данными. В этом репо нет текстовых файлов. 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

Как упоминалось ранее, размер может быть в МБ или КБ.

Майк Годин
источник