Saltar al contenido

Reducir el tamaño del repositorio de git

Solución:

git gc --aggressive es una forma de forzar que se lleve a cabo el proceso de poda (para estar seguro: git gc --aggressive --prune=now). También tiene otros comandos para limpiar el repositorio. Sin embargo, no lo olvides, a veces git gc ¡solo puede aumentar el tamaño del repositorio!

También se puede utilizar después de un filter-branch, para marcar algunos directorios para eliminarlos del historial (con una mayor ganancia de espacio); mira aquí. Pero eso significa que nadie está sacando de su repositorio público. filter-branch puede mantener refs de respaldo en .git/refs/original, para que ese directorio también se pueda limpiar.

Finalmente, como se menciona en este comentario y esta pregunta; limpiar el reflog puede ayudar:

git reflog expire --all --expire=now
git gc --prune=now --aggressive

Una solución aún más completa, y posiblemente peligrosa, es eliminar los objetos no utilizados de un repositorio de git


Actualización de febrero de 2021, once años después: el nuevo git maintenance comando (página de manual) debe reemplazar git gcy se puede programar.

Gracias por tus respuestas. Esto es lo que hice:

git gc
git gc --aggressive
git prune

Eso parecía haber funcionado. Empecé con unos 10,5 MB y ahora son poco más de 980 KB.

En mi caso, empujé varios archivos grandes (> 100Mb) y luego procedí a eliminarlos. Pero todavía estaban en el historial de mi repositorio, por lo que también tuve que eliminarlos.

Cuál fue el truco fue:

bfg -b 100M  # To remove all blobs from history, whose size is superior to 100Mb
git reflog expire --expire=now --all
git gc --prune=now --aggressive

Entonces, necesitas empujar la fuerza en tu rama:

git push origin <your_branch_name> --force

Nota: bfg es una herramienta que se puede instalar en Linux y macOS usando brew:

brew install bfg
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *