Cerca tutta la cronologia Git per una stringa?

Ho una base di codice che voglio inviare a GitHub come open source. In questo albero dei sorgenti controllato da git, ho alcuni file di configurazione che contengono password. Ho fatto in modo di non tracciare questo file e l’ho anche aggiunto al file .gitignore . Tuttavia, voglio essere assolutamente positivo sul fatto che non verranno trasmesse informazioni sensibili, forse se qualcosa si infiltra tra un commit o qualcosa del genere. Dubito che sia stato abbastanza negligente da fare questo, ma voglio essere positivo .

C’è un modo per “grep” tutto git? So che sembra strano, ma per “tutti” credo intendo ogni versione di file che sia mai stata. Immagino se c’è un comando che scarica il file diff per ogni commit, che potrebbe funzionare?

Git può cercare diff con l’opzione -S (si chiama pickaxe nei documenti )

 git log -Spassword 

Questo troverà qualsiasi commit che ha aggiunto o rimosso la password della stringa. Ecco alcune opzioni:

  • -p : mostrerà i diff. Se fornisci un file ( -p file ), genererà una patch per te.
  • -G : cerca le differenze la cui riga aggiunta o rimossa corrisponde alla regexp data, al contrario di -S , che “cerca le differenze che introducono o rimuovono un’istanza di stringa”.
  • --all : ricerche su tutti i rami e tag; in alternativa, usa --branches[=] o --tags[=]
 git rev-list --all | ( while read revision; do git grep -F 'password' $revision done ) 

Prova i seguenti comandi per cercare la stringa all’interno di tutti i precedenti file tracciati:

 git log --patch | less +/searching_string 

o

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

che deve essere eseguito dalla directory principale in cui si desidera eseguire la ricerca.