Actualización: git prune
sería "resolver" el problema, ya que eliminará los objetos sueltos
(git gc
llamadas git prune
, pero sólo para los objetos sueltos de más de dos semanas, por defecto).
Sin embargo, como el OP Michael Donohue menciones en los comentarios:
me gusta el aspecto de la seguridad de mantener los objetos sueltos alrededor de dos semanas, debería querer volver atrás y mirar algunas versiones anteriores, por lo que don Realmente me gusta esta solución.
No estoy teniendo ningún problema con el tamaño o el rendimiento de git, es solo 'git gui' que insiste en pedirme que comprima la base de datos, incluso cuando la compresión de la base de datos no tendría ningún efecto.
Respuesta original:
El problema de la "git gc
" no eliminar todos objetos sueltos se ha informado antes (a finales de 2008, ""git gc
" doesn't seem to remove loose objects any more"
git gc
sólo elimina suelta objetos de más de dos semanas, si realmente desea eliminarlos ahora, ejecute git prune.
Pero haga Asegúrese de que ningún otro proceso de git pueda estar activo cuando lo ejecute, o podría dar el paso en algo.
"git gc
" desempaquetar objetos que se han vuelto inalcanzables y que estaban actualmente en paquetes.
Como resultado, la cantidad de espacio de disco utilizado por un repositorio de git puede ir hasta dramáticamente después de una operación "git gc
", que podría ser sorprendente para alguien que está ejecutando casi en su sistema de archivos, elimina un número de las ramas de un repositorio de seguimiento, y luego hace un "git gc
" puede obtener una sorpresa muy desagradable.
[
Ejemplo: ]
Las ramas antiguas se reservan mediante una etiqueta como next-20081204
.
Si actualiza su copia local del repositorio linux-next
todos los días, acumulará una gran cantidad de estas antiguas etiquetas de ramificación.
Si luego elimina una serie completa de ellos y ejecuta git-gc
, la operación llevará bastante tiempo, y la cantidad de bloques e inodos utilizados crecerá significativamente.
Desaparecerán después de un "git prune
", pero cuando realizo esta operación de limpieza, a menudo he deseado una opción --yes-I-know-what-I-am-doing-and-it's-unsafe-but-just-drop-the-unreachable-objects-cause-this-is-just-a-tracking-repository
para "git gc".
Entonces, en su caso, ¿sería útil un "git prune
"?
(posiblemente con el uso de "ahora" en la variable de configuración gc.pruneexpire
, necesaria para que ocurra el comportamiento anterior).
También tienen (desde el mismo hilo):
repack -a -d -l
Aviso la minúscula 'a'.
git-gc
llamadas reempaquetar con mayúscula 'A', que es lo que hace que los objetos inalcanzables para ser desempaquetados. Poco 'a', es para personas que saben lo que están haciendo, y quieren que Git simplemente arroje objetos inalcanzables.
Ese diálogo es un gran ejemplo de una "función" que mucha gente desearía que no existiera . No solo es molesto, puede borrar confirmaciones importantes que se separaron después de un restablecimiento completo. – adelriosantiago