2011-02-16 10 views
10

Tengo una serie de compromisos que me gustaría enviar a mi repositorio remoto, pero estoy usando una conexión a Internet con datos limitados y me gustaría saber qué tan grande es la confirmación para decidir si presionarlo ahora o más tarde cuando estoy en una conexión con un límite de datos más grande.Encontrar el tamaño de un empujón

Puede ver lo grande que es un empuje cuando está en el medio, pero ¿hay alguna forma de averiguar qué tan grande es antes de empujar?

Respuesta

10

Es tipo de posible. Via bash, y asumiendo origin/master es su bifurcación de destino:

$ echo $(git merge-base HEAD origin/master)..HEAD | git pack-objects --revs --thin --stdout --all-progress-implied > packfile 

Inspeccionar el tamaño de la packfile resultante le dará una idea de la cantidad de datos que necesita enviar para hacer la fecha hasta a la distancia.

Tomé este enfoque de un older answer, cuando estaba tratando de averiguar el tamaño de mi paquete de carga. Es un poco complicado, ya que necesita generar un packfile - en teoría, una vez que conozca el rango de confirmaciones que han cambiado local y remotamente, puede simplemente pedir git para los nombres de esos objetos (un problema recursivo, como los objetos pueden referirse a otros objetos) y contar los tamaños de esos objetos.

(Por otra parte, la generación del archivo de paquete también paquetes esos objetos - al igual que lo harían git push -. Por lo que el tamaño es más representativo de lo que iba a ser enviado)

Si tiene otros desarrolladores que trabajan en la rama a la que desea presionar, entonces cualquier estimación es discutible, ya que es probable que tenga que ejecutar git fetch antes de presionar al control remoto, lo que significa transferir una cantidad desconocida de datos.

+0

Esto funcionó muy bien, gracias. Observado en el aspecto de colaboración: en este caso, solo me preocupa el tamaño de carga y la historia del usuario que proporcioné fue ideada. –

+1

o simplemente obtenga el tamaño en bytes de inmediato: 'echo $ (git merge-base HEAD origin/master) .. HEAD | git pack-objects --revs --thin --stdout --all-progress-implied -q | wc -c' – kch

Cuestiones relacionadas