Usando la riga di comando git, come posso fare in modo che git mostri un elenco dei file che vengono monitorati nel repository?
Usando la riga di comando git, come posso fare in modo che git mostri un elenco dei file che vengono monitorati nel repository?
Risposte:
Se si desidera elencare tutti i file attualmente tracciati sotto il ramo master
, è possibile utilizzare questo comando:
git ls-tree -r master --name-only
Se desideri un elenco di file che siano mai esistiti (ad esempio includendo i file eliminati):
git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'
git
non contiene direttamente le directory delle versioni. Invece memorizza i file e i loro percorsi. ls-tree
produrrà tutti i file con versione. Per comprendere meglio questa distinzione, prova a mettere in scena una directory vuota in git
. La directory vuota non verrà mai visualizzata nelle modifiche organizzate. L'unico modo per eseguire la versione di una directory così vuota è in realtà la versione di un file nella directory. Per i casi di utilizzo in cui è necessaria una directory segnaposto così vuota nel controllo versione, è possibile creare un file fittizio nella directory e nella versione. Spero che la spiegazione sia chiara.
ls-tree master
non mostra i file tracciati nell'area di gestione temporanea.
I file gestiti da git sono mostrati da git ls-files
. Dai un'occhiata alla sua pagina di manuale.
ls
... oppurels -R
git ls-tree
- è relativo al pwd
.
La risposta accettata mostra solo i file nella struttura della directory corrente. Per mostrare tutti i file tracciati che sono stati sottoposti a commit (sul ramo corrente), utilizzare
git ls-tree --full-tree --name-only -r HEAD
--full-tree
fa eseguire il comando come se fossi nella directory principale del repository.-r
recluta in sottodirectory. Unito a --full-tree
questo, ti dà tutti i file impegnati e tracciati.--name-only
rimuove le informazioni SHA / autorizzazione per quando si desidera solo i percorsi dei file.HEAD
specifica per quale ramo si desidera l'elenco di file monitorati e sottoposti a commit. È possibile modificare questo master
o qualsiasi altro nome di filiale, ma HEAD
è il commit che hai verificato in questo momento.Questo è il metodo dalla risposta accettata alla ~ domanda duplicata https://stackoverflow.com/a/8533413/4880003 .
Potrebbe essere necessario un output colorato con questo.
Uso questo one-liner per elencare i file e le directory tracciati nella directory corrente del ramo corrente:
ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)
Potresti volerlo aggiungere come alias:
alias gl='ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)'
Se si desidera elencare in modo ricorsivo i file:
'ls' --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)
E un alias:
alias glr="'ls' --color=auto -d \$(git ls-tree -rt \$(git branch | grep \\* | cut -d \" \" -f2) --name-only)"
glr
alias condizione sembrava un po 'strano, quindi ho fatto una versione più coerente con il formato del primo alias che hai fornito: alias glr='ls --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)'
. Testato git version 2.20.1
su Debian 10.