Verwenden Sie git ls-tree -r HEAD --name-only, wenn Sie Dateien des aktuellen Zweigs
auflisten
3
Warum werden Verzeichnisse nicht aufgelistet?
Shuzheng
13
@NicolasLykkeIversen - 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.
Tuxdude
2
Beachten Sie nur, ls-tree masterdass die verfolgten Dateien nicht im Staging-Bereich angezeigt werden.
nn0p
Ist es möglich, nur das Verzeichnis der obersten Ebene anzuzeigen, wenn es viele Unterverzeichnisse und Dateien enthält?
Blaszard
191
Die von git verwalteten Dateien werden von angezeigt git ls-files. Schauen Sie sich die Handbuchseite an.
Das scheint nur Dateien im oder unter dem aktuellen Verzeichnis anzuzeigen.
Lyle Z
11
Stört es Sie, wenn ich dies so bearbeite, dass es die relevanten Abschnitte der Handbuchseite enthält?
Nathan Basanese
1
@ NathanBasanese Vielleicht können Sie mit diesen Informationen eine weitere Antwort hinzufügen.
José Castro
@LyleZ Vielleicht soll dies im Einklang mit ls... oderls -R
flow2k
1
@LyleZ Auch dieses Verhalten ist das gleiche mit git ls-tree- es ist relativ zu pwd.
flow2k
18
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.
Der von 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.
Antworten:
Wenn Sie alle Dateien auflisten möchten, die derzeit unter dem Zweig verfolgt werden
master
, können Sie diesen Befehl verwenden:Wenn Sie eine Liste der Dateien wünschen, die jemals existierten (dh einschließlich gelöschter Dateien):
quelle
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 verstehengit
. 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.quelle
ls
... oderls -R
git ls-tree
- es ist relativ zupwd
.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)
--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 inmaster
einen anderen Filialnamen ändern, diesHEAD
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 .
quelle
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:
Möglicherweise möchten Sie es als Alias hinzufügen:
Wenn Sie Dateien rekursiv auflisten möchten:
Und ein Alias:
quelle
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 mitgit version 2.20.1
auf Debian 10.