Git es una herramienta asombrosa, y que ciertamente cambió la forma en que desarrollamos software, y la llegada de Github años atrás cambió la forma en que compartimos nuestros desarrollos.
Pero - siempre hay un pero - al hacer nuestro código fuente público, es fácil caer en ciertos errores o problemas relacionados con información sensible.
¿Cuántas veces has agregado a un commit y subido al repositorio un archivo que se supone no debería ser público?
Y si esto te ha pasado, sabes que no sólo sirve eliminar el archivo en un nuevo commit, ya que git
almacena todo el historial de tu repositorio, lo que permite el acceso al achivo de igual manera.
sponsor
Tu producto o servicio podría estar aquí
Entonces, ¿Cómo eliminas totalmente esta información?
Lo que realmente quieres es, re-escribir la historia de tu repositorio para así eliminar toda referencia a dicho archivo.
Para esto necesitas:
- Encontrar la ubicación o “path” del archivo dentro del repositorio
- Recorrer cada branch y commit
- Eliminar el archivo en cada branch
Supongamos que quieres remover un archivo .env
que agregaste por equivocación, y este se encuentra en el directorio web/.env
.
En tu terminal, en el directorio root de tu repositorio ejecuta:
$ git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch ./web/.env" HEAD
Al ejecutar esta operaicón verás que en la terminal se mostrará un mensaje indicando que esta herramienta podría traer algunos problemas (hasta ahora no he notado ninguno)
WARNING: git-filter-branch has a glut of gotchas generating mangled history
rewrites. Hit Ctrl-C before proceeding to abort, then use an
alternative filtering tool such as 'git filter-repo'
(https://github.com/newren/git-filter-repo/) instead. See the
filter-branch manual page for more details; to squelch this warning,
set FILTER_BRANCH_SQUELCH_WARNING=1.
En este mensaje se indica que existe una herramienta alternativa llamada filter-repo
que puedes encontrar en github
Una vez instalada (puedes usar brew
para macOS o pip
) puedes utilizarla con el siguiente comando en tu terminal
$ git filter-repo --path ./web/.env --invert-paths
Después de esta operación puedes actualizar tu repositorio remoto
$ git push --all -f
😃 Thanks for reading!
Did you like the content? Found more content like this by joining to the Newsletter or following me on Twitter