Questão Git - Lista todos os arquivos atualmente sob controle de fonte?


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


91


origem




Respostas:


Se você quiser listar todos os arquivos de uma ramificação específica, por exemplo, master:

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

o -r opção permitirá recursão em subdiretórios e imprimir cada arquivo atualmente sob controle de versão. Você também pode especificar HEAD ao invés de master para obter a lista de qualquer outro ramo em que você possa estar.

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

log do git --pretty = format: --name-status | corte -f2- | sort -u

96



Obrigado slhck, exatamente o que eu estava depois - e útil saber sobre o segundo também. Irá marcar como correto em 5 minutos e meio quando eu for permitido. :-) - Anonymous
Obrigado pela resposta. Eu estava procurando por isso. Observe que git ls-tree -r master --name-only faria o mesmo que a primeira opção, sem precisar do cut. Ah, e você pode especificar HEAD ao invés de master se você quer apenas esta lista para qualquer filial que você está no momento. - maurits
Rodando "git ls-files" você economizará alguns caracteres :) - Zain R


o git ls-files comando fará o que você precisa.

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


50



git ls-files ao invés de git ls-tree -r master --name-only é certamente mais simples. - karatedog
Desculpe, mas minha edição não era inválida. No git atual não existe git-ls-files binário. Existe o git binário com o ls-files comando. O link para a documentação está correto no conteúdo, mas tecnicamente para um binário desatualizado. - JonnyJD
@JonnyJD, provavelmente marcado como inválido porque sua edição deve ser um comentário. - Ascherer
@JonnyJD Todas as man pages do Git são nomeadas como git-commit, git-init, git-ls-files, etc., embora os programas sejam realmente subcomandos. Nunca houve um git-ls-files binário, provavelmente. O raciocínio é que é consistente com o mecanismo de subcomando externo, que permite registrar um git foo comando escrevendo um git-foo binário. - Radon Rosborough


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

Se, por exemplo, você tem um repositório git para dotfiles (core.worktree = /), então você terá arquivos fora da raiz do git e esse simples comando 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ê quiser caminhos especificados relativo para o seu diretório atual (shell), isso faz o trabalho:

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

e no exemplo acima, seria imprimir

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

2





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


0



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