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 gc
y 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