No se puede encontrar .gitconfig en las antiguas confirmaciones de Git
-
20-08-2019 - |
Pregunta
Hace un momento noté que mi archivo .gitconfig era público en mi repositorio. Contiene mis tokens secretos.
I git-add -u
el archivo y confirmado. No estoy seguro de si este comando también elimina el archivo de las confirmaciones anteriores.
Quiero estar seguro y buscar el archivo en mis confirmaciones anteriores de modo que no haya tal archivo en mi historial.
¿Cómo puede buscar el archivo en confirmaciones anteriores?
Corro
git filter-branch --tree-filter 'rm .gitconfig' master # Thanks to Greg!
me sale
Rewrite 84dabfa2ea195ce9aad0309216858b302150017c (1/25)rm: .gitconfig: No such file or directory
tree filter failed: rm .gitconfig
El mensaje de error me sugiere que no tengo el archivo en mi historial de confirmación.
¿Hay alguna forma de buscar el archivo en mi historial de confirmación de modo que no necesite ejecutar la eliminación para ver que no tengo el archivo en mi historial de confirmación?
Solución
Respuesta corta:
git filter-branch --tree-filter 'rm -f .gitconfig' master
Tenga en cuenta la -f
.
Respuesta larga:
rm
devolvería un código de retorno distinto de cero cuando el archivo no existe. filter-branch
piensa que esto es un error y detiene la reescritura. Agregar <=> evitar esto.
Nota :
Hay un comando alternativo:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch .gitconfig' master
que es MUCHO más rápido. Este comando está documentado en la sección EJEMPLO de la página del manual.
Otros consejos
Para eliminar un archivo de todo el historial de Git anterior, deberá volver a escribir todas las confirmaciones anteriores utilizando algo como git filter-branch
. Sin embargo, hacer esto hace que su nuevo árbol no se pueda combinar con todos los árboles pasados, así que hágalo con cuidado.
Restablece todas las ewvisions en el repositorio a los valores predeterminados globales (.gitconfig).
git filter-branch -f --commit-filter 'GIT_COMMITTER_NAME="`git config --get user.name`";GIT_AUTHOR_NAME="`git config --get user.name`";GIT_COMMITTER_EMAIL="git config --get user.email";GIT_AUTHOR_EMAIL="`git config --get user.email`";git commit-tree "$@";' HEAD