Actualización: git prune
"resolvería" el problema, ya que eliminará esos objetos sueltos
( git gc
llamadas git prune
, pero solo para objetos sueltos de más de dos semanas, por defecto).
Sin embargo, como el OP Michael Donohue menciona en los comentarios:
Me gusta el aspecto de seguridad de mantener los objetos sueltos durante dos semanas, en caso de que quiera volver y ver algunas revisiones antiguas, por lo que realmente no me gusta esta solución.
No tengo 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 comprimir la base de datos no tendría ningún efecto.
Respuesta original:
El problema de " git gc
" no eliminar todos los objetos sueltos ya se informó (a fines de 2008, " " git gc
"ya no parece eliminar objetos sueltos "
git gc
solo elimina objetos sueltos de más de dos semanas, si realmente quieres eliminarlos ahora, ejecuta git prune.
Pero asegúrese de que ningún otro proceso git pueda estar activo cuando lo ejecute, o podría pisar algo.
" git gc
" desempaquetará los objetos que se han vuelto inalcanzables y que actualmente están en paquetes.
Como resultado, la cantidad de espacio en disco utilizado por un repositorio git puede aumentar dramáticamente después de una " git gc
" operación, lo que podría sorprender a alguien que se está ejecutando casi por completo en su sistema de archivos, elimina una cantidad de ramas de un repositorio de seguimiento , y luego " 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 linux-next
repositorio todos los días, acumulará una gran cantidad de estas etiquetas de rama antiguas.
Si luego elimina una serie completa de ellos y ejecuta git-gc
, la operación tomará bastante tiempo, y la cantidad de bloques e inodos utilizados crecerá significativamente.
Desaparecerán después de un " git prune
", pero cuando hago esta operación de limpieza, a menudo he deseado una --yes-I-know-what-I-am-doing-and-it's-unsafe-but-just-drop-the-unreachable-objects-cause-this-is-just-a-tracking-repository
opción para "git gc".
Entonces, en su caso, ¿ git prune
sería útil un " "?
(posiblemente con el uso de "ahora" en la gc.pruneexpire
variable de configuración, necesaria para que ocurra el comportamiento anterior).
También tienes (del mismo hilo):
repack -a -d -l
Observe la minúscula 'a'.
git-gc
llama a reempaquetar con mayúscula 'A', que es lo que hace que los objetos inalcanzables se desempaquetan La pequeña 'a' es para personas que saben lo que están haciendo y quieren que git simplemente deje caer objetos inalcanzables.