Je le crois. Mais il ne semble pas juste de marquer cela comme dup quand cela a une meilleure réponse.
lindhe
5
dans un univers parallèle, il est inquiétant de constater à quel point cette question est similaire, y compris toutes les réponses, mais chacune avec son propre style.
Jeff Puckett
Réponses:
628
Si vous souhaitez répertorier tous les fichiers actuellement suivis sous la branche master, vous pouvez utiliser cette commande:
git ls-tree -r master --name-only
Si vous voulez une liste des fichiers qui ont déjà existé (c'est-à-dire y compris les fichiers supprimés):
Utilisez git ls-tree -r HEAD --name-only si vous voulez lister les fichiers de la branche courante
Ramast
3
Pourquoi les répertoires ne sont-ils pas répertoriés?
Shuzheng
13
@NicolasLykkeIversen - gitne versionne pas directement les répertoires. Au lieu de cela, il stocke les fichiers et leurs chemins. ls-treeaffichera tous les fichiers versionnés. Pour mieux comprendre cette distinction, essayez de transférer un répertoire vide vers git. Le répertoire vide n'apparaîtra jamais dans les modifications par étapes. La seule façon de versionner un tel répertoire vide est de réellement versionner un fichier sous le répertoire. Pour les cas d'utilisation où vous avez besoin d'un tel répertoire d'espace réservé vide dans le contrôle de version, vous pouvez créer un fichier factice sous le répertoire, et en version. J'espère que l'explication est claire.
Tuxdude
2
Notez simplement que ls-tree masterles fichiers suivis ne sont pas affichés dans la zone de transfert.
nn0p
Est-il possible d'afficher uniquement le répertoire de niveau supérieur s'il comprend de nombreux sous-répertoires et fichiers?
Blaszard
192
Les fichiers gérés par git sont affichés par git ls-files. Consultez sa page de manuel.
Cela semble ne montrer que les fichiers au niveau ou en dessous du répertoire actuel.
Lyle Z
11
Cela vous dérange si je modifie cela pour inclure les sections pertinentes de la page de manuel?
Nathan Basanese
1
@NathanBasanese vous pouvez peut-être ajouter une autre réponse avec ces informations.
José Castro
@LyleZ Peut-être que cela est destiné à être en accord avec ls... ouls -R
flow2k
1
@LyleZ De plus, ce comportement est le même avec git ls-tree- il est relatif au pwd.
flow2k
18
La réponse acceptée n'affiche que les fichiers de l'arborescence du répertoire actuel. Pour afficher tous les fichiers suivis qui ont été validés (sur la branche actuelle), utilisez
git ls-tree --full-tree --name-only -r HEAD
--full-tree fait exécuter la commande comme si vous étiez dans le répertoire racine du référentiel.
-rrevient dans les sous-répertoires. Combiné avec --full-tree, cela vous donne tous les fichiers validés et suivis.
--name-only supprime les informations SHA / permission lorsque vous voulez simplement les chemins de fichier.
HEADspécifie pour quelle branche vous voulez la liste des fichiers validés suivis. Vous pouvez changer cela en masterou tout autre nom de branche, mais HEADc'est le commit que vous avez vérifié en ce moment.
L' glralias que vous avez fournie a regardé un peu bizarre alors j'ai fait une version plus compatible avec le format du premier alias que vous avez fourni: alias glr='ls --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)'. Testé avec git version 2.20.1sur Debian 10.
Réponses:
Si vous souhaitez répertorier tous les fichiers actuellement suivis sous la branche
master
, vous pouvez utiliser cette commande:Si vous voulez une liste des fichiers qui ont déjà existé (c'est-à-dire y compris les fichiers supprimés):
la source
git
ne versionne pas directement les répertoires. Au lieu de cela, il stocke les fichiers et leurs chemins.ls-tree
affichera tous les fichiers versionnés. Pour mieux comprendre cette distinction, essayez de transférer un répertoire vide versgit
. Le répertoire vide n'apparaîtra jamais dans les modifications par étapes. La seule façon de versionner un tel répertoire vide est de réellement versionner un fichier sous le répertoire. Pour les cas d'utilisation où vous avez besoin d'un tel répertoire d'espace réservé vide dans le contrôle de version, vous pouvez créer un fichier factice sous le répertoire, et en version. J'espère que l'explication est claire.ls-tree master
les fichiers suivis ne sont pas affichés dans la zone de transfert.Les fichiers gérés par git sont affichés par
git ls-files
. Consultez sa page de manuel.la source
ls
... ouls -R
git ls-tree
- il est relatif aupwd
.La réponse acceptée n'affiche que les fichiers de l'arborescence du répertoire actuel. Pour afficher tous les fichiers suivis qui ont été validés (sur la branche actuelle), utilisez
--full-tree
fait exécuter la commande comme si vous étiez dans le répertoire racine du référentiel.-r
revient dans les sous-répertoires. Combiné avec--full-tree
, cela vous donne tous les fichiers validés et suivis.--name-only
supprime les informations SHA / permission lorsque vous voulez simplement les chemins de fichier.HEAD
spécifie pour quelle branche vous voulez la liste des fichiers validés suivis. Vous pouvez changer cela enmaster
ou tout autre nom de branche, maisHEAD
c'est le commit que vous avez vérifié en ce moment.Il s'agit de la méthode de la réponse acceptée à la ~ question en double https://stackoverflow.com/a/8533413/4880003 .
la source
Vous voudrez peut-être une sortie colorée avec cela.
J'utilise ce one-liner pour lister les fichiers et répertoires suivis dans le répertoire courant de la branche courante:
Vous pouvez l'ajouter en tant qu'alias:
Si vous souhaitez répertorier récursivement les fichiers:
Et un alias:
la source
glr
alias que vous avez fournie a regardé un peu bizarre alors j'ai fait une version plus compatible avec le format du premier alias que vous avez fourni:alias glr='ls --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)'
. Testé avecgit version 2.20.1
sur Debian 10.