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

Предскажите, сколько данных будет нажато в нажатие git

Я иногда пользуюсь дорогостоящим подключением к Интернету, и мне хотелось бы узнать (по крайней мере примерно), сколько данных будет передано на удаленный компьютер в git push.

4b9b3361

Ответ 1

На самом деле, я думаю, что мне нравится мой комментарий, чтобы опубликовать его как ответ!

Когда вы нажимаете, git создает пакет всех необходимых объектов и загружает их на пульт. Это означает, что мы ищем способ предсказать размер пакета. Поскольку пакеты сжаты, это делает очень трудным сделать что-либо, основанное на различиях или размерах объектов; то, что мы действительно хотим сделать, это просто посмотреть, насколько большой будет этот пакет. Было бы неплохо, если бы вы могли прервать толчок, сразу после того, как он построил пакет, и решите продолжить работу на основе размера пакета, но я не думаю, что это возможно. Мое лучшее предположение - попытаться воссоздать пакет, который будет нажат, и проверить это.

Файл с пакетом в основном представляет собой пакет с информацией заголовка (посмотрите, пожалуйста, источник, если хотите). Это означает, что это удобная команда фарфора, которая создаст файл с размером, о котором вы заботитесь. (Намного проще, чем пытаться вручную использовать pack-objects.) Используйте что-то вроде этого:

git bundle create foo.bundle ^origin/master master

Это даст вам комплект, содержащий все необходимое для освоения, учитывая, что пульт имеет источник/мастер - точно такую ​​же вещь, которую нужно нажать на git push origin master. Если у вас есть дополнительные ветки, которые вы будете нажимать, вы также можете их атаковать; он просто принимает rev-list args:

git bundle create foo.bundle ^origin/master master ^origin/topic topic ...

Просто проверьте размер созданного пакета; это должно быть почти эквивалентно тому, что вы в конечном итоге надавите. Это означает, что вам придется создавать пакет дважды (один раз с пакетом и один раз с нажатием), но если это не очень большой толчок, который занимает много времени, чтобы упаковать, это не должно быть огромная проблема.

Ответ 2

Вы можете узнать, в точности, запустив аналогичный бит Bash для того, что Git будет запускаться внутренне, когда он создает файл пакета для нажатия:

$ echo $(git merge-base HEAD origin/master)..HEAD | git pack-objects --revs --thin --stdout -q | wc -c

Это должно выводить байтовый счет файла пакета Git. Разбито:

# Find the common ancestor of HEAD and origin/master, and output a
# revision range (<a>..<b>) string to git pack-objects.
echo $(git merge-base HEAD origin/master)..HEAD

# Generate the pack file containing the revision range specified above, writing
# it to stdout.
git pack-objects --revs --thin --stdout -q

# Print the byte count of the file contents passed via stdin.
wc -c

Это обусловлено тем, что вы делаете git fetch прямо перед нажатием; если вы этого не сделаете, Git не сможет найти общего предка и отправит содержимое вашего всего репозитория. См. этот ответ для получения дополнительной информации.

Ответ 3

git diff HEAD origin/master --stat