¿Por qué git me sigue diciendo que es "Empaquetando automáticamente el repositorio en segundo plano para un rendimiento óptimo"?

100

Nota : Yo no creo que esto es un duplicado de esta pregunta , que está hablando de un paquete no de fondo que cuelga git con un mensaje de error sutilmente diferente .


En uno de mis repositorios de git, cada vez que invoco (por ejemplo) git fetch, git imprime:

Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.

Parece imprimir esto cada vez que lo hago git fetchrepetidamente, incluso cuando no hay cambios ni nada git fetchque hacer. Esto no tiene mucho sentido para mí. También parece suceder con otras operaciones de red, como git pushy git pull.

El comando regresa al indicador instantáneamente sin más resultados, y no puedo encontrar ningún proceso git ejecutándose en mi máquina. Parece suceder solo con este repositorio y solo en esta máquina. git config -l | grep gcno devuelve nada.

¿Qué puedo hacer para diagnosticar o solucionar este problema?

$ git --version 
git version 2.0.1

Estoy usando OS X 10.9.

Andrew Ferrier
fuente
Parece el mismo problema que la pregunta que vinculó, pero sucede lo suficientemente rápido como para que no parezca que se cuelga.
Holloway
También posiblemente relacionado
Holloway
Trengot, no lo creo. El mensaje de error es sutilmente diferente: menciona "el fondo".
Andrew Ferrier
Trengot, lo siento, tenías razón, estaba relacionado (el segundo enlace). Gracias por el puntero, consulte mi respuesta a continuación para obtener más detalles.
Andrew Ferrier

Respuestas:

167

Encontré la solución del segundo comentario que proporcionaste, Trengot, gracias. Resulta que tenía algunas manchas colgando, que estaban adentro .git/objects/17y, por lo tanto, desencadenaban el empaque:

$ git fsck
dangling blob d9ff0aeac4aa8b4e0907daed675ebf60278bc977
dangling blob dbff2d073741f9775c815d4a3c623736af224dad
dangling blob e1ffbab1c5b985cd1cd3bc0281075ea2ed80744a
dangling blob fdff59878ccb3a75689f4acca615cfb635288774

Esto los limpió:

$ git gc --prune=now

Tenga en cuenta que, según el comentario de Henrik a continuación, esto puede ser un poco peligroso. ¡Cuídate!

Andrew Ferrier
fuente
19
¡Gracias! Esto pareció funcionar para mí. Tenga en cuenta que --prune=nowes un poco peligroso. De forma predeterminada, --prunemantendrá 2 semanas de manchas colgantes, lo que significa que si accidentalmente hizo un cambio de base incorrecto hace 5 minutos o eliminó una rama ayer, puede recuperarse. Una vez que ejecute este comando, perderá todos los blogs pendientes hasta ahora, no hace 2 semanas. Además, parece que nunca debería ejecutarlo mientras realiza otros comandos de Git en otra terminal, o su repositorio puede corromperse.
Henrik N
3
Me salvaste el día
Owen Chen