Como listar todos os arquivos para cada revisão no Git (como o manifesto hg do Mercurial --all)?


10

O Mercurial possui um comando para listar todos os arquivos que o repositório possui para cada revisão:

hg manifest --all

Existe um comando equivalente no Git?


Algo como git log --stat?
precisa saber é o seguinte

4
git ls-files?
NN

Apenas curioso, por que motivo você precisa disso?
Stephen Jennings

@ StephenJennings: é uma maneira melhor de saber que tipo de arquivos se tem sob controle de versão do que fazer mentalmente " ls -Rmenos .gitignore". A utilidade em geral: pode-se saber mais ou menos o que está acontecendo, mas a introspecção do repositório oferece uma confiança de que se sabe. Especialmente para usuários iniciantes, essa confiança faz uma grande diferença em como o programa é agradável de usar. O Git não prioriza tranquilizar seus usuários, e é por isso que tantas pessoas o odeiam até que aprendam.
Esteis 16/09/12

Respostas:


3

Eu sou absolutamente péssimo em scripts de shell, então isso certamente é sub-ideal, mas esse tipo de coisa pode fazer isso por você, supondo que você esteja usando o bash. Espero que outra pessoa possa passar por aqui e limpá-lo ou substituí-lo por algo melhor. Eu só testei no meu Mac, então cuidado.

Ele deve imprimir todos os arquivos em confirmações que são ancestrais do HEAD atual. Salve-o em um arquivo chamado manifest.shem algum lugar no seu caminho:

#!/bin/bash

TFILE=$(mktemp -t git-manifest)

for sha in $(git log --pretty=format:%H)
do
    git ls-tree --name-only --full-tree -r $sha >> $TFILE
done

sort -u $TFILE
rm $TFILE

1
Não é necessário, exportpois ele não precisa estar disponível em processos filho. Se o loop ultrapassar os hashes SHA, ele funcionará perfeitamente, caso contrário, usar reade citar a variável seria melhor. sorttem uma -uopção que faz o que uniqfaz. O arquivo não será obtido rmquando você cancelar no meio do caminho, você precisaria de um trappara isso, mas isso provavelmente seria excessivo para este script.
Daniel Beck

@DanielBeck: Obrigado, eu atualizei um pouco. mktempnão existe no Git Bash, devo descobrir uma maneira de lidar com isso para que o Windows possa jogar também.
Stephen Jennings
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.