Як я можу побачити розмір сховища GitHub перед його клонуванням?


330

Чи є спосіб дізнатися, наскільки великий Git сховище в GitHub, перш ніж ви вирішите його клонувати?

Це здається дійсно очевидною / базовою статистикою, але я не можу знайти, як це бачити на GitHub.



4
@KennyTM дуже схоже питання, так, але це характерно для github, а не будь-якого методу, що використовує лише протокол git.
jhabbott

1
FYI, перегляньте це хромоване розширення, яке автоматично додає розмір сховища до підсумків сховища GitHub github.com/harshjv/github-repo-size . ОНОВЛЕННЯ: додав це як відповідь
Сувора Вахарія

Ось підказка: Мій абсолютний найбільший сховище містить лише зображення різних форматів, це репо-репортаж іконок, який я використовую в різних додатках. Тим не менш, GitHub повідомляє розмір як 0. Тож я припускаю, що він враховує лише розмір відомих вихідних файлів і не враховує невідомі типи файлів.
Джеррі Додж

Відповіді:


276

Існує спосіб отримати доступ до цієї інформації за допомогою API GitHub .

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

Наприклад, сховище Git важить близько 124 Мб. sizeВластивість повернутого JSON корисного навантаження переоцінений 124283.

Оновлення

Розмір справді виражається в кілобайтах на основі використання диска голого сховища на сервері. Однак, щоб не витрачати занадто багато місця на сховища з великою мережею, GitHub покладається на Git Alternates . У цій конфігурації обчислення використання диска на голому сховищі не враховує спільне зберігання об'єктів і, таким чином, повертає "неповне" значення через виклик API.

Цю інформацію було надано службою підтримки GitHub.


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 Будь-яка відповідь на запит про kB / MB тощо?
nealmcb

2
Просто роздвоєний репо (9 вересня 2018 року), і це КБ, а не МБ
Якоб Стамм

109

Якщо у вас є сховище, ви можете знайти точний розмір, відкривши налаштування свого облікового записусховища ( https://github.com/settings/repositories ), а розмір сховища відобразиться поруч із його призначенням.

Якщо ви не є власником сховища, ви можете роздрібнити його, а потім перевірити його там же.

Дещо покірливий: скористайтеся download as a zip fileопцією, прочитайте вказаний розмір файлу та скасуйте його.

Я не пам’ятаю, якби завантаження як поштовий індекс працювало колись, але в будь-якому випадку, роблячи це, тепер завантажується лише вибрана гілка, яка не має історії.


Чи не слід враховувати стиснення zip? Вихідний код і текстові файли можна стиснути до 60%, я думаю.
вівторок

Я не знаю, як перевірити коефіцієнт стиснення zip без завершення завантаження. Звичайно, ви можете завершити завантаження, а потім перевірити коефіцієнт стиснення. Однак у цей момент ви можете також розпакувати та перевірити розмір репо безпосередньо. Це дійсно залежить від того, наскільки точним потрібно бути. І якщо ви можете дозволити собі завантажити репо, щоб перевірити.
CoatedMoose

1
Я не зміг його знайти Settings > Repositories, але замість цього я знайшов розмір репо за Account Settings > Repositoriesмежами вашої домашньої сторінки git. Звичайно, це працює лише з репостами, якими ви володієте (або вилами).
modulitos

В налаштуваннях облікових записів організацій не відображається розмір репо, тому це лише якщо ви є власником репо як користувач, а не як організація?
Беннет Браун

2
Розмір zip-файлу зовсім не вказує на фактичний розмір сховища: 1) він включає лише знімок сховища в заданій редакції без історії та 2) сховища Git зберігаються у вигляді файлів упаковки, які стискаються, не зберігати дублікати тощо
kynan

74

Якщо ви використовуєте браузер Google Chrome, ви можете встановити розширення розміру репозиторію GitHub .

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

Repo тут: https://github.com/harshjv/github-repo-size


4
будь-який порт Firefox?
Banee Ishaque K

2
@BaneeIshaqueK це не те саме, але він показує вам розмір репо перевірити тут
Syed Shamikh Shabbir

1
ОНОВЛЕННЯ Тепер, чудово працює навіть у приватних сховищах, поки ви надаєте маркер Github.
Сіддхант Рімал

2
Досі не є надійним, він використовує API GitHub, який не повідомляє про правильний розмір. У мене є сховище, окрім зображень (без коду), і API повідомляє розмір як 0, хоча це найбільше репо в мене. Це розширення навіть не показує мені розмір цього конкретного репо (мабуть тому, що він бачить 0).
Джеррі Додж

19

@larowlan чудовий зразок коду. З новим GitHub API V3 заяву про згортання потрібно оновити. Також вхід більше не потрібно:

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(у КБ), що становить майже ГБ.


5
Схоже, це не працює для приватних репостів. Щось мені не вистачає? Дякую!
nroose

1
Я б хотів, щоб ви більше розширили свою відповідь за допомогою деяких пояснень, щоб люди могли змінити її, щоб відповідати своїм потребам.
Шиммі Вайцхандлер

10

Для цього потрібно зробити curl (sudo apt-get curl) та json досить (sudo gem install jsonpretty json):

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

Замініть YOURGITHUBUSERNAME своїм іменем GitHub (перейдіть на рисунок).

Замініть ВЛАСНИКА на ім'я користувача 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

Це дасть мені інформацію про сховище pisi / reel на GitHub.


1

Вам потрібно дотримуватися API GitHub. Дивіться документацію тут, щоб отримати детальну інформацію про ваше сховище. Він вимагає зробити запит GET як:

GET / repos /: власник /: сховище

Вам потрібно замінити дві речі:

  1. : власник - ім’я користувача особи, яка володіє сховищем
  2. : repository - Назва сховища

Наприклад, моє ім’я користувача maheshmnj , і я володію сховищем, flutter-ui-nice , тому моя GET URL буде такою:

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

Здійснюючи GET-запит, вам будуть залиті деякі дані JSON, і, ймовірно, на рядку номер 78 ви побачите ключ, названий розміром, який поверне розмір сховища.

Порада: Під час роботи з JSON я пропоную вам додати плагін, який форматує дані JSON, щоб полегшити читання JSON. Встановіть плагін .


А) Як багато хто з них повідомляє, цей розмір не є точним і не надійним. Б) Навіть якби це було, ваші записки про візуальне читання JSON, номер рядка та форматування ... все безглуздо. JSON не призначений для того, щоб люди читали, він призначений для читання комп'ютерів. Ви повинні згадати, щоб прочитати sizeключ у відповіді, а не рядок 78. Не кажучи вже про те, що різні форматники матимуть різні розриви рядків у різних місцях, залишаючи потрібні дані під іншим номером рядка.
Джеррі Додж

@JerryDodge, перш за все, слід уважно прочитати відповідь, яку я згадав, `` ви повинні побачити ключ з назвою розмір `` `, і я сказав, що ви повинні probablyбачити його в рядку № 78, так що це означає, що ви повинні бачити клавішу розміру десь біля 78 По-друге, якщо розмір від github apis не був точним, я не думаю, що ви знайдете щось більш точне, ніж github apis.
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, щоб отримати деталі (замінивши значення для [токен], [власник] та [ім'я]):

curl -u git:[token] https://api.github.com/repos/[owner]/[name] 2> /dev/null | grep size

Як було сказано раніше, розмір може бути в МБ або КБ.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.