2016-08-05 14 views
5

Ich möchte eine Liste aller Dateien in meinem Zweig erhalten, vorzugsweise in einer Baumansicht, zusammen mit dem Hash des Commits, in dem sie zuletzt geändert wurden (dh nicht der Hash der Datei selbst, sondern der Commit). Gibt es einen ordentlichen Git-Befehl, oder muss ich wirklich durch das Protokoll kriechen?git: listet alle Dateinamen und die Hashes ihres letzten Commits auf

Diese Frage How do I find the most recent git commit that modified a file? verwandt, aber ich möchte eine Liste aller Dateien erhalten, zum Beispiel:

6f88a51 abc.h 
3f5d6fb abc.cpp 
3f5d6fb bcd.h 
1964be2 bcd.cpp 
... 
+0

Wie wäre es 'git log - '? – Shravan40

Antwort

1

Befehl:

$ git ls-files -z \ | GIT_PAGER= xargs -0 -L1 -I'{}' git log -n 1 --format="%h {}" -- '{}' f5fe765 LICENSE 0bb88a1 README.md 1db10f7 example/echo.go e4e5af6 example/echo_test.go ...

Hinweise:

  • git ls-files listet alle Dateien rekursiv git hinzugefügt (im Gegensatz zu find schließt es untracked Dateien und .git)
  • xargs -L1 ausführt Befehl für jedes Eingabeargument angegeben (Dateinamen)
  • xargs -I{} ermöglicht Substitution von {} Symbol mit Eingabeargument (Dateiname)
  • Verwendung git ls-files -z und xargs -0 Änderungen delimiter aus \n zu \0, potentiellen Problemen mit weißen Räumen in zu vermeiden
  • Dateinamen
  • Clearing GIT_PAGER verhindert git log von ihm kochend ist Ausgabe an less
+0

arigato, sehr nett! blue112 Lösung funktioniert auch gut, aber ich finde deine besser –

2
for i in $(find -type f | grep -v '.git'); 
    do echo -n "$i - "; 
    git log --pretty="format:%h" -1 $i | cat; 
    echo; 
done 

, die den Trick tun sollten, auf bash

+0

danke, gibt mir auch, was ich will, aber ich mochte gavvs Lösung besser, da es eleganter ist –

0

Sie einfach verwenden können Der ls-tree-Befehl

git ls-tree HEAD 

Dies zeigt Ihnen die neuesten Dateien mit ihren Hashes.

enter image description here

+1

Das ist falsch. Es zeigt die SHA-1 der Blobs und Trees (die OP explizit angegeben hat, die er nicht will) anstelle des SHA-1 des letzten Commits, das die Dateien berührte. – Alderath

+0

@Alderath hat Recht, es zeigt Datei Hashes, nicht Commit Hashes. Außerdem werden Verzeichnisse nicht rekursiv gedruckt. – gavv

+0

Obwohl dies nicht erwartet wird, könnte git ls-tree -r HEAD alle Blobs in der HEAD-Struktur anzeigen. – ElpieKay