Ich habe mich umgesehen und bin mir nicht sicher, ob dies möglich ist, aber hier ist:
Ich habe eine (Javascript-) Datei (z. B. /lib/client.js), in der einer Variablen eine eindeutige Kennung zugewiesen ist:
var identifier = "SOME_IDENTIFIER";
Sie können sich den Bezeichner wie eine Versionsnummer vorstellen: In regelmäßigen Abständen ändern wir diese Variable in einen neuen Bezeichner.
Ich möchte alle eindeutigen Kennungen finden, die wir jemals verwendet haben. Wie kann ich das mit git machen?
Ich kann mir vorstellen, dass es eine Möglichkeit gibt, den Git-Verlauf zu durchsuchen und den Zeilenabgleich auszudrucken "var identifier ="
. Ich könnte diese Liste manuell löschen.
Jedenfalls würde ich mich über jeden Einblick hier freuen. Vielen Dank.
Antworten:
Seit Git 1.8.4 gibt es eine direktere Möglichkeit, Ihre Frage zu beantworten.
Angenommen, diese Zeile
110
ist die Zeile, die sagtvar identifier = "SOME_IDENTIFIER";
, dann tun Sie dies:Dies gibt jedes Commit zurück, das diese Codezeile berührt hat.
[ Git-Dokumentation (siehe Befehlszeilenparameter "-L")]
quelle
Siehe die Manpage für
git-log
undgitdiffcore
. Ich glaube, dieser Befehl würde es tun, aber es könnte nicht ganz richtig sein:BEARBEITEN: Hier ist ein grober Anfang für ein Bash-Skript, um die tatsächlichen Zeilen anzuzeigen. Dies könnte mehr sein, wonach Sie suchen.
Es wird verwendet
git log -G
, um die interessanten Commits--format=%H
zu finden und eine Liste von Commit-Hashes zu erstellen. Anschließend wird jedes interessante Commit wiederholtgit grep
, wobei die Zeilen aus diesem Commit und der Datei angezeigt werden, die den regulären Ausdruck enthalten, dem der Commit-Hash vorangestellt ist.BEARBEITEN: Geändert zur Verwendung
-G
anstelle der-S
in den Kommentaren vorgeschlagenen.quelle
sfile=path/to/some_file; sfind='string_to_find'; for c in $(git log -G $sfind --format=%H -- $sfile); do git --no-pager grep -e $sfind -n $c -- $sfile; echo; done
Sie können dies auch mit gitk tun:
Wählen Sie in der Dropdown-Liste "Festschreiben" die Option "Zeichenfolge hinzufügen / entfernen:" und geben Sie im Textfeld daneben "var identifier =" ein. Alle Festschreibungen, die Zeilen hinzufügen oder entfernen, die diese Zeichenfolge enthalten, werden hervorgehoben.
quelle
git blame file.js
odergit gui blame file.js
?git gui blame file.js
wird das tun ... es zeigt Ihnen alle Revisionen einer Datei und wer sie geändert hat; Sie können einfach rückwärts durch den Verlauf klicken.Wenn Sie die Antwort von @ rob nur ein wenig anpassen,
git log
wird dies im Grunde genommen für Sie erledigt, wenn Sie nur einen visuellen Vergleich benötigen:-U0
bedeutet Ausgabe im Patch-Modus (-p
) und zeigt keine Kontextlinien um den Patch.Sie können dies sogar branchenübergreifend tun:
Es gibt vielleicht eine Möglichkeit, den Diff-Header zu unterdrücken, aber ich kenne keine.
quelle
In magit können Sie dies mit tun
Sie werden dann nach Datei und Start- und Endzeilen gefragt.
quelle