Posso o git me dizer todos os arquivos que um usuário modificou?

148

Gostaria que o git me desse uma lista de todos os arquivos modificados por um usuário, em todos os commits.

Meu caso de uso específico é que eu estive envolvido no i18n de um projeto ruby ​​on rails e queremos saber quais arquivos já foram executados e quais ainda precisam ser executados. Os usuários em questão só trabalharam no i18n, não no restante da base de códigos. Portanto, todas as informações devem estar no git, mas não sei como divulgá-las.

Hamish Downer
fonte

Respostas:

128

Esta não é a única maneira, mas funciona:

git log --pretty="%H" --author="authorname" |
    while read commit_hash
    do
        git show --oneline --name-only $commit_hash | tail -n+2
    done | sort | uniq

Ou, como uma linha:

git log --pretty="%H" --author="authorname" | while read commit_hash; do git show --oneline --name-only $commit_hash | tail -n+2; done | sort | uniq
Steve Prentice
fonte
184

Isso fornecerá uma lista simples de arquivos, nada mais:

git log --no-merges --author="Pattern" --name-only --pretty=format:"" | sort -u

Alterne --autor para --committer conforme necessário.

h0tw1r3
fonte
1
--name-onlyparece fazer a saída nada além de nomes de arquivos. Diante desse fato, quais são as opções --state as --pretty=format:""realizações? Você poderia deixá-los de fora?
Jonah
1
@Jonah --pretty = format: "" é necessário. Eu editei a resposta.
Ian Kelling
2
funciona muito bem, apesar de uma pequena falha: produz um link em branco no início da saída, o que significa que o canal do resultado através de 'wc -l' para obter uma contagem de arquivos está desativado por 1.
joachim
como posso excluir arquivos que foram excluídos?
Tim Boland
8

Tente git log --stat --committer=<user>. Basta colocar o nome do usuário na --committer=opção (ou usar --author=conforme apropriado).

Isso cuspirá todos os arquivos por confirmação, portanto, provavelmente haverá alguma duplicação.

Robert S.
fonte
0
git log --pretty= [email protected] --name-only | sort -u | wc -l

Mostra todos os arquivos modificados por empresa no repositório git.

git log --pretty= [email protected] --name-only | sort -u | wc -l

Mostra todos os arquivos modificados pelo nome do autor 'user' no repositório git.

Abhijeet Kandalkar
fonte