Это вид из возможных. Через bash
и предполагая, что origin/master
является вашей целевой ветвью:
$ echo $(git merge-base HEAD origin/master)..HEAD | git pack-objects --revs --thin --stdout --all-progress-implied > packfile
Проверка размера полученного packfile
даст вам представление о том, сколько данных вам нужно отправить для обновления удаленного устройства.
Я воспользовался этим подходом из старого ответа , когда разбирался с инструментами, пытаясь определить размер пакета для загрузки. Это что-то вроде хака, так как вам нужно сгенерировать packfile
- теоретически, когда вы знаете диапазон коммитов, которые изменились локально и удаленно, вы можете просто спросить git
об именах этих объектов ( рекурсивная проблема, поскольку объекты могут ссылаться на другие объекты) и подсчет размеров этих объектов.
(Опять же, при генерации файла пакета также упаковывает эти объекты - точно так же, как это сделает git push
- так что размер больше соответствует тому, что будет отправлено.)
Если у вас есть другие разработчики, работающие на ветке вы хотите, чтобы нажать на, то любая оценка является спорным, так как вы, вероятно, придется работать git fetch
Перед нажатием на пульте дистанционного управления, что означает передачу неизвестное количество данных!