Versión corta: significa lo que dice, y si lo dejas terminar, todo estará bien.
Durante la mayoría de las operaciones que potencialmente pueden aumentar el número de objetos sueltos (desempaquetados) en el repositorio (incluidos los empujes), Git invoca git gc --auto
. Si hay suficientes objetos sueltos (por defecto, al menos 6700), invocará git repack -d -l
para empacarlos. Si hay demasiados paquetes separados, también los volverá a empaquetar en uno.
Un paquete es un archivo único comprimido en delta, que contiene una gran cantidad de objetos. Es más eficiente almacenar objetos en paquetes, pero lleva tiempo empaquetar (comprimir) los objetos, por lo que Git inicialmente crea objetos sueltos, luego los empaca en lotes de vez en cuando, mediante la invocación automática de git gc --auto
.
Si dejas que Git termine de reempacar, esto no volverá a suceder por un tiempo. De hecho, puede llevar un tiempo, especialmente si tiene muchos objetos binarios grandes, pero si se dispara, es una señal de que probablemente reducirá drásticamente la cantidad de espacio en disco que ocupa el repositorio. Si realmente no desea que suceda, puede cambiar el parámetro de configuración gc.auto
. Si lo aumenta a algo mucho más grande que 6700, sucederá con menos frecuencia, pero tomará más tiempo cuando lo haga. Si lo disminuye, aún tendrá que hacer su reempaque actual, pero posteriormente sucederá con más frecuencia y terminará más rápidamente. Si lo configura en 0, deshabilitará el reempaque automático.
Consulte man git-gc
(debajo --auto
) y man git-config
(debajo gc.auto
) para obtener más información.
fatal: Out of memory, malloc failed (tried to allocate 79610689 bytes) error: failed to run repack
- esto es lo que obtengo por pegar toda nuestra base de código en un repositorio de git. Supongo que voy a matar aplicaciones y forzar el reempaque "manualmente"Si bien Jefroni tiene razón en que a veces el autoenvasado solo necesita tiempo para completarse, si el mensaje de autoenvasado persiste durante varios días como lo describe OP, hay una buena posibilidad de que la limpieza de git no tenga objetos colgantes, como se describe en esta pregunta .
Para ver si los objetos colgantes están activando mensajes continuos sobre el empaque automático, intente ejecutar
git fsck
. Si obtiene una larga lista de confirmaciones pendientes, puede limpiarlas congit gc --prune=now
Por lo general, tengo que ejecutar esto en mi repositorio cada 2-3 meses cuando el mensaje de empaque automático no desaparece después de un solo tirón.
fuente
git pull
, durante varios días, y defsck
hecho mostré un montón de compromisos pendientes.Para deshabilitar para un proyecto:
Para deshabilitar globalmente:
fuente
Git ejecuta git-repack, que empaqueta muchos objetos (= archivos, confirmaciones y árboles) en un archivo de paquete. Git hace esto a veces, cuando una heurística dice que puede haber espacio ahorrado (un archivo de paquete contiene deltas de objetos comprimidos, mientras que cada archivo en el directorio objetos / contiene el contenido del archivo completo comprimido)
fuente
Con suerte, ese
git gc --auto
paso es ahora (git 2.0.1, 25 de junio de 2014) más eficiente.Ver commit 62aad18 por Nguyễn Thái Ngọc Duy (
pclouds
)gc --auto
: no bloquee las referencias en segundo planoY Git 2.22 (Q2 2019) optimiza aún más
git gc
.fuente