¿Puedo hacer que git me diga todos los archivos que un usuario ha modificado?

148

Me gustaría que git me diera una lista de todos los archivos modificados por un usuario, en todos los commits.

Mi caso de uso particular es que he estado involucrado en la i18n de un proyecto de ruby ​​on rails, y queremos saber qué archivos ya se han hecho y qué archivos aún deben hacerse. Los usuarios en cuestión solo han trabajado en el i18n, no en el resto de la base de código. Entonces, la información debería estar en git, pero no estoy seguro de cómo sacarla.

Hamish Downer
fuente

Respuestas:

128

Esta no es la única forma, pero 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

O, como una línea:

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
fuente
184

Esto le dará una lista simple de archivos, nada más:

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

Cambie --autor para --commisor según sea necesario.

h0tw1r3
fuente
1
--name-onlyparece que la salida no es más que nombres de archivo. Dado ese hecho, ¿cuáles son las opciones --staty el --pretty=format:""logro? ¿Podrías dejarlos fuera?
Jonás
1
@Jonah --pretty = format: "" es necesario. Edité la respuesta.
Ian Kelling
2
funciona muy bien, aunque hay una pequeña falla: produce un enlace en blanco al comienzo de la salida, lo que significa que canalizar el resultado a través de 'wc -l' para obtener un recuento de archivos está desactivado por 1.
joachim
¿Cómo puedo excluir archivos que fueron eliminados?
Tim Boland
8

Tratar git log --stat --committer=<user>. Simplemente ponga el nombre del usuario en la --committer=opción (o use --author=según corresponda).

Esto escupirá todos los archivos por confirmación, por lo que es probable que haya alguna duplicación.

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

Muestra todos los archivos modificados por compañía en el repositorio de git.

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

Muestra todos los archivos modificados por nombre de autor 'usuario' en el repositorio de git.

Abhijeet Kandalkar
fuente