Für die Suche nach commit Inhalt (dh tatsächliche Linien der Quelle, im Gegensatz zu Nachrichten zu begehen und dergleichen), was Sie tun müssen:
git grep <regexp> $(git rev-list --all)
git rev-list --all | xargs git grep <expression>
funktioniert, wenn der Fehler "Argumentliste zu lang" auftritt.
Wenn Sie die Suche auf einen Teilbaum beschränken möchten (z. B. "lib / util"), müssen Sie diesen an den rev-list
Unterbefehl übergeben und grep
außerdem:
git grep <regexp> $(git rev-list --all -- lib/util) -- lib/util
Dies durchsucht Ihren gesamten Commit-Text nach regexp
.
Der Grund für die Übergabe des Pfads in beiden Befehlen liegt darin, dass rev-list
die Revisionsliste zurückgegeben wird, in der alle Änderungen vorgenommen wurdenlib/util
Sie müssen jedoch auch an übergeben, grep
damit nur gesucht wird lib/util
.
Stellen Sie sich folgendes Szenario vor: grep
Möglicherweise finden Sie dasselbe <regexp>
in anderen Dateien, die in derselben Revision enthalten sind, die von zurückgegeben wurde rev-list
(auch wenn diese Datei in dieser Revision nicht geändert wurde).
Hier sind einige andere nützliche Möglichkeiten zum Durchsuchen Ihrer Quelle:
Suchen Sie im Arbeitsbaum nach Text, der dem regulären Ausdruck für reguläre Ausdrücke entspricht:
git grep <regexp>
Durchsuchen Sie den Arbeitsbaum nach Textzeilen, die dem regulären Ausdruck regexp1 oder regexp2 entsprechen:
git grep -e <regexp1> [--or] -e <regexp2>
Durchsuchen Sie den Arbeitsbaum nach Textzeilen, die mit den regulären Ausdrücken regexp1 und regexp2 übereinstimmen, und melden Sie nur Dateipfade:
git grep -l -e <regexp1> --and -e <regexp2>
Durchsuchen Sie den Arbeitsbaum nach Dateien, deren Textzeilen mit dem regulären Ausdruck regexp1 und den Textzeilen mit dem regulären Ausdruck regexp2 übereinstimmen:
git grep -l --all-match -e <regexp1> -e <regexp2>
Durchsuchen Sie den Arbeitsbaum nach geänderten Textzeilen-Übereinstimmungsmustern:
git diff --unified=0 | grep <pattern>
Durchsuchen Sie alle Revisionen nach Text, der dem regulären Ausdruck regulärer Ausdrücke entspricht:
git grep <regexp> $(git rev-list --all)
Durchsuchen Sie alle Revisionen zwischen rev1 und rev2 nach Text, der dem regulären Ausdruck regulärer Ausdrücke entspricht:
git grep <regexp> $(git rev-list <rev1>..<rev2>)
git log -S
und Schuld) * [Spaß mit "git log --grep"] [2] (Suche nach Commit-Nachrichten) ) * [Spaß mit "git grep"] [3] [2]: gitster.livejournal.com/30195.html [3]: gitster.livejournal.com/27674.html