Git - Elenca tutti i file attualmente sotto controllo del codice sorgente?


122

C'è un modo per elencare tutti i file attualmente sotto controllo del codice sorgente in git? (Non solo quelli che sono stati modificati).

Risposte:


129

Se si desidera elencare tutti i file per un ramo specifico, ad esempio master:

git ls-tree -r master - solo nome

L' -ropzione consentirà di ricorrere in sottodirectory e stamperà ogni file attualmente sotto controllo di versione. Puoi anche specificare HEADinvece di masterottenere l'elenco per qualsiasi altro ramo in cui potresti trovarti.

Se vuoi ottenere un elenco di tutti i file che siano mai esistiti, vedi qui :

git log --pretty = format: --name-only --diff-filter = A | ordina -u

1
Grazie slhck, esattamente quello che stavo cercando - e utile sapere anche del secondo. Contrassegnerà come corretto tra 5 minuti e mezzo quando sono autorizzato. :-)
Anonimo

3
Grazie per la risposta. Lo stavo cercando. Nota che git ls-tree -r master --name-onlyfarebbe lo stesso della prima opzione, senza bisogno di cut. Ah, e puoi specificare HEADinvece masterse vuoi solo questo elenco per qualsiasi ramo in cui ti trovi attualmente.
Maurits

6
L'esecuzione di "git ls-files" ti farà risparmiare alcuni caratteri :)
Zain R,

Perché è stato tagliato il finale -? Fa sì che alcune righe aggiuntive mostrino alcuni file in una seconda colonna che sono ripetizioni della prima.
Adrian,

@Adrian Nessuna idea, copiata in quel momento, risolta ora.
slhck,

61

Il git ls-filescomando farà ciò di cui hai bisogno.

Fonte: http://www.kernel.org/pub/software/scm/git/docs/git-ls-files.html


4
git ls-filesinvece di git ls-tree -r master --name-onlyè sicuramente più semplice.
Karatedog,

1
Siamo spiacenti ma la mia modifica non è stata valida. Nell'attuale git non c'è git-ls-filesbinario. C'è il gitbinario con il ls-filescomando. Il collegamento alla documentazione è corretto nel contenuto, ma tecnicamente per un file binario obsoleto.
JonnyJD,

@JonnyJD, probabilmente contrassegnato come non valido perché la modifica dovrebbe essere un commento.
Ascherer,

1
@JonnyJD Tutti Git man-pages sono nominati come git-commit, git-init, git-ls-files, ecc, anche se i programmi sono in realtà Sottocomandi. Non c'è mai stato un git-ls-filesbinario, molto probabilmente. Il ragionamento è che è coerente con il meccanismo del sottocomando esterno, che consente di registrare un git foocomando scrivendo un file git-foobinario.
Radon Rosborough,

4

git ls-files stamperà solo i file nella directory di lavoro corrente.

Se, ad esempio, hai un repository git per dotfiles ( core.worktree = /), allora avrai file al di fuori della radice git e quel semplice comando non funzionerà più.

In breve, questo funzionerà:

git --git-dir "`git rev-parse --git-dir`" \
    -C "`git config core.worktree || pwd`" \
    ls-files

Esempio:

mkdir ~/dotfiles
cd ~/dotfiles
git config core.worktree /

# Ignore all files by default, else Git will find all files under "/"
echo "*" > .git/info/exclude

# Add files at the git repo's root and somewhere in the work tree
touch README
git add -f README
git add -f /etc/ssh/sshd_config

# `git status` would now print:
# new file:   ../../../etc/ssh/sshd_config
# new file:   README
git status

git commit -m "Initial commit"

# At this point, `git ls-files` prints only:
# README
git ls-files

# But you can print all files inside the work tree. This will print:
# etc/ssh/sshd_config
# home/yourusername/dotfiles/README
git --git-dir "`git rev-parse --git-dir`" -C "`git config core.worktree || pwd`" ls-files

Se si desidera specificare percorsi relativi alla directory corrente (shell), questo fa il lavoro:

alias gls='git ls-tree -r master --name-only HEAD "`git config core.worktree`"'

e nell'esempio sopra, verrebbe stampato

README
../../../etc/ssh/sshd_config

In git v2.21, git ls-filesmostra tutto nella directory corrente e sotto. Semplicemente non mostra i file che sono stati eliminati nel repository.
Adrian,

0

È inoltre possibile utilizzare il gitkvisualizzatore di repository interattivo.


1
Questo menziona uno strumento, ma in realtà non risponde al "come". Puoi espanderlo in una soluzione praticabile? Indicare qualcuno nella direzione della ricerca affinché sviluppi la propria soluzione è più appropriato come commento. Grazie. dalla recensione
fixer1234

-2

Immagine dello schermo

Dai un'occhiata all'immagine, sul lato destro ci sono due opzioni patch e Tree. Se si seleziona la struttura ad albero, è possibile visualizzare la struttura delle cartelle per ciascun commit.


Ti preghiamo di prendere in considerazione un impegno migliore per lo screenshot, in modo da non dover censurare tanto.
Thorbjørn Ravn Andersen,
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.