it-swarm.com.de

Wie grep Git-Comms oder Inhalte für ein bestimmtes Wort?

In einem Git-Code-Repository möchte ich alle Commits auflisten, die ein bestimmtes Word enthalten. Ich habe es versucht

git log -p | grep --context=4 "Word"

aber es gibt nicht unbedingt den Dateinamen zurück (es sei denn, es sind weniger als 5 Zeilen von dem gesuchten Wort entfernt. Ich habe es auch versucht.)

git grep "Word"

aber es gibt mir nur anwesende Dateien und nicht die Geschichte.

Wie kann ich den gesamten Verlauf durchsuchen, um Änderungen an einem bestimmten Wort zu verfolgen? Ich meine meine Codebasis nach Vorkommen von Word durchsuchen, um Änderungen aufzuspüren (Suche im Dateiverlauf).

529

Wenn Sie alle Commits finden möchten, in denen commit message das angegebene Word enthält, verwenden Sie

$ git log --grep=Word

Wenn Sie alle Commits finden möchten, bei denen "Word" im Inhalt der Datei hinzugefügt oder entfernt wurde (genauer: Wo sich die Anzahl der Vorkommen von "Word" geändert hat), suchen Sie den Inhalt des Befehls commit , Verwenden Sie die sogenannte "Spitzhacke" -Suche mit

$ git log -Sword

Im modernen Idiot gibt es auch

$ git log -Gword

nach Unterschieden suchen , deren hinzugefügte oder entfernte Zeile mit "Word" übereinstimmt (auch Commit-Inhalt ).

Beachten Sie, dass -G standardmäßig einen regulären Ausdruck akzeptiert, während -S eine Zeichenfolge akzeptiert, die aber geändert werden kann, um reguläre Ausdrucke mit dem --pickaxe-regex zu akzeptieren.

Um den Unterschied zwischen -S<regex> --pickaxe-regex und -G<regex> zu veranschaulichen, betrachten Sie ein Commit mit dem folgenden Unterschied in derselben Datei:

+    return !regexec(regexp, two->ptr, 1, &regmatch, 0);
...
-    hit = !regexec(regexp, mf2.ptr, 1, &regmatch, 0);

Während git log -G"regexec\(regexp" dieses Commit anzeigt, wird git log -S"regexec\(regexp" --pickaxe-regex dies nicht tun (da sich die Anzahl der Vorkommen dieser Zeichenfolge nicht geändert hat).

777
Jakub Narębski

git logs Spitzhacke findet Commits mit Änderungen einschließlich "Word" mit git log -Sword

246
u0b34a0f6ae

Nach langem Experimentieren kann ich Folgendes empfehlen: Commits, die Zeilen mit einem bestimmten Regex einführen oder entfernen, und jeweils die Textänderungen mit jeweils hinzugefügten und entfernten Wörtern. 

git log --pickaxe-regex -p --color-words -S "<regexp to search for>"

Es dauert eine Weile, bis er rennt ... ;-)

14
CharlesW

Eine weitere Möglichkeit/Syntax ist: git log -S "Word"
So können Sie beispielsweise nach git log -S "with whitespaces and stuff @/#ü !" suchen

7
1u-

Sie können den folgenden Befehl versuchen:

git log --patch --color=always | less +/searching_string

oder grep auf folgende Weise verwenden:

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

Führen Sie diesen Befehl in dem übergeordneten Verzeichnis aus, in dem Sie suchen möchten.

7
kenorb

So verwenden Sie den booleschen Connector für reguläre Ausdrücke:

git log --grep '[0-9]*\|[a-z]*'

Dieser reguläre Ausdruck sucht nach regulären Ausdrücken [0-9] * oder [a-z] * in Commit-Nachrichten.

2
Reudismam

vim-flugitive ist für diese Art der Untersuchung in Vim vielseitig. 

Verwenden Sie dazu :Ggrep. Für weitere Informationen können Sie vim-flugitive installieren und das Turorial mit :help Grep nachschlagen. Und diese Episode: Erkundung der Geschichte eines git-Repository führt Sie dazu, all das zu tun.

2
lerner

Wenn Sie nach sensiblen Daten suchen möchten, um sie aus Ihrer Git-Historie zu entfernen (weshalb ich hier gelandet bin), gibt es dafür Werkzeuge. Github als eine dedizierte Hilfeseite für diese Ausgabe

Hier ist der Kern des Artikels: 

Der BFG Repo-Cleaner ist eine schnellere, einfachere Alternative zu git filter-branch zum Entfernen unerwünschter Daten. Um zum Beispiel Ihre Datei mit vertraulichen Daten zu entfernen und Ihr aktuelles Commit unangetastet zu lassen, führen Sie Folgendes aus:

bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA

Führen Sie Folgendes aus, um den gesamten in passwords.txt aufgeführten Text zu ersetzen, wo auch immer er im Verlauf Ihres Repositorys zu finden ist:

bfg --replace-text passwords.txt

Informationen zur vollständigen Verwendung und zum Herunterladen finden Sie in der Dokumentation zu BFG Repo-Cleaner .

0
edelans