Per cercare contenuti di commit (ovvero, righe di origine effettive, anziché messaggi di commit e simili), devi fare:
git grep <regexp> $(git rev-list --all)
git rev-list --all | xargs git grep <expression>
funzionerà se si verifica un errore "Elenco argomenti troppo lungo".
Se si desidera limitare la ricerca a qualche sottostruttura (ad esempio "lib / util"), sarà necessario passarla al rev-list
sottocomando e grep
anche:
git grep <regexp> $(git rev-list --all -- lib/util) -- lib/util
Questo verrà visualizzato in modo rapido attraverso tutto il testo di commit per regexp
.
Il motivo del passaggio del percorso in entrambi i comandi è perché rev-list
restituirà l'elenco delle revisioni in cui sono lib/util
avvenute tutte le modifiche , ma è anche necessario passare in grep
modo che esegua solo la ricerca lib/util
.
Immagina solo il seguente scenario: grep
potrebbe trovare lo stesso <regexp>
su altri file contenuti nella stessa revisione restituiti da rev-list
(anche se su quella revisione non sono state apportate modifiche a quel file).
Ecco alcuni altri modi utili per cercare la tua fonte:
Cerca albero di lavoro per il testo corrispondente all'espressione regolare regexp:
git grep <regexp>
Cerca nella struttura di lavoro le righe di testo corrispondenti all'espressione regolare regexp1 o regexp2:
git grep -e <regexp1> [--or] -e <regexp2>
Cerca nella struttura di lavoro le righe di testo corrispondenti all'espressione regolare regexp1 e regexp2, riportando solo i percorsi dei file:
git grep -l -e <regexp1> --and -e <regexp2>
Cerca l'albero di lavoro per i file che hanno righe di testo corrispondenti all'espressione regolare regexp1 e righe di testo corrispondenti all'espressione regolare regexp2:
git grep -l --all-match -e <regexp1> -e <regexp2>
Cerca l'albero di lavoro per le righe modificate del modello di corrispondenza del testo:
git diff --unified=0 | grep <pattern>
Cerca in tutte le revisioni il testo corrispondente all'espressione regolare regexp:
git grep <regexp> $(git rev-list --all)
Cerca in tutte le revisioni tra rev1 e rev2 il testo corrispondente all'espressione regolare regexp:
git grep <regexp> $(git rev-list <rev1>..<rev2>)
git log -S
e la colpa) * [Divertimento con "git log --grep"] [2] (ricerca di messaggi di commit ) * [Divertimento con "git grep"] [3] [2]: gitster.livejournal.com/30195.html [3]: gitster.livejournal.com/27674.html