tag - ¿Con qué frecuencia debes usar git-gc?
qué tipos de etiquetas existen en git (9)
¿Con qué frecuencia debes usar git-gc?
La página del manual simplemente dice:
Se recomienda a los usuarios que ejecuten esta tarea regularmente en cada repositorio para mantener una buena utilización del espacio en disco y un buen rendimiento operativo.
¿Hay algunos comandos para obtener algunos conteos de objetos para saber si es hora de gc?
Colóquelo en un trabajo cron que se ejecute todas las noches (¿por la tarde?) Cuando está durmiendo.
Depende principalmente de cuánto se utiliza el repositorio. Con un usuario ingresando una vez al día y una operación de bifurcación / fusión / etc una vez a la semana, probablemente no necesite ejecutarla más de una vez al año.
Con varias docenas de desarrolladores trabajando en varias docenas de proyectos, cada uno de los cuales se registra 2-3 veces al día, es posible que desee ejecutarlo cada noche.
Sin embargo, no hará daño correrlo con más frecuencia de la necesaria.
Lo que haría sería ejecutarlo ahora, luego, dentro de una semana, tomar una medida de la utilización del disco, ejecutarlo nuevamente y medir nuevamente la utilización del disco. Si baja un 5% en tamaño, ejecútalo una vez por semana. Si cae más, entonces ejecútalo con más frecuencia. Si cae menos, entonces ejecútalo con menos frecuencia.
Esta cita está tomada de; Control de versiones con Git
Git ejecuta la recolección de basura automáticamente :
• Si hay demasiados objetos sueltos en el repositorio.
• Cuando ocurre un envío a un repositorio remoto
• Después de algunos comandos que pueden introducir muchos objetos sueltos.
• Cuando algunos comandos como git reflog caducan explícitamente, solicítelo
Y finalmente, la recolección de basura se produce cuando lo solicitas explícitamente usando el comando git gc. Pero cuando debería ser eso? No hay una respuesta sólida a esta pregunta, pero hay algunos buenos consejos y mejores prácticas.
Debería considerar ejecutar git gc manualmente en algunas situaciones:
• Si acabas de completar una rama-filtro git. Recuerde que la rama de filtro reescribe muchas confirmaciones, introduce otras nuevas y deja las antiguas en una referencia que debe ser eliminada cuando esté satisfecho con los resultados. Todos esos objetos muertos (a los que ya no se hace referencia ya que acaba de eliminar la referencia que los señala) deben eliminarse mediante la recolección de basura.
• Después de algunos comandos que pueden introducir muchos objetos sueltos. Esto podría ser un gran esfuerzo de rebase, por ejemplo.
Y por otro lado, ¿cuándo debería desconfiar de la recolección de basura?
• Si hay referencias huérfanas que quizás quieras recuperar
• En el contexto de git rerere y no es necesario guardar las resoluciones para siempre
• En el contexto de que solo las etiquetas y las ramas son suficientes para hacer que Git retenga un compromiso de forma permanente
• En el contexto de las recuperaciones de FETCH_HEAD (recuperaciones directas de URL a través de git fetch) porque están sujetas inmediatamente a la recolección de basura
• En el contexto de que solo las etiquetas y las ramas son suficientes para hacer que Git retenga un compromiso de forma permanente
• En el contexto de las recuperaciones de FETCH_HEAD (recuperaciones directas de URL a través de git fetch) porque están sujetas inmediatamente a la recolección de basura
Las versiones recientes de git ejecutan gc automáticamente cuando sea necesario, por lo que no debe hacer nada. Consulte la sección Opciones de man git-gc (1) : "Algunos comandos de git ejecutan git gc --auto después de realizar operaciones que podrían crear muchos objetos sueltos".
Lo uso cuando hago una confirmación grande, sobre todo cuando elimino más archivos del repositorio ... después, las confirmaciones son más rápidas
Puede hacerlo sin ninguna interrupción, con el nuevo ajuste (Git 2.0 Q2 2014) gc.autodetach
.
Consulte commit 4c4ac4d y commit 9f673f9 ( Nguyễn Thái Ngọc Duy, también conocido como pclouds ):
gc --auto
toma tiempo y puede bloquear al usuario temporalmente (pero no menos molesto).
Haz que se ejecute en segundo plano en los sistemas que lo soportan.
Lo único que se pierde con la ejecución en segundo plano son las impresiones. Pero lagc output
no es realmente interesante.
Puede mantenerlo en primer plano cambiandogc.autodetach
.
Desde esa versión 2.0, hubo un error: git 2.7 (Q4 2015) se asegurará de no perder el mensaje de error .
Ver commit 329e6e8 (19 de septiembre de 2015) por Nguyễn Thái Ngọc Duy ( pclouds
) .
(Fusionada por Junio C Hamano - gitster
- in commit 076c827 , 15 de octubre de 2015)
gc
: guarde el registro desdegc --auto
daemonizedgc --auto
e imprímalo la próxima vezMientras commit 9f673f9 (la opción
gc
: config para ejecutar--auto
en segundo plano - 2014-02-08) ayuda a reducir algunas quejas acerca de ''gc --auto
'' acaparando el terminal, crea otro conjunto de problemas.Lo último en este conjunto es que, como resultado de la demonización,
stderr
se cierra y todas las advertencias se pierden. Esta advertencia al final decmd_gc()
es particularmente importante porque le dice al usuario cómo evitar que "gc --auto
" se ejecute repetidamente.
Debido a que stderr está cerrado, el usuario no lo sabe, naturalmente se quejan de la pérdida de CPU ''gc --auto
''.Daemonized
gc
ahora guardastderr
en$GIT_DIR/gc.log
.
Siguiendo agc --auto
no se ejecutará ygc.log
imprimirá hasta que el usuario eliminegc.log
.
Si estás usando Git-Gui , te dice cuándo debes preocuparte:
This repository currently has approximately 1500 loose objects.
El siguiente comando traerá un número similar:
$ git count-objects
Excepto que, desde su origen , git-gui hará los cálculos por sí mismo, en realidad contando algo en la carpeta .git/objects
y probablemente aporte una aproximación (¡no sé si leerlo correctamente!).
En cualquier caso, parece dar la advertencia basándose en un número arbitrario de alrededor de 300 objetos sueltos.
Tenga en cuenta que la desventaja de recolectar basura en su repositorio es que, bueno, la basura se recolecta. Como todos sabemos como usuarios de computadoras, los archivos que consideramos basura en este momento podrían llegar a ser muy valiosos tres días en el futuro. El hecho de que git mantenga la mayor parte de sus escombros alrededor me ha salvado el tocino varias veces: al navegar por todos los compromisos pendientes, he recuperado mucho trabajo que accidentalmente había conservado.
Así que no seas demasiado loco en tus clones privados. Hay poca necesidad de ello.
OTOH, el valor de la capacidad de recuperación de datos es cuestionable para los repos usados principalmente como controles remotos, por ejemplo. el lugar donde todos los desarrolladores empujan y / o sacan de. Allí, podría ser sensato iniciar una ejecución de GC y un reenvasado con frecuencia.
Utilizo git gc después de hacer un gran pago y tengo muchos objetos nuevos. puede ahorrar espacio. Por ejemplo, si selecciona un proyecto SVN grande con git-svn, y hace git gc, por lo general ahorra mucho espacio.