На самом деле, я думаю, что мой комментарий достаточно понравился, чтобы опубликовать его как ответ!
Когда вы нажимаете, git создает пакет всех необходимых объектов и загружает его на удаленный компьютер.Это означает, что мы ищем способ предсказать размер упаковки.Поскольку пакеты сжимаются, это делает очень трудным делать что-либо на основе различий или размеров объектов;что мы действительно хотим сделать, так это просто посмотреть, насколько большим будет этот пакет.Было бы неплохо, если бы вы могли прервать пуш, сразу после того, как он скомпоновал пакет, и решили продолжить работу в зависимости от размера пакета, но я не думаю, что это возможно.Мое лучшее предположение - попытаться воссоздать пакет, который будет выдвинут, и проверить его.
Пакетный файл - это, в основном, пакет с информацией заголовка (посмотрите, если хотите, источник ).).Это означает, что это удобная фарфоровая команда, которая создаст файл с нужным вам размером.(Гораздо проще, чем пытаться использовать pack-objects вручную.) Используйте что-то вроде этого:
git bundle create foo.bundle ^origin/master master
Это даст вам комплект, содержащий все необходимое, чтобы добраться до мастера, учитывая, чтопульт дистанционного управления имеет origin / master - то же самое, что должно быть нажато git push origin master
.Если у вас есть дополнительные ветви, которые вы будете продвигать, вы также можете прикрепить их;он просто принимает аргументы списка оборотов:
git bundle create foo.bundle ^origin/master master ^origin/topic topic ...
Просто проверьте размер созданного пакета;это должно быть почти эквивалентно тому, что вы в конечном итоге толкнете.Это означает, что вам придётся создавать пакет дважды (один раз с пакетом и один раз с толчком), но если это действительно большой толчок, который требует много времени для упаковки, это не должно бытьогромная проблема.