Czy mogę uzyskać od gita informację o wszystkich plikach zmodyfikowanych przez jednego użytkownika?


147

Chciałbym, aby git dał mi listę wszystkich plików zmodyfikowanych przez jednego użytkownika we wszystkich zatwierdzeniach.

Moim szczególnym przypadkiem użycia jest to, że byłem zaangażowany w i18n projektu Ruby on Rails i chcemy wiedzieć, jakie pliki zostały już zrobione, a które jeszcze trzeba zrobić. Użytkownicy, o których mowa, wykonali pracę tylko na i18n, a nie na pozostałej części kodu. Więc wszystkie informacje powinny znajdować się w git, ale nie jestem pewien, jak je wydobyć.

Odpowiedzi:


127

To nie jedyny sposób, ale działa:

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

Lub jako jeden wiersz:

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

184

To da ci prostą listę plików, nic więcej:

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

W razie potrzeby przełącz opcję --author na --committer.


1
--name-onlywydaje się, że dane wyjściowe są jedynie nazwami plików. Biorąc pod uwagę ten fakt, jakie są opcje --stati --pretty=format:""osiągnięcia? Czy mógłbyś je pominąć?
Jonah,

1
@Jonah --pretty = format: „” jest potrzebne. Zredagowałem odpowiedź.
Ian Kelling,

2
działa świetnie, choć jedna drobna usterka: tworzy puste łącze na początku wyjścia, co oznacza, że ​​przepuszczanie wyniku przez 'wc -l' w celu uzyskania liczby plików jest przesunięte o 1.
joachim

jak mogę wykluczyć pliki, które zostały usunięte?
Tim Boland

8

Spróbuj git log --stat --committer=<user>. Po prostu umieść nazwę użytkownika w --committer=opcji (lub użyj --author=odpowiednio).

Spowoduje to wyplucie wszystkich plików na zatwierdzenie, więc prawdopodobnie nastąpi powielenie.


0
git log --pretty= --author=@abcd.com --name-only | sort -u | wc -l

Pokazuje wszystkie zmodyfikowane pliki według firmy w repozytorium git.

git log --pretty= --author=user@abcd.com --name-only | sort -u | wc -l

Pokazuje wszystkie zmodyfikowane pliki według nazwy autora „użytkownik” w repozytorium git.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.