Mit der Befehlszeile git, wie kann ich git dazu bringen eine Liste der Dateien anzuzeigen, die im Repository verfolgt werden?
Antworten
Zu viele Anzeigen?Wenn Sie alle Dateien auflisten möchten, die derzeit unter dem Zweig master
verfolgt werden, könnten Sie diesen Befehl verwenden:
git ls-tree -r master --name-only
Wenn Sie eine Liste der Dateien möchten, die jemals existiert haben (d. h. einschließlich gelöschter Dateien):
git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'
Die akzeptierte Antwort zeigt nur Dateien im Verzeichnisbaum des aktuellen Verzeichnisses an. Um alle verfolgten Dateien anzuzeigen, die committed wurden (im aktuellen Branch), verwenden Sie
git ls-tree --full-tree --name-only -r HEAD
--full-tree
lässt den Befehl so laufen, als wären Sie im Stammverzeichnis des Repositories.-r
rekursiviert in Unterverzeichnisse. In Kombination mit--full-tree
erhalten Sie alle committeden, verfolgten Dateien.--name-only
entfernt SHA / Berechtigungsinformationen, wenn Sie nur die Dateipfade möchten.HEAD
gibt an, für welchen Branch Sie die Liste der verfolgten, committeden Dateien haben möchten. Sie könnten dies aufmaster
oder einen anderen Branch-Namen ändern, aberHEAD
ist der Commit, den Sie gerade ausgecheckt haben.
Dies ist die Methode aus der akzeptierten Antwort auf die ~doppelte Frage https://stackoverflow.com/a/8533413/4880003.
Sie möchten möglicherweise eine farbige Ausgabe damit haben.
Ich verwende diesen Einzeiler, um die verfolgten Dateien und Verzeichnisse im aktuellen Verzeichnis des aktuellen Branches aufzulisten:
ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)
Sie möchten es vielleicht als Alias hinzufügen:
alias gl='ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)'
Wenn Sie Dateien rekursiv auflisten möchten:
'ls' --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)
Und ein Alias:
alias glr="'ls' --color=auto -d \$(git ls-tree -rt \$(git branch | grep \\* | cut -d \" \" -f2) --name-only)"
Basierend auf den vorhandenen Antworten können Sie tree
verwenden, um es etwas hübscher anzusehen:
git ls-tree --full-tree --name-only -r HEAD | tree --fromfile .
Sie möchten dies wahrscheinlich paginieren:
git ls-tree --full-tree --name-only -r HEAD | tree -C --fromfile . | ${PAGER:-less}
Das verdient auf jeden Fall einen Platz als tree
Alias in der Git-Konfiguration :)