¿Qué significa "Empaquetar automáticamente el repositorio para un rendimiento óptimo"?


Tengo un problema con mi repositorio git. Durante el último par de días cada vez que hago un push al servidor recibo este mensaje: "Empaquetando automáticamente el repositorio para un rendimiento óptimo", y no parece desaparecer y devolver el shell.

También intenté buscar una nueva rama y luego hacer un rebase en mi rama anterior y luego hice git gc para eliminar los objetos del historial no utilizados y luego hice un push pero aún aparece este mensaje. Por favor, hágame saber lo que está pasando con mi repo.

Author: Flimm, 2011-12-26

5 answers

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 (incluyendo push), Git invoca git gc --auto. Si hay suficientes objetos sueltos (por defecto, al menos 6700), entonces invocará git repack -d -l para empaquetarlos. Si hay demasiados paquetes separados, también los volverá a empacar en uno.

Un paquete es un solo archivo comprimido delta, que contiene un gran cantidad de objetos. Es más eficiente almacenar objetos en paquetes, pero lleva tiempo empaquetar (comprimir) objetos, por lo que Git inicialmente crea objetos sueltos, luego los empaqueta en lotes de vez en cuando, a través de la invocación automática de git gc --auto.

Si dejas que Git termine de volver a empaquetar, esto no volverá a suceder por un tiempo. De hecho, puede tomar un tiempo, especialmente si tiene una gran cantidad de objetos binarios grandes, pero si se está activando, entonces es una señal de que probablemente reducirá drásticamente la cantidad de espacio en disco ocupado por el repositorio. Si realmente no quieres que suceda, puedes cambiar el parámetro config gc.auto. Si lo aumenta a algo mucho mayor que 6700, sucederá con menos frecuencia, pero tomará más tiempo cuando lo haga. Si lo disminuye, todavía tendrá que hacer su reempaque actual, pero posteriormente sucederá más a menudo y terminará más rápidamente. Si lo establece en 0, deshabilitará el reembalaje automático.

Ver man git-gc (en --auto) y man git-config (en gc.auto) para más información información.

 249
Author: Cascabel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-26 18:31:46

Para desactivar para un proyecto:

cd your_project_dir
git config gc.auto 0

Para desactivar globalmente:

git config --global gc.auto 0
 25
Author: Anders Lindén,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-11 08:01:32

Si bien Jefroni tiene razón en que a veces el auto-empaque solo necesita tiempo para completarse, si el mensaje de auto-empaque persiste durante varios días como lo describe OP, hay una buena probabilidad de que la limpieza de git carezca de objetos colgando, como se describe en esta pregunta.

Para ver si los objetos colgando están activando mensajes en curso sobre el empaquetado automático, intente ejecutar git fsck. Si obtienes una larga lista de confirmaciones colgantes, puedes limpiarlas con

git gc --prune=now

I por lo general, tengo que ejecutar esto en mi repositorio cada 2-3 meses cuando el mensaje de embalaje automático no desaparece después de un solo tirón.

 25
Author: wbharding,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:41

Git está ejecutando 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 guardado (un archivo pack contiene deltas de objetos comprimidos, mientras que cada archivo en el directorio objects/ contiene el contenido completo del archivo comprimido)

 9
Author: Rudi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-26 13:02:38

Esperemos que ese paso git gc --auto sea ahora (git 2.0.1, 25 de junio de 2014) más eficiente.
Ver cometer 62aad18 por Nguyễn Thái Ngọc Duy (pclouds)

gc --auto: no bloquear referencias en el fondo

9f673f9 (gc: la opción de configuración para ejecutar auto auto en segundo plano-2014-02-08, Git 2.0.0) pone " gc --auto" en segundo plano para reducir el tiempo de espera del usuario.
Parte de la recolección de basura es pack-refs y poda reflogs. Estos requieren el bloqueo de algunos refs y puede abortar otros procesos tratando de bloquear el mismo ref.

Si gc --auto se dispara en medio de un script, los bloqueos de retención de gc en el fondo podrían fallar el script, lo que nunca podría suceder antes de 9f673f9.

Sigue ejecutando pack-refs y "reflog --prune" en primer plano para detener las actualizaciones de ref paralelas. Las operaciones restantes en segundo plano (repack, prune y rerere) no deberían afectar a los procesos en ejecución de git.

 0
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-27 19:09:28