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.