git, del que ya comentamos cosas más de una vez, es fantástico a la hora de gestionar un proyecto con varias ramas y muchos cambios, pero tiene un curioso problema, el espacio que puede llegar a ocupar un repositorio. Bajo la carpeta del repositorio están almacenados todos los cambios y todas las ramas, para poder acceder a cualquier versión preliminar y esto, lógicamente, ocupa espacio.
Por poner un ejemplo claro, de un repositorio que tengo actualmente está ocupando 90Mb, mientras que si sumas todos los ficheros que forman parte del repositorio su tamaño ronda aproximadamente los 50Mb. Una diferencia de casi 40Mb es espacio extra que está ocupando. Cierto es que con los discos actuales no es un problema, pero aun así es bueno saber cómo poder optimizar este espacio.
Por suerte git tiene un comando para ello, gc (garbage collector), que no es más que un pequeño "recolector de basura", al más puro estilo java, que se encarga de eliminar todos aquellos objetos que son inalcanzables. Aunque se supone que git realiza esta tarea automáticamente si lo considera oportuno, también podemos forzar dicho purgado de forma manual.
Es importante saber que ningún objeto que sea alcanzable será borrado, sino que se borrarán branches, tags, entradas de logs, blobs, trees y objetos que hacen referencia a parent commits, pero que no sean alcanzables desde ningún punto. A mayores de la recolección de basura, gc también se encarga de organizar y empaquetar todos los objetos en un único archivo usando delta compression1 .
En un ejemplo de uso, mi repositorio pasó de ocupar 90Mb a 80Mb sin perder ningún dato de interés. No es mucho, pero siempre puede ser interesante para ahorrar espacio.
shell> du -sh proyect_1 90M proyect_1/ shell> cd proyect_1 shell> git gc Counting objects: 7503, done. Delta compression using up to 4 threads. Compressing objects: 100% (3783/3783), done. Writing objects: 100% (7503/7503), done. Total 7503 (delta 4257), reused 6237 (delta 3398) shell> cd .. shell> du -sh proyect_1 80M proyect_1/
1. Método de compresión optimizado para snapshots con pequeñas diferencias entre ellos.
La entrada Ahorrar espacio en git la puedes leer en El mundo en bits.
No hay comentarios :
Publicar un comentario