De vez en cuando me encuentro en una costosa conexión a Internet y me gustaría saber (al menos aproximadamente) cuántos datos se enviarán al control remoto en un git push
.Predecir la cantidad de datos que se insertarán en un git push
Respuesta
En realidad, creo que me gusta mi comentario lo suficiente como para publicarlo como respuesta!
Cuando empujas, git crea un paquete de todos los objetos necesarios y los sube al control remoto. Esto significa que estamos buscando una forma de predecir ese tamaño de paquete. Como los paquetes están comprimidos, eso hace que sea muy difícil hacer cualquier cosa en función de los tamaños de objeto o diffs; lo que realmente queremos hacer es ver cuán grande será ese paquete. Sería bueno si pudieras interrumpir el empujón, justo después de que se construyó el paquete, y decidir proceder según el tamaño del paquete, pero no creo que eso sea posible. Mi mejor intento es tratar de recrear el paquete que se empujaría e inspeccionarlo.
Un archivo de paquete es básicamente un paquete con información de encabezado (eche un vistazo a the source si lo desea). Esto significa que es un comando de porcelana conveniente que creará un archivo con el tamaño que te importa. (Mucho más fácil que tratar de usar pack-objects manualmente.) Utilice algo como esto:
git bundle create foo.bundle ^origin/master master
Eso le daremos un paquete que contiene todo lo necesario para llegar a dominar, dado que la distancia tiene origin/master - exactamente el mismo Lo que debe ser empujado por git push origin master
. Si tienes ramas adicionales que estarás presionando, puedes virarlas también; solo está tomando args de la lista de reválvulas:
git bundle create foo.bundle ^origin/master master ^origin/topic topic ...
Simplemente verifique el tamaño de ese paquete creado; debería ser casi equivalente a lo que terminará presionando. Esto significa que terminarás teniendo que crear el paquete dos veces (una vez con el paquete y otra vez con el botón), pero a menos que sea un gran empujón que lleve mucho tiempo empacar, no debería ser un gran problema
git diff HEAD origin/master --stat
Esto no muestra el ancho de banda, me sale: git push-dry run -v Empujar a [email protected]: Proyecto Para [email protected]: Proyecto maestro fbe6184..7b7a3bc -> maestro –
@ Gerald, prueba usar el comando git diff en su lugar. El ejemplo que publiqué arriba le mostrará qué archivos han cambiado y cuántas líneas de inserciones y eliminaciones hay en cada uno. ¿Es suficiente información para seguir? –
es una estimación aproximada, cuando la compresión y las diferencias binarias están involucradas. También tedioso si hay muchas modificaciones. –
Usted puede encontrar casi exactamente mediante la ejecución de un poco similar de golpe a lo que Git se ejecutará internamente cuando se crea el archivo de paquete para empujar:
$ echo $(git merge-base HEAD origin/master)..HEAD | git pack-objects --revs --thin --stdout -q | wc -c
Esta debe ser la salida el byte recuento de la manada archivo que Git enviaría. Analizado:
# 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
Ésta es la condición de hacer un git fetch
justo antes de empujar; si no lo hace, Git no podrá encontrar el ancestro común y enviará los contenidos de su repositorio completo. Ver this answer para más información.
- 1. versión de actualización cada vez que se hace git push?
- 2. Git: Stop git push
- 3. 'git push'
- 4. git push only parte de un repositorio
- 5. ¿Funciona `git push` como abreviatura de` git push origin newfeature`?
- 6. Hacer que git push respete los permisos?
- 7. ¿Existe un límite superior para la cantidad de confirmaciones que un repositorio de git puede manejar?
- 8. Deshacer un git push en github
- 9. "git push origin master" se congela
- 10. git push, no push all local commits
- 11. restablecimiento completo en git push
- 12. git cómo desactivar push
- 13. Git ignore push solo
- 14. Cuantificando la cantidad de cambio en un git diff?
- 15. git push .git/archivo de descripción
- 16. Problemas de Git con git push --todos
- 17. Git Push Not Working
- 18. Predecir que el programa fallará
- 19. git push rejected
- 20. git post-push hook?
- 21. Continuar un git-push interrumpido (reanudar la carga)
- 22. Cambio de autoría git git push después
- 23. git push -f vs. +
- 24. Git push rechazado
- 25. Git push - paquete subóptimo - memoria
- 26. Git pre-push hooks
- 27. git push a la sucursal remota
- 28. git push a la rama remota existente
- 29. ¿Por qué "git push helloworld + master: master" en lugar de solo "git push helloworld"?
- 30. xcode git pull/push crash
Esto parece complicado ... los impulsos están comprimidos, por lo que, para saberlo realmente, querría interrumpir una vez que haya creado el paquete pero antes de que lo envíe. Podría intentar verificar el tamaño del paquete correspondiente, aunque eso significa que efectivamente se empaqueta dos veces. – Cascabel