En utilisant la ligne de commande git, comment puis-je faire afficher à git une liste des fichiers qui sont suivis dans le référentiel?
En utilisant la ligne de commande git, comment puis-je faire afficher à git une liste des fichiers qui sont suivis dans le référentiel?
Réponses:
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):
git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'
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 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.
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.
ls
... ouls -R
git ls-tree
- il est relatif au pwd
.
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.-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 en master
ou tout autre nom de branche, mais HEAD
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 .
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:
ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)
Vous pouvez l'ajouter en tant qu'alias:
alias gl='ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)'
Si vous souhaitez répertorier récursivement les fichiers:
'ls' --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)
Et un alias:
alias glr="'ls' --color=auto -d \$(git ls-tree -rt \$(git branch | grep \\* | cut -d \" \" -f2) --name-only)"
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é avec git version 2.20.1
sur Debian 10.