Pregunta Evitar "advertencia: hay demasiados objetos sueltos inalcanzables" durante git svn clone / fetch


Cuando se ejecuta un git svn clone o git svn fetch frente a un gran repositorio de Subversion (100k + commits), la búsqueda se detiene regularmente con:

Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
error: The last gc run reported the following. Please correct the root cause and remove .git/gc.log.
Automatic cleanup will not be performed until the file is removed.

warning: There are too many unreachable loose objects; run 'git prune' to remove them.

gc --auto: command returned error: 255

Para recuperarlo, tengo que seguir las instrucciones, ejecutar una ciruela y un gc más agresivos, eliminar el archivo de registro y continuar, solo para que vuelva a suceder luego de que se lean otros 10k commits.

¿Cómo se puede evitar este problema?


8
2018-03-02 04:43


origen


Respuestas:


Creo que si configuras la opción de configuración gc.pruneExpire a now, al menos temporalmente durante la importación, evitará ese mensaje. Con esa opción establecida, git gc eliminará inmediatamente todas objetos inalcanzables, en lugar de solo los que tienen al menos dos semanas de antigüedad (el valor predeterminado). Junto con un valor razonable para gc.auto esto debería evitar que se acumulen hasta el punto en que recibas ese mensaje.


9
2018-03-02 04:49



Respuesta propia.

git svn las operaciones se encuentran entre los que lanzan el fondo gc --auto operaciones de limpieza. En este caso, creo que el progreso continuo de git svn fetch puede dar como resultado la cantidad de objetos sueltos / inalcanzables en algún punto de la operación de gc que exceden el umbral de autenticación, lo que da como resultado esta advertencia. Lamentablemente, es fatal para la recuperación en curso.

Mi solución es desactivar / sospechar temporalmente estas operaciones de gc, desactivando gc auto como se describe en su página de manual:

git config gc.auto 0

Una vez el git svn fetch finaliza la operación, puede eliminar esta configuración si lo desea, y ejecutar operaciones manuales completas de gc, podar y reempaquetar para optimizar el repositorio final.


5
2018-03-02 04:47