2014-03-19 7 views
5

Ich verwende oft git log -p <file> oder , um eine umfassende Zusammenfassung der Änderungen in einer Datei oder einem Satz von Dateien zu erhalten. Es gibt einen Verlauf der Commits aus, die sich auf die Dateien auswirken, zusammen mit einem einheitlichen Diff jedes Commits.p4 Befehlszeile entspricht "git log -p"?

Mit Perforce kann ich p4 changes <file> oder p4 changes <directory>/... tun, um eine Liste der Commits zu erhalten. Aber es scheint keine Option zu geben, die entsprechenden Diffs zu zeigen.

Gibt es ein Perforce-Äquivalent, das ich verwenden könnte? Wenn Shell-Skripting erforderlich ist, wäre eine voll funktionsfähige Funktion wünschenswert.

Wenn Sie wollen wissen, warum ich die Funktion vermissen, hier sind ein paar Dinge, die git log -p mich schnell extrem tun können:

  • was war die letzte .cpp Datei geändert werden?
  • Hier finden Sie alle Commits, bei denen die Zeichenfolge FOO zu einer Datei hinzugefügt wurde.
  • eine Funktion wurde gerade veraltet; Womit haben andere Entwickler es ersetzt?
  • im Allgemeinen, nur wissen, was kürzlich in einem bestimmten Verzeichnis passiert ist.
+0

Ist dies, weil Sie Ihr eigenes History-Viewing-Tool erstellen möchten? Warum nicht die Zeitrafferansicht von P4V verwenden? Wunderbares Werkzeug! Wenn Sie Ihr eigenes Werkzeug erstellen möchten, sollten Sie "Änderungen" mit "Beschreiben" kombinieren. Erfahren Sie, wie Sie den getaggten Modus für Ihre Befehle verwenden, oder untersuchen Sie eine der Perforce-Skript-APIs. –

+0

Die Zeitansicht ist ein anständiges Werkzeug, aber es ist nur GUI. Es hat auch sehr begrenzte Suchfunktionen und unterstützt nur jeweils eine Datei. Ich füge ein paar Beispiele hinzu, was 'git log -p' mir hinsichtlich der Nützlichkeit bringt. –

Antwort

4

Hier ist eine vernünftige Annäherung:

p4log() { 
    p4 changes "$1" | awk '{print $2}' | xargs -i p4 describe -du {} | less -F 
} 

Beachten Sie, dass im Gegensatz zu git log -p ein Argument zwingend ist. Sie können ein Muster wie p4log ... geben, um es gegen alles unter dem aktuellen Verzeichnis rekursiv auszuführen.

Einzelheiten

p4 changes "$1": Lassen Sie sich einzeilige Änderung Zusammenfassungen (jüngste bis älteste) für Dateien, die von dem Muster übereinstimmt.

awk '{print $2}': Die Änderungsnummer extrahieren.

p4 describe -du CHANGE [$CHANGE2 etc]: Geben Sie die vollständige Änderungsbeschreibung und die Diffs aus. Der -du gibt das vereinheitlichte Diff-Format an, das dem Diff-Format von git am nächsten ist.

xargs -i p4 describe -du {}: Führen Sie den Befehl describe mit allen Änderungsnummern als Argumente aus.

less -F: Seite, wenn länger als ein Bildschirm, andernfalls zum Terminal ausgeben. Git pumpt die meisten seiner Ausgabe durch weniger -F standardmäßig