Предположим, что где-то в сети существует общедоступный репозиторий git. Я хочу клонировать его, но сначала я должен быть уверен, что это его размер (сколько объектов и килобайтов, как в git count-objects
)
Есть ли способ сделать это?
Предположим, что где-то в сети существует общедоступный репозиторий git. Я хочу клонировать его, но сначала я должен быть уверен, что это его размер (сколько объектов и килобайтов, как в git count-objects
)
Есть ли способ сделать это?
Один маленький клод, который вы могли бы использовать, был бы следующим:
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", вы знаете, что у вас проблемы, и вы можете отменить его.
Для репозитория 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,
Не подсчитывает количество объектов, но если вы используете браузер Google Chrome и установите этот расширение
Он добавляет размер репо на домашнюю страницу:
Я думаю, что есть пара проблем с этим вопросом: 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 и все теги для вас, и вы загрузите весь файл пакета только для посмотрите, насколько велика будет его загрузка при клонировании.
Когда вы, наконец, сделаете клон, будет создана рабочая копия, поэтому весь каталог будет больше, чем эти команды выплюнуть, но файл пакета как правило, является самой большой частью рабочей копии с любой значительной историей.
Не знаю, о чем я знаю:
Git не является сервером, по умолчанию не прослушивается запрос (если вы не активируете gitweb или слой гитолита)
И команда git remote ...
" относится к локальной копии (извлеченной) удаленного репо.
Поэтому, если вы ничего не получили, или clone --bare
удаленное репо, у вас не будет представления о его размере.
И это не включает размер рабочего каталога, после его выписки.