Wie kann ich mit Git in allen Dateien in allen lokalen Zweigen nach einer bestimmten Zeichenfolge suchen?
GitHub-spezifisch: Ist es möglich, die obige Suche in allen GitHub-Zweigen durchzuführen? (Es gibt mehrere Remote-Zweige in meinem Remote-GitHub-Repository, die ich im Idealfall für diese Suche nicht herunterfahren müsste ...)
Antworten:
Sie können dies in einem Git-Repository tun:
Die erweiterte GitHub-Suche bietet Code-Suchfunktionen:
Bei der Codesuche wird der gesamte auf GitHub öffentlich gehostete Code durchsucht. Sie können auch filtern nach:
language:
repo:
path:
quelle
git grep ...
. Schauen Sie sich die anderen Antworten an, sie sind weitaus besser als diese, obwohl sie als akzeptierte Antwort markiert sind!path:
weil die Dokumentation auf einen Blick nicht klar ist, wo dieser Filter angewendet werden soll. Ich gehe davon aus, dass er vor den Anführungszeichen in Ihrem Abfragebeispiel steht.Wenn Sie den Befehl @manojlds Git grep verwenden und eine Fehlermeldung erhalten:
dann solltest du xargs verwenden :
Siehe auch So suchen Sie nach festgeschriebenem Code im Git-Verlauf
quelle
In vielen Fällen
git rev-list --all
kann eine große Anzahl von Commits zurückgegeben werden, deren Scan ewig dauert. Wenn Sie nicht jedes Commit für jeden Zweig in Ihrem Repository-Verlauf durchsuchen möchten, sondern nur alle Zweigstellentipps durchsuchen möchten, können Sie ihn durch ersetzengit show-ref --heads
. Also insgesamt:oder:
Tipp: Sie können eine Ausgabe in eine Datei schreiben, um sie in einem Editor anzuzeigen:
quelle
git show-ref --heads
listet den Hash und den Ref-Namen auf, damit er (2. Zeile) zweimal sucht. Diesgit show-ref --heads | cut -d' ' -f2
ist besser, da nur die Ref-Namen aufgelistet werden.git show-ref --heads -s
gibt nur den SHA1-Hash aus. Wenn mehrere Zweige auf dasselbe Commit verweisen, werden Duplikate angezeigt. Sie können sie mit entfernensort -u
, wie sogit show-ref --heads -s | sort -u | xargs git grep ...
function gsearch { git grep $1 $(git show-ref --heads) | grep "refs/heads" | grep $1 } # last grep to keep grep color highlight
Es gibt einige Probleme mit den hier aufgeführten Lösungen (sogar akzeptiert).
Sie müssen nicht alle Hashes auflisten, da Sie Duplikate erhalten. Außerdem dauert es länger.
Darauf aufbauend können Sie eine Zeichenfolge
"test -f /"
in mehreren Zweigenmaster
unddev
als suchendas ist das gleiche wie
Also los geht's.
Dies findet die Hashes für die Spitze aller lokalen Zweige und sucht nur in diesen Commits:
Wenn Sie auch in Remote-Filialen suchen müssen, fügen Sie Folgendes hinzu
-a
:Des Weiteren:
quelle
git branch -a | cut -c3- | cut -d' ' -f 1 | xargs git grep "string"
oder es wird mit->
Symbol in derSie können dies versuchen:
quelle
git log --all -s"search_string"