Подтвердить что ты не робот

Возможно ли удаленный объект и размер объекта репозитория git?

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

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

4b9b3361

Ответ 1

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

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 GiB", вы знаете, что у вас проблемы, и вы можете отменить его.

Ответ 2

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

Эта ссылка: see-the-size-of-a-github-repo-before-cloning-it дал ответ

Команда: (ответ от @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,

Ответ 3

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

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

GitHub Repo Size screenshot

Ответ 4

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

При этом, если они используют тупик http-транспорта (например, github, не), вы можете написать оболочку script, которая использовала завиток для запроса размеров всех объекты и пакеты. Это может приблизиться к вам, но это делает больше http запросы, которые вам просто нужно будет сделать, чтобы на самом деле сделать клон.

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

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

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 и все теги для вас, и вы загрузите весь файл пакета только для посмотрите, насколько велика будет его загрузка при клонировании.

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

Ответ 5

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

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