Wie kann ich mithilfe der Befehlszeile git eine Liste der Dateien anzeigen lassen, die im Repository verfolgt werden?
Wie kann ich mithilfe der Befehlszeile git eine Liste der Dateien anzeigen lassen, die im Repository verfolgt werden?
Antworten:
Wenn Sie alle Dateien auflisten möchten, die derzeit unter dem Zweig verfolgt werden master
, können Sie diesen Befehl verwenden:
git ls-tree -r master --name-only
Wenn Sie eine Liste der Dateien wünschen, die jemals existierten (dh einschließlich gelöschter Dateien):
git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'
git
Versionsverzeichnisse nicht direkt. Stattdessen werden Dateien und ihre Pfade gespeichert. ls-tree
gibt alle versionierten Dateien aus. Versuchen Sie, ein leeres Verzeichnis in zu stellen, um diese Unterscheidung besser zu verstehen git
. Das leere Verzeichnis wird in den bereitgestellten Änderungen niemals angezeigt. Die einzige Möglichkeit, ein solches leeres Verzeichnis zu versionieren, besteht darin, eine Datei unter dem Verzeichnis tatsächlich zu versionieren. Für Anwendungsfälle, in denen Sie ein solches leeres Platzhalterverzeichnis in der Versionskontrolle benötigen, können Sie eine Dummy-Datei unter dem Verzeichnis erstellen und diese versionieren. Ich hoffe die Erklärung ist klar.
ls-tree master
dass die verfolgten Dateien nicht im Staging-Bereich angezeigt werden.
Die von git verwalteten Dateien werden von angezeigt git ls-files
. Schauen Sie sich die Handbuchseite an.
ls
... oderls -R
git ls-tree
- es ist relativ zu pwd
.
Die akzeptierte Antwort zeigt nur Dateien im Baum des aktuellen Verzeichnisses an. Verwenden Sie, um alle nachverfolgten Dateien anzuzeigen, die festgeschrieben wurden (im aktuellen Zweig)
git ls-tree --full-tree --name-only -r HEAD
--full-tree
Lässt den Befehl so laufen, als ob Sie sich im Stammverzeichnis des Repos befinden.-r
rekursiv in Unterverzeichnisse. In Kombination mit erhalten --full-tree
Sie alle festgeschriebenen, nachverfolgten Dateien.--name-only
Entfernt SHA- / Berechtigungsinformationen, wenn Sie nur die Dateipfade möchten.HEAD
Gibt an, für welchen Zweig die Liste der verfolgten, festgeschriebenen Dateien verwendet werden soll. Sie können dies in master
einen anderen Filialnamen ändern, dies HEAD
ist jedoch das Commit, das Sie gerade ausgecheckt haben.Dies ist die Methode aus der akzeptierten Antwort auf die ~ doppelte Frage https://stackoverflow.com/a/8533413/4880003 .
Möglicherweise möchten Sie damit eine farbige Ausgabe.
Ich verwende diesen Einzeiler, um die verfolgten Dateien und Verzeichnisse im aktuellen Verzeichnis des aktuellen Zweigs aufzulisten:
ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)
Möglicherweise möchten Sie es 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)"
glr
Ihnen angegebene Alias sah etwas seltsam aus, daher habe ich eine Version erstellt, die dem Format des ersten von Ihnen angegebenen Alias besser entspricht : alias glr='ls --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)'
. Getestet mit git version 2.20.1
auf Debian 10.