Pregunta Buscar toda la historia de Git para una cadena? [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Tengo una base de código que quiero enviar a GitHub como código abierto. En este árbol fuente controlado por git, tengo ciertos archivos de configuración que contienen contraseñas. Me aseguré de no seguir este archivo y también lo agregué al .gitignore archivo. Sin embargo, quiero estar absolutamente seguro de que no se empujará información sensible, tal vez si algo se desliza entre compromisos o algo así. Dudo que fui lo suficientemente descuidado para hacer esto, pero quiero ser positivo.

¿Hay alguna forma de "grep" de todos los git? Sé que suena raro, pero por "todo" creo que me refiero a cada versión de archivo que alguna vez fue. Supongo que si hay un comando que vuelca el archivo diff para cada confirmación, ¿podría funcionar?


544
2017-12-17 06:49


origen


Respuestas:


Git puede buscar diffs con la opción -S (se llama pico en los documentos)

git log -Spassword

Esto encontrará cualquier confirmación que haya agregado o eliminado la cadena password. Aquí algunas opciones:

  • -p: mostrará los diffs. Si proporciona un archivo (-p file), generará un parche para ti.
  • -G: busca las diferencias cuya línea agregada o eliminada coincide con la expresión regular dada, a diferencia de -S, que "busca diferencias que introducen o eliminan una instancia de cadena".
  • --all: busca en todas las ramas y etiquetas; alternativamente, use --branches[=<pattern>] o --tags[=<pattern>] 

850
2017-12-17 15:57



git rev-list --all | (
    while read revision; do
        git grep -F 'password' $revision
    done
)

71
2017-12-17 06:58



Pruebe los siguientes comandos para buscar la cadena dentro de todos los archivos rastreados anteriormente:

git log --patch  | less +/searching_string

o

git rev-list --all | GIT_PAGER=cat xargs git grep 'search_string'

que debe ejecutarse desde el directorio principal donde desea realizar la búsqueda.


20
2018-06-03 15:07