Git - lista todos os arquivos atualmente sob controle de origem?


122

Existe uma maneira de listar todos os arquivos atualmente sob controle de origem no git? (Não apenas aqueles que foram modificados).

Respostas:


129

Se você deseja listar todos os arquivos para um ramo específico, por exemplo master:

git ls-tree -r master --name-only

A -ropção permitirá recursar em subdiretórios e imprimir cada arquivo atualmente sob controle de versão. Você também pode especificar, em HEADvez de masterobter a lista para qualquer outro ramo em que possa estar.

Se você deseja obter uma lista de todos os arquivos que já existiram, consulte aqui :

git log --pretty = formato: - somente nome - filtro-dif = = A | classificar -u

1
Obrigado slhck, exatamente o que eu estava procurando - e útil saber sobre o segundo também. Marcará como correto em 5 minutos e meio quando for permitido. :-)
Anônimo

3
Obrigado pela resposta. Eu estava procurando por isso. Observe que git ls-tree -r master --name-onlyfaria o mesmo que a primeira opção, sem precisar do cut. Ah, e você pode especificar, em HEADvez de, masterse deseja apenas essa lista para qualquer ramo em que esteja atualmente.
maurits

6
A execução de "git ls-files" poupará alguns caracteres :)
Zain R

Por que foi cortado dado o final -? Isso faz com que algumas linhas adicionais mostrem alguns arquivos em uma segunda coluna que são repetidos a partir da primeira.
Adrian

@ Adrian Não faço ideia, copypasted naquela época, corrigido agora.
slhck 15/04

61

O git ls-filescomando fará o que você precisa.

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


4
git ls-filesem vez de git ls-tree -r master --name-onlyé certamente mais simples.
perfil completo

1
Desculpe, mas minha edição não era inválida. No git atual, não há git-ls-filesbinário. Existe o gitbinário com o ls-filescomando O link para a documentação está correto no conteúdo, mas tecnicamente para um binário desatualizado.
precisa saber é o seguinte

@ JonnyJD, provavelmente marcado como inválido porque sua edição deve ser um comentário.
Ascherer

1
@JonnyJD Todos Git-homem páginas são nomeados como git-commit, git-init, git-ls-files, etc. mesmo que os programas são realmente Subcomandos. Nunca houve um git-ls-filesbinário, provavelmente. O raciocínio é que ele é consistente com o mecanismo de subcomando externo, que permite registrar um git foocomando escrevendo um git-foobinário.
Radon Rosborough 19/07

4

git ls-files imprimirá apenas arquivos no diretório de trabalho atual.

Se, por exemplo, você tiver um repositório git para dotfiles ( core.worktree = /), terá arquivos fora da raiz git e esse comando simples não funcionará mais.

Em resumo, isso funcionará:

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

Exemplo:

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 você desejar caminhos especificados em relação ao diretório atual (shell), isso fará o trabalho:

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

e no exemplo acima, ele imprimiria

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

No git v2.21, git ls-filesmostra tudo no diretório atual e abaixo. Apenas não mostra os arquivos que foram excluídos no repositório.
Adrian

0

Você também pode usar o gitkvisualizador de repositório interativo.


1
Isso menciona uma ferramenta, mas realmente não responde ao "como". Você pode expandir isso para uma solução acionável? Apenas apontar alguém em uma direção de pesquisa para que eles desenvolvam sua própria solução é mais apropriado como um comentário. Obrigado. da revisão
fixer1234

-2

Captura de tela

Por favor, dê uma olhada na imagem, no lado direito, existem duas opções de patch e Tree. Se você selecionar a árvore, poderá visualizar a estrutura de pastas para cada confirmação.


Por favor, considere um melhor comprometimento com a captura de tela para que você não precise censurar tanto.
Thorbjørn Ravn Andersen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.