Puis-je demander à git de me dire tous les fichiers qu'un utilisateur a modifiés?

148

Je voudrais que git me donne une liste de tous les fichiers modifiés par un utilisateur, pour tous les commits.

Mon cas d'utilisation particulier est que j'ai été impliqué dans l'i18n d'un projet ruby ​​on rails, et nous voulons savoir quels fichiers ont déjà été créés et quels fichiers doivent encore l'être. Les utilisateurs en question n'ont travaillé que sur l'i18n, pas sur le reste de la base de code. Donc, les informations devraient toutes être dans git, mais je ne sais pas comment les extraire.

Hamish Downer
la source

Réponses:

128

Ce n'est pas le seul moyen, mais cela fonctionne:

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, en une seule ligne:

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
la source
184

Cela vous donnera une simple liste de fichiers, rien d'autre:

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

Remplacez --author par --committer si nécessaire.

h0tw1r3
la source
1
--name-onlysemble faire la sortie rien que des noms de fichiers. Compte tenu de ce fait, quelles sont les options --statet les --pretty=format:""réalisations? Pourriez-vous les laisser de côté?
Jonah
1
@Jonah --pretty = format: "" est nécessaire. J'ai édité la réponse.
Ian Kelling
2
fonctionne très bien, même si un petit problème: il produit un lien vide au début de la sortie, ce qui signifie que le transfert du résultat via 'wc -l' pour obtenir un nombre de fichiers est désactivé de 1.
joachim
comment puis-je exclure des fichiers qui ont été supprimés?
Tim Boland
8

Essayez git log --stat --committer=<user>. Mettez simplement le nom de l'utilisateur sur l' --committer=option (ou utilisez --author=le cas échéant).

Cela crachera tous les fichiers par commit, donc il y aura probablement une duplication.

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

Affiche tous les fichiers modifiés par société dans le référentiel git.

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

Affiche tous les fichiers modifiés par nom d'auteur «utilisateur» dans le dépôt git.

Abhijeet Kandalkar
la source