Ответ 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 ...
Просто проверьте размер созданного пакета; это должно быть почти эквивалентно тому, что вы в конечном итоге надавите. Это означает, что вам придется создавать пакет дважды (один раз с пакетом и один раз с нажатием), но если это не очень большой толчок, который занимает много времени, чтобы упаковать, это не должно быть огромная проблема.