Cómo remover por completo un archivo del historial de tu repositorio y no morir en el intento

Una de las cosas por cuya existencia estoy muy agradecido es herramientas como GIT o SUBVERSION, que vienen a resolver diversos y graves conflictos al momento de desarrollar (programar) en equipo; incluso si estás desarrollando solo (como es mi caso), qué mejor que seguir las “best practices” y utilizar GIT para llevar un registro y control exacto de las versiones de cada una de tus aplicaciones.

Hoy quiero compartir algo que “sin querer” se convirtió en un dolor de cabeza por 3 horas. Aquí les dejo mi experiencia:

Me encontraba desarrollando una aplicación en LARAVEL. Por alguna razón hice un respaldo mediante la compresión de mis archivos, generando así un archivo “Archivar.zip” sin darme cuenta, al momento que terminé los cambios que estaba efectuando en mi código, decidí hacer COMMIT, por lo tanto, este archivo ZIP formó parte del COMMIT. Al darme cuenta, agregué las líneas requeridas al archivo “.gitignore” para ignorar los archivos ZIP, generando así un nuevo COMMIT. Hasta este punto, todo marchaba de maravilla, puesto que no había publicado (GIT PUSH) mis COMMITS a mi repositorio remoto y no me había dado cuenta del problema. Seguí trabajando, generando más cambios a mi código y realizando más COMMIT. Hasta este punto, ya había generado 3 COMMIT más desde la creación de mis archivos ZIP.

El problema comenzó cuando intente publicar mis COMMITS a mi repositorio remoto, no fue hasta que GITHUB me dijo lo siguiente:

“File Archivar.zip is 187.18 MB; this exceeds GitHub's file size limit of 100.00 MB”

No había tenido roce alguno con un mensaje como este anteriormente, por lo que me quedé con el ojo cuadrado, y me dije, “¿ahora qué?”. Comencé a investigar, instalé GIT LFS para manejar los archivos grandes pero no tuve éxito, mi problema radicaba en que no podía sincronizar mi repositorio local con el remoto.

Intenté varías ocurrencias, posicionar el HEAD al COMMIT antes de generar los archivos.zip para ignorarlos en el siguiente COMMIT pero cuanto más hacía mis ocurrencias más se complicaba la situación.

Al investigar más encontré una herramienta que vino a resolver mi conflicto en menos de 5 minutos (me tardé más descargando el SDK de java, no es broma). Les comparto la página y espero les pueda servir si se encuentran en mi caso.

En pocas palabras, lo que hace esta maravilla es eliminar todo registro de algún archivo de tu repositorio en GIT, ya sean archivos enormes, archivos con información sensible, etc.

Esta herramienta es una alternativa más rápida al uso del comando git-filter-branch.

Una vez aplicada la herramienta, pude sincronizar mi repositorio sin problema. Bueno, les dejo la liga y espero les sea de utilidad tanto como lo fue para mí.

https://rtyley.github.io/bfg-repo-cleaner/

Cross-Post: http://amiagencia.com/es/blog/tecnologia/git-de-vida-o-muerte/