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'
gitVersionsverzeichnisse nicht direkt. Stattdessen werden Dateien und ihre Pfade gespeichert. ls-treegibt 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 masterdass 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.-rrekursiv in Unterverzeichnisse. In Kombination mit erhalten --full-treeSie alle festgeschriebenen, nachverfolgten Dateien.--name-only Entfernt SHA- / Berechtigungsinformationen, wenn Sie nur die Dateipfade möchten.HEADGibt an, für welchen Zweig die Liste der verfolgten, festgeschriebenen Dateien verwendet werden soll. Sie können dies in mastereinen anderen Filialnamen ändern, dies HEADist 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)"
glrIhnen 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.1auf Debian 10.