17 de diciembre de 2021

Elimina ficheros borrados del historial de git

Hola,

cuando trabajas sobre repositorios GitHub, como los de nuestro grupo, te puede pasar que en un momento dado agregas mediante commit ficheros de gran tamaño que finalmente no necesitas. Aunque luego los elimines con git rm esos ficheros quedan para siempre en la historia del repo y pueden hacer que clonarlo sea más pesado de lo que realmente necesitas. En esta entrada muestro una manera de eliminar este tipo de ficheros que a nosotros nos ha funcionado bien, basándonos en esta documentación.

1) Para empezar debes obtener la lista de ficheros y su tamaño del historial, deberás obtener el valor de $hash en cada caso:

ls  .git/objects/pack/pack-* 
#set hash=
git verify-pack -v  .git/objects/pack/pack-${hash}.idx | \
    sort -k 3 -n > packs

2) A continuación debes obtener los nombres y paths de esos ficheros:

perl -lane 'system("git rev-list --objects --all | \
    grep $F[0]")' packs > packs.log

3) Finalmente debes revisar packs.log y elegir qué ficheros o directorios quieres eliminar del historial. Debes asegurarte de que ya no los necesitas, porque después ya no podrás recuperarlos. Puede ser buena idea hacer una copia/fork del repositorio por seguridad.

4) Para eliminar, por ejemplo, una carpeta y su contenido, se hace así:

git filter-branch -f --index-filter \
    'git rm --cached --ignore-unmatch carpeta/*' \
    --tag-name-filter cat -- --all

5) Finalmente, para propagar estos cambios al repositorio remoto alojado en GitHub, se haría así:

git push origin --force --all

En posteriores clonados el repositorio será ya de menor tamaño.

Hasta pronto,

Bruno


No hay comentarios:

Publicar un comentario