Come posso fare in modo che git mostri un elenco dei file che vengono monitorati?


535

Usando la riga di comando git, come posso fare in modo che git mostri un elenco dei file che vengono monitorati nel repository?


5
possibile duplicato dei file
Kristján,

2
Credo che sia. Ma non è giusto contrassegnarlo come duplice quando questo ha una risposta migliore.
lindhe,

5
in un universo parallelo, è sorprendente quanto sia simile questa domanda includendo tutte le risposte, eppure ognuna con il suo stile distintivo.
Jeff Puckett,

Risposte:


628

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'

61
Usa git ls-tree -r HEAD --name-only se vuoi elencare i file del ramo corrente
Ramast

3
Perché le directory non sono elencate?
Shuzheng,

13
@NicolasLykkeIversen: gitnon contiene direttamente le directory delle versioni. Invece memorizza i file e i loro percorsi. ls-treeprodurrà 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.
Tuxdude,

2
Basta notare, ls-tree masternon mostra i file tracciati nell'area di gestione temporanea.
nn0p,

È possibile mostrare solo la directory di livello superiore se include molte sottodirectory e file?
Blaszard,

192

I file gestiti da git sono mostrati da git ls-files. Dai un'occhiata alla sua pagina di manuale.


4
Sembra che mostri solo i file nella directory corrente o sotto di essa.
Lyle Z,

11
Ti dispiace se lo modifico per includere le sezioni pertinenti della pagina del manuale?
Nathan Basanese,

1
@NathanBasanese forse puoi aggiungere un'altra risposta con quelle informazioni.
José Castro,

@LyleZ Forse questo dovrebbe essere in linea con ls... oppurels -R
flow2k,

1
@LyleZ Inoltre, questo comportamento è lo stesso di git ls-tree- è relativo al pwd.
flow2k

18

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.
  • -rrecluta in sottodirectory. Unito a --full-treequesto, ti dà tutti i file impegnati e tracciati.
  • --name-only rimuove le informazioni SHA / autorizzazione per quando si desidera solo i percorsi dei file.
  • HEADspecifica per quale ramo si desidera l'elenco di file monitorati e sottoposti a commit. È possibile modificare questo mastero 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 .


Grazie! Questo funziona anche con pronti repository.
hzpc-joostk,

5

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)"

L' glralias 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.1su Debian 10.
baltakatei,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.