2013-01-07 8 views
16

Nach langer Suche habe ich keine zufriedenstellende Methode gefunden, die einfach zu verwenden ist, um den vollständigen Verlauf einer verschobenen Datei in Git und vor allem in Gitk anzuzeigen. Die Verwendung von "git log --follow [filePath]" und sogar "gitk --follow [filePath]" gibt Ihnen die Commits, an denen die Datei beteiligt war, zeigt jedoch nicht den tatsächlichen Änderungsverlauf der Datei vor dem Verschieben an. Ich habe daher eine grobe, aber einfache Lösung gefunden.Verwenden von gitk zum Anzeigen des vollständigen Verlaufs einer verschobenen Datei

  1. Machen Sie eine gitk auf die Datei, die verschoben wurde: "gitk [newFilePath]". Kopieren Sie die SHA1-ID des ersten Commits, dies sollte das Commit sein, bei dem die Datei verschoben wurde.
  2. Machen Sie einen gitk auf der kopierten SHA1 ID: "gitk [SHA1ID]". Der letzte Commit sollte erfolgen, wenn der Umzug stattgefunden hat. Suchen Sie die verschobene Datei und kopieren Sie den alten Pfad.
  3. Führen Sie eine gitk auf der SHA1-ID wir nur kopiert und der alte Pfaddatei: „gitk [SHA1ID] - [oldFilePath]“

Dieser Prozess ermöglicht es Ihnen, die Geschichte der Datei, bevor die sehen Bewegung. Wenn mehrere Züge stattgefunden haben, kann der obige Vorgang wiederholt werden.

Wenn es bessere Lösungen für dieses Problem sind, vor allem, wenn es einen Weg gibt, diese Schritte zu kombinieren, um die vollständige Geschichte mit den Bewegungen angezeigt werden, wäre es sehr geschätzt werden.

git log -p --follow [file/with/path] 

Antwort

7

Wenn Sie möchten, um die Änderungen zu sehen, die in jedem Commit auch die Datei umbenannt wurde gemacht wurde, können Sie die Option -p von git log verwenden einer Datei (mit gitk) in all seinen Inkarnationen ... ich werde es als Übung dem Leser überlassen, wenn sie es für eine andere Shell benötigen:

# bash 
gitk_follow() { 
    while (("$#")); do 
    git log --oneline --name-status --follow $1; 
    shift; 
    done | perl -ne 'if(s{^(?:[ACDMRTUXB]|R\d+)\s+}{}) { s{\s+}{\n}g; print; }' | sort -u 
} 

# used as: 
gitk $(gitk_follow some_file) 

aktualisiert:

Geändert, um Perl zu verwenden, weil ich der Ausgabe von git log in der letzten Version nicht genügend Aufmerksamkeit geschenkt habe.

+0

Dies ist eine ausgezeichnete Lösung! Ich habe noch nie gesehen, dass die Lösung eines anderen Benutzers die Option -p mit "git log --follow" vorher verwendet.Es wäre besser, es in gitk zu sehen, aber ich werde definitiv diese Methode verwenden! –

+0

Wenn Sie (immer noch) nach einer GUI Möglichkeit suchen, dies zu tun - versuchen Sie SourceTree (Link in meiner Antwort) – Chris

3

Hier ist eine bash-Funktion, die Ihnen die Geschichte zeigen sollte:

+0

Sehr schön, danke! Ich musste es jedoch mit einem '-' verwenden: 'gitk - $ (gitk_follow some_file)'. –

0

Eine weitere Alternative ist die SourceTree Anwendung (GUI) von Atlassian entwickelt zu verwenden. Innerhalb der Anwendung können Sie auf der Datei mit der rechten Maustaste und wählen „Selected Anmelden ...“

Log Selected.

im Pop-up-Fenster ermöglicht es Ihnen, dann auf „umbenannten Dateien Follow“:

enter image description here

Ich benutze GitHub for Mac auch, aber noch da drin nicht diese Art von Funktionalität zu sehen.

(Ich bin nicht mit einer von ihnen angeschlossen!)

+0

gibt es dafür keine Linux-Variante? –

0

Eine einfachere Funktion verschiedene git log Optionen und awk mit den Dateinamen, genaue (und die „-“ dass gitk Bedürfnisse ist im Preis inbegriffen):

# bash 
gitk_follow() { 
    while (("$#")); do 
    git log --pretty="" --name-status --follow $1; 
    shift; 
    done | awk '{print $NF}' | sort -u 
} 

# used as: 
gitk -- $(gitk_follow some_file)