tutorial stackoverflow example git git-rebase git-push

git - stackoverflow - ¿Qué significa "embalaje automático del repositorio para un rendimiento óptimo"?



git rebase tutorial (5)

Estoy teniendo un problema con mi git repo. En los últimos días, cada vez que hago un push en el servidor, recibo este mensaje: "Embalaje automático del repositorio para un rendimiento óptimo", y parece que no desaparece y devuelve el shell.

También intenté consultar una nueva rama y luego hacer una rebase en mi rama anterior y luego git gc para eliminar los objetos históricos no utilizados y luego hice un push pero aún aparece este mensaje. Por favor, hágame saber qué está pasando con mi repositorio.


Con suerte, ese paso de git gc --auto 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 refs en el fondo

9f673f9 (opción gc : config para ejecutar --auto en segundo plano - 2014-02-08, Git 2.0.0) coloca " gc --auto " en el fondo para reducir el tiempo de espera del usuario.
Parte de la recolección de basura es pack-refs y reflogs de poda. Estos requieren bloquear algunos refs y pueden abortar otros procesos que intentan bloquear la misma referencia.

Si gc --auto se gc --auto en el medio de una secuencia de comandos, la celebración de bloqueos de gc en segundo plano podría fallar la secuencia de comandos, lo que nunca podría suceder antes de 9f673f9 .

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


Git ejecuta git-reempaque, 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)


Para deshabilitar para un proyecto:

cd your_project_dir git config gc.auto 0

Para deshabilitar globalmente:

git config --global gc.auto 0


Si bien Jefroni tiene razón en que a veces el auto empaquetamiento solo necesita tiempo para completarse, si el mensaje de autocompletar persiste durante varios días como lo describe OP, existe una buena posibilidad de que la limpieza de git no contenga objetos colgantes, como se describe en esta pregunta .

Para ver si los objetos colgantes están activando mensajes continuos sobre el auto-embalaje, intente ejecutar git fsck . Si obtiene una larga lista de compromisos pendientes, puede limpiarlos con

git gc --prune=now

Por lo general, tengo que ejecutar esto en mi repositorio cada 2-3 meses cuando el mensaje de autocompletado no desaparece después de un solo tirón.


Versión corta: significa lo que dice, y si solo dejas que termine, todo estará bien.

Durante la mayoría de las operaciones que pueden aumentar el número de objetos sueltos (desempaquetados) en el repositorio (incluidos los empujones), Git invoca git gc --auto . Si hay suficientes objetos sueltos (de forma predeterminada, al menos 6700), invocará git repack -d -l para empaquetarlos. 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 empacar (comprimir) objetos, por lo que Git inicialmente crea objetos sueltos, y luego los empaqueta en lotes de vez en cuando, mediante la invocación automática de git gc --auto .

Si dejas que Git termine de empacar, esto no volverá a suceder por un tiempo. De hecho, puede tomar un tiempo, especialmente si tiene muchos objetos binarios grandes, pero si se está disparando, entonces es una señal de que probablemente reducirá drásticamente la cantidad de espacio en disco que toma el repositorio. Si realmente no desea que suceda, puede cambiar el parámetro de configuración gc.auto . Si lo aumenta a algo mucho mayor que 6700, ocurrirá con menos frecuencia, pero tomará más tiempo cuando lo haga. Si lo reduce, igual tendrá que volver a embalar, pero posteriormente ocurrirá con más frecuencia y terminará más rápidamente. Si lo configura en 0, desactivará el reempaquetado automático.

Consulte man git-gc (en virtud de --auto ) y man git-config (en gc.auto ) para obtener más información.