#Fixed 2: Eliminar archivos del histórico de Git.

En más de una ocasión me he encontrado con este problema. Ficheros en un repositorio que no deberían estar ahí. Bien por despiste o por error, podríamos incluir ficheros de contraseñas, copias de seguridad…etc., que realmente no querríamos que estuvieran ahí. A mi me ha pasado alguna vez jijiji.

Después de buscar en internet comandos en Git para modificar el historial, encontré una herramienta para realizar este tipo de operaciones. Dicha herramienta se llama BFG Repo-Cleaner y es bastante sencilla de utilizar para el problema complejo que resuelve. En su página podéis encontrar bastante información al respecto.

Problema

Resumiendo, un repositorio Git contenía en el histórico archivos de gran tamaño que no deberían estar ahí.

Solución

Los pasos que seguí fueron los siguientes (que como digo, están claramente indicados en la página de BFG):

  • Descargar la aplicación BFG Repo-Cleaner. Como es una aplicación Java, necesitaremos instalarnos la máquina virtual. En mi caso, tengo Ubuntu y no la tenía todavía así que instalé openjdk-8-jre.
  • Siguiendo los pasos indicados en la web de la aplicación. Primeros clonamos el repositorio con la opción — mirror.
git clone --mirror git://example.com/some-big-repo.git

Posteriormente realizamos la operación que queramos. En mi caso eliminar todos los archivos mayores de 20 MB.

java -jar bfg.jar --strip-blobs-bigger-than 20M some-big-repo.git

Ahora, entramos en el repositorio y…

$ cd some-big-repo.git
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive

…comprobamos el tamaño del nuevo repositorio.

$ du -sh
7,6M .

Que no está mal. Antes pesaba cientos de megas.

  • Lo siguiente que se especifica en la documentación de la herramiennta es hacer un:
$ git push

A mi esto no me terminó de funcionar aunque el mensaje de salida era un Everything update, al volver a descargarme el repo seguía ocupando los cientos de megas así que supongo que tendría que haber hecho un git push -f…o no.

  • Lo que yo hice fue crearme un nuevo repo, añadirlo al repositorio modificado por BFG, hacer un push y comenzar desde ahí.
$ git remote add flat git://example.com/flat.git
$ git push flat master

Chimpún.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.