Kann ich git dazu bringen, mir alle Dateien mitzuteilen, die ein Benutzer geändert hat?

147

Ich möchte, dass git mir eine Liste aller von einem Benutzer geänderten Dateien über alle Commits hinweg gibt.

Mein besonderer Anwendungsfall ist, dass ich am i18n eines Ruby on Rails-Projekts beteiligt war und wir wissen möchten, welche Dateien bereits erstellt wurden und welche Dateien noch erstellt werden müssen. Die betreffenden Benutzer haben nur am i18n gearbeitet, nicht am Rest der Codebasis. Die Informationen sollten also alle in git sein, aber ich bin mir nicht sicher, wie ich sie herausholen soll.

Hamish Downer
quelle

Antworten:

127

Dies ist nicht der einzige Weg, aber es funktioniert:

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

Oder als eine Zeile:

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

Dadurch erhalten Sie eine einfache Liste von Dateien, sonst nichts:

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

Wechseln Sie bei Bedarf den Autor für den Committer.

h0tw1r3
quelle
1
--name-onlyscheint die Ausgabe nichts als Dateinamen zu machen. Was sind angesichts dieser Tatsache die Optionen --statund --pretty=format:""Leistungen? Könnten Sie sie weglassen?
Jonah
1
@ Jonah --pretty = Format: "" wird benötigt. Ich habe die Antwort bearbeitet.
Ian Kelling
2
funktioniert großartig, obwohl ein kleiner Fehler: Es erzeugt einen leeren Link am Anfang der Ausgabe, was bedeutet, dass das Weiterleiten des Ergebnisses durch 'wc -l', um eine Anzahl von Dateien zu erhalten, bis zum 1.
Joachim
Wie kann ich gelöschte Dateien ausschließen?
Tim Boland
8

Versuchen Sie es git log --stat --committer=<user>. Geben Sie einfach den Namen des Benutzers in die --committer=Option ein (oder verwenden Sie ihn --author=entsprechend).

Dadurch werden alle Dateien pro Commit ausgespuckt, sodass es wahrscheinlich zu Duplikaten kommt.

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

Zeigt alle geänderten Dateien nach Unternehmen im Git-Repo an.

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

Zeigt alle geänderten Dateien nach Autorenname 'Benutzer' im Git-Repo an.

Abhijeet Kandalkar
quelle