En determinadas circunstancias es necesario eliminar o sobrescribir determinada información del historial de Git. Por ejemplo cuando se han subido ficheros con contraseñas en el código fuente, estos ficheros al ser sobrescritos por otros con la corrección no contendrán datos sensibles, pero si se mantendrán dentro del historial de Git.
La forma más simple de sustituir un determinado texto por otro en el historial de Git es utilizando BFG Repo-Cleaner.
BFG Repo-Cleaner: http://rtyley.github.io/bfg-repo-cleaner/
Como dependencia solo necesita java, pero no funcionará con versiones antiguas, estos son los pasos para hacerlo funcionar en Centos 6.x.
yum remove java_cup-0.10k-5.el6 java-1.5.0-gcj-1.5.0.0-29.1 curl -L "http://javadl.sun.com/webapps/download/AutoDL?BundleId=87436" --output "jre-7u55-linux-x86_64.rpm" rpm -ihv jre-7u55-linux-x86_64.rpm
Creamos un fichero passwords.txt con las cadenas de texto que se desean sustituir, si no se especifica ninguna se utilizará REMOVED como se puede ver en la parte inferior del artículo.
Contenido del archivo passwords.txt.
Kj+hgFr 12345
Utilizando bfg para eliminar los datos sensibles del historial Git.
git clone --mirror http://usuario@dominio.com/scm/lnxadm/prueba.git java -jar bfg-1.11.6.jar --replace-text passwords.txt prueba.git cd prueba.git git push
Resultado final
Lo que muestra el historial.
# perl deadlock-logger -u dlmonitor -pKj+hgFr -h db08.dominio.com --dest u=root,p=12345,D=dba_util,t=deadlocks,h=localhost --pid /var/run/deadlock-logger.pid
Después de utilizar Bfg.
# perl deadlock-logger -u dlmonitor -p***REMOVED*** -h db08.dominio.com --dest u=root,p=***REMOVED***,D=dba_util,t=deadlocks,h=localhost --pid /var/run/deadlock-logger.pid
Buscar texto dentro de todo el historial de Git.
git log -p | grep --color -i "\*\*\*REMOVED\*\*\*"