Hace unos días publiqué un artículo referente a como realizar el cifrado de repositorios de Git. Desde luego no se trataba de cifrar todo un repositorio, en tanto en cuanto se trata de compartir código. El objetivo era precisamente compartir código pero cifrando la información sensible. Cualquiera podía pensar, que la solución es no compartir esa información sensible. Sin embargo, en un equipo de trabajo, es necesario compartir también este tipo de información, de forma que ciertos usuarios puedan verla y otros no. Sin embargo, surge un problema. Si este cifrado lo haces cuando ya has subido esa información sin cifrar en algún commit anterior, ya sabes que está disponible para otros usuarios. Solamente tienen que buscar en el historial de Git. Así, en este artículo te voy a comentar una solución para borrar archivos de git.
Borrar archivos de Git
Como te comentaba en la introducción, hay ocasiones en las que has subido algún archivo al repositorio de Git que quieres borrar. Sin embargo, como sabes, que lo borres en git no quiere decir que desaparezca. Simplemente que en el HEAD
no lo ves.
Que no lo veas, no quiere decir que no esté. En la historia está, y alguien con unos mínimos conocimientos de git, puede recuperarlo con facilidad. Basta con hacer un git checkout <ID>
. Tan sencillo como eso.
Ahora bien, no pienses solo que quieres borrar un archivo porque contiene información sensible. La razón puede ser también porque no lo has subido por error, o incluso que es un fichero binario o excesivamente grande, o ambas cosas. Y es que, si en tu repositorio mantienes archivos binarios, pronto te darás cuenta de que este se convierte en algo lento e intratable.
Objetivo borrar archivos de Git
Sea cual sea la razón que te mueve a borrar archivos en Git, lo suyo, es que los borres desde el origen de los tiempos. Es decir, se trata de borrar archivos de Git como si nunca hubieran estado ahí.
La solución es ejecutar la siguiente orden,
git filter-branch --force --index-filter \\
'git rm --cached --ignore-unmatch <archivo-que-quieres-borrar>' \
--prune-empty --tag-name-filter cat -- --all
Posteriormente tendrás que ejecutar la siguiente orden,
git push origin --force --all
Con esta sencilla solución, haces desaparecer el archivo que consideres. Por supuesto, no solo lo haces desaparecer de la rama master
sino también de cualquier otra, como es lógico. Como digo es como si ese archivo nunca hubera existido.
Conclusión
Ten en cuenta que esto no tiene marcha atrás. Una vez lo has borrado ya no podrás recuperarlo, y mejor, porque este era tu objetivo.
Como te comentaba, esta solución es la óptima para combinar con el procedimiento que te comenté en el artículo sobre cifrado de repositorios
Más información,