Hace algunas semanas, accidentalmente cometí un archivo de configuración que contenía algunas contraseñas y lo inserté en un control remoto de GitLab gestionado por mi empresa.
Después de eso utilicé BFG Repo-Cleaner para eliminar las contraseñas del historial.
Después de la limpieza ejecuté:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push --force
He visto que se han cambiado los hashes de confirmación y se han eliminado datos confidenciales (puedo ver que tanto utilizando la interfaz web de GitLab como explorando un nuevo clon del repositorio).
Sin embargo, si accedo a una de las páginas antiguas que llaman directamente a la URL ( https://<my-company>/gitlab/test-bfg/commit/<theoretically-unexisting-hash>
), puedo ver un gitdiff de una confirmación que contiene las contraseñas. Descubrí esto accidentalmente, navegando en el historial del navegador.
Si trato de verificar el mismo hash en el repositorio recién clonado, obtengo este mensaje:
fatal: reference is not a tree: d7fb999c...
Entonces, si una persona clona ese repositorio de GitLab I pienso no puede ver ese commit *, sin embargo, todavía es visible desde la interfaz web, si uno pudiera adivinar un antiguo hash.
* De todos modos, me sentiría más cómodo leyendo did not match any file(s) known to git
en lugar de reference is not a tree
.
No creo que este sea un tipo de problema de caché, porque lo intenté nuevamente después de algunas horas.
Entonces, las preguntas son:
- ¿Por qué sucede esto? ¿Estoy usando las herramientas de manera incorrecta?
- ¿Hay algunas formas de ver los hashes ocultos?
- ¿Alguna vez experimentó esto, tal vez usando diferentes sistemas (GitHub, BitBucket)?
Muchas gracias.