Wie kann man alle Dateien in einer Übertragung auflisten?

Ich bin auf der Suche nach einem einfachen git-Befehl, der eine schön formatierte Liste aller Dateien liefert, die Teil des Commits waren, angegeben durch einen Hash (SHA1), ohne fremde Informationen.

Ich habe es versucht:

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

Er listet zwar die Dateien auf, enthält aber auch unerwünschte Diff-Informationen für jede Datei.

Gibt es einen anderen git-Befehl, der nur die gewünschte Liste liefert, so dass ich es vermeiden kann, sie aus der git show-Ausgabe zu parsen?

Lösung

Bevorzugter Weg (weil es sich um einen klempnerischen Befehl handelt, der programmatisch sein soll):

$ git diff-tree --no-commit-id --name-only -r bd61ad98
index.html
javascript/application.js
javascript/ie6.js

Anderer Weg (weniger bevorzugt für Skripte, da es sich um einen Porzellan-Befehl handelt; gedacht für die Benutzeroberfläche)

$ git show --pretty="" --name-only bd61ad98    
index.html
javascript/application.js
javascript/ie6.js

  • Das Argument --no-commit-id unterdrückt die Ausgabe der Commit-ID.
  • Das Argument --pretty gibt einen leeren Formatstring an, um den Schrott am Anfang zu vermeiden.
  • Das Argument --name-only zeigt nur die Dateinamen an, die betroffen waren (Danke Hank). Verwenden Sie stattdessen --name-status, wenn Sie sehen wollen, was mit jeder Datei passiert ist (Dgeloescht, Mgeaendert, Ahinzugefuegt)
  • Das Argument "r" dient dazu, in Unterbäume zu rekursieren.
Kommentare (24)

Ich nehme einfach mal an, dass gitk dafür nicht erwünscht ist. In diesem Fall versuchen Sie git show --name-only.

Kommentare (3)

Eine Kombination aus "git show --stat" (danke Ryan) und ein paar sed-Befehlen sollte die Daten für Sie kürzen:

git show --stat  | sed -n "/ [\w]\*|/p" | sed "s/|.\*$//"

Das wird nur die Liste der geänderten Dateien ausgeben.

Kommentare (0)