Git ejecuta la recolección de basura automáticamente :
• Si hay demasiados objetos sueltos en el repositorio
• Cuando ocurre un envío a un repositorio remoto
• Después de algunos comandos que pueden introducir muchos objetos sueltos.
• Cuando algunos comandos como git reflog caducan, solicítelo explícitamente
Y finalmente, la recolección de basura ocurre cuando lo solicita explícitamente usando el comando git gc. ¿Pero cuándo debería ser eso? No hay una respuesta sólida a esta pregunta, pero hay algunos buenos consejos y mejores prácticas.
Debería considerar ejecutar git gc manualmente en algunas situaciones:
• Si acaba de completar una rama de filtro git. Recuerde que filter-branch reescribe muchas confirmaciones, introduce nuevas y deja las antiguas en una referencia que debe eliminarse cuando esté satisfecho con los resultados. Todos esos objetos muertos (a los que ya no se hace referencia ya que acaba de eliminar la referencia que los señala) deben eliminarse mediante la recolección de basura.
• Después de algunos comandos que pueden introducir muchos objetos sueltos. Esto podría ser un gran esfuerzo de rebase, por ejemplo.
Y por otro lado, ¿cuándo deberías tener cuidado con la recolección de basura?
• Si hay referencias huérfanas que quizás quieras recuperar
• En el contexto de git rerere y no es necesario guardar las resoluciones para siempre
• En el contexto de que solo las etiquetas y las ramas sean suficientes para hacer que Git retenga una confirmación de forma permanente
• En el contexto de las recuperaciones FETCH_HEAD (recuperaciones directas de URL a través de git fetch) porque están inmediatamente sujetas a la recolección de basura