Можно ли удаленно считать объект и размер репозитория git? - PullRequest
41 голосов
/ 21 мая 2010

Предположим, что где-то в сети существует публичный репозиторий git. Я хочу клонировать его, но сначала я должен быть уверен, что его размер (сколько объектов и килобайт в git count-objects)

Есть ли способ сделать это?

Ответы [ 5 ]

20 голосов
/ 21 мая 2010

Один маленький кусочек, который вы можете использовать, будет следующим:

mkdir repo-name
cd repo-name
git init
git remote add origin <URL of remote>
git fetch origin

git fetch отображает обратную связь по следующим направлениям:

remote: Counting objects: 95815, done.
remote: Compressing objects: 100% (25006/25006), done.
remote: Total 95815 (delta 69568), reused 95445 (delta 69317)
Receiving objects: 100% (95815/95815), 18.48 MiB | 16.84 MiB/s, done.
...

Шаги на удаленном конце обычно происходят довольно быстро; это шаг приема, который может занять много времени. На самом деле он не показывает общий размер, но вы наверняка можете посмотреть его на секунду, и если вы видите «1% ... 23,75 ГиБ», вы знаете, что у вас проблемы, и вы можете отменить его.

15 голосов
/ 10 мая 2014

Для репозитория github теперь предлагается API для проверки размера файла. Это работает!

Эта ссылка: см. Размер github-репо-до-клонирования-это дал ответ

Команда: (ответ от @VMTrooper)

curl https://api.github.com/repos/$2/$3 | grep size

Пример:

curl https://api.github.com/repos/Marijnh/CodeMirror | grep size
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed
100  5005  100  5005    0     0   2656      0  0:00:01  0:00:01 --:--:--  2779
"size": 28589,
4 голосов
/ 07 февраля 2017

Не дает количество объектов, но если вы используете браузер Google Chrome и устанавливаете это расширение

Добавляет размер репо на домашнюю страницу:

GitHub Repo Size extension screenshot

2 голосов
/ 02 февраля 2012

Я думаю, что есть несколько проблем с этим вопросом: git count-objects на самом деле не представляет размер хранилища (даже git count-object -v не совсем); если вы используете что-либо, кроме тупого транспорта HTTP, новый пакет будет создан для вашего клона, когда вы его сделаете; и (как указал VonC все, что вы делаете для анализа удаленного репо, не будет учитывать рабочий размер копии.

Как говорится, если они используют тупой http-транспорт (например, github, это не так), вы могли бы написать сценарий оболочки, который использовал curl для запроса размеров всех предметы и пакеты. Это может приблизить вас, но это делает больше http запросы, которые вам нужно будет сделать еще раз, чтобы действительно сделать клон.

Можно выяснить, что git-fetch отправит по проводам (на умный http транспорт) и отправить это для анализа результатов, но это не совсем хорошая вещь, чтобы сделать. По сути, вы просите целевой сервер упаковать результаты, которые вы просто собираетесь скачать и выбросить, чтобы вы могли загрузите их снова, чтобы сохранить их.

Для этого можно использовать что-то вроде этих шагов:

url=https://github.com/gitster/git.git
git ls-remote $url |
  grep '[[:space:]]\(HEAD\|refs/heads/master\|refs/tags\)' |
  grep -v '\^{}$' | awk '{print "0032want " $1}' > binarydata
echo 00000009done >> binarydata
curl -s -X POST --data-binary @binarydata \
  -H "Content-Type: application/x-git-upload-pack-request" \
  -H "Accept-Encoding: deflate, gzip" \
  -H "Accept: application/x-git-upload-pack-result" \
  -A "git/1.7.9" $url/git-upload-pack | wc -c

В конце всего этого удаленный сервер будет упакован в master / HEAD и все теги для вас, и вы будете загружать весь файл пакета только для посмотрите, насколько он будет велик, когда вы загрузите его во время клона.

Когда вы наконец сделаете клон, будет создана и рабочая копия, поэтому весь каталог будет больше, чем эти команды выплевывать, но файл пакета обычно это самая большая часть рабочей копии с какой-либо значительной историей.

1 голос
/ 21 мая 2010

Не знаю, что я знаю:
Git не является сервером, по умолчанию нет ничего, что слушает запрос (если вы не активируете gitweb или слой gitolite)
И команду "git remote ... "имеет дело с локальной копией (извлеченной) удаленного репо.

Так что, если вы что-то не получите или clone --bare удаленного репо, у вас не будетидея его размера.
И это не включает в себя размер рабочего каталога, как только проверено.

...