Usando a linha de comando git, como posso fazer com que o git mostre uma lista dos arquivos que estão sendo rastreados no repositório?
Usando a linha de comando git, como posso fazer com que o git mostre uma lista dos arquivos que estão sendo rastreados no repositório?
Respostas:
Se você deseja listar todos os arquivos que estão sendo rastreados atualmente no ramo master, você pode usar este comando:
git ls-tree -r master --name-only
Se você deseja uma lista de arquivos que já existiram (por exemplo, incluindo arquivos excluídos):
git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'
gitnão versão diretórios diretamente. Em vez disso, armazena arquivos e seus caminhos. ls-treeproduzirá todos os arquivos com versão. Para entender melhor essa distinção, tente preparar um diretório vazio para git. O diretório vazio nunca será exibido nas alterações faseadas. A única maneira de criar a versão de um diretório vazio é, na verdade, fazer a versão de um arquivo no diretório. Para casos de uso em que você precisa de um diretório de espaço reservado vazio no controle de versão, é possível criar um arquivo fictício no diretório e fazer a versão. Espero que a explicação seja clara.
ls-tree masterque não mostra os arquivos rastreados na área de preparação.
Os arquivos gerenciados pelo git são mostrados por git ls-files. Confira sua página de manual.
ls... ouls -R
git ls-tree- é relativo ao pwd.
A resposta aceita mostra apenas arquivos na árvore do diretório atual. Para mostrar todos os arquivos rastreados que foram confirmados (na ramificação atual), use
git ls-tree --full-tree --name-only -r HEAD
--full-tree faz com que o comando seja executado como se você estivesse no diretório raiz do repositório.-rse repete em subdiretórios. Combinado com --full-tree, isso fornece todos os arquivos rastreados e confirmados.--name-only remove informações de permissão / SHA para quando você deseja apenas os caminhos do arquivo.HEADespecifica para qual filial você deseja a lista de arquivos confirmados rastreados. Você pode alterar isso para masterou qualquer outro nome de filial, mas HEADé o commit que você efetuou check-out agora.Este é o método da resposta aceita à pergunta duplicada ~ https://stackoverflow.com/a/8533413/4880003 .
Você pode querer uma saída colorida com isso.
Eu uso esse one-liner para listar os arquivos e diretórios rastreados no diretório atual da ramificação atual:
ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)
Você pode querer adicioná-lo como um alias:
alias gl='ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)'
Se você deseja listar recursivamente os arquivos:
'ls' --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)
E um apelido:
alias glr="'ls' --color=auto -d \$(git ls-tree -rt \$(git branch | grep \\* | cut -d \" \" -f2) --name-only)"
glralias desde parecia um pouco estranho, então eu fiz uma versão mais consistente com o formato do primeiro alias que você forneceu: alias glr='ls --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)'. Testado com o git version 2.20.1Debian 10.