Bisakah saya meminta git untuk memberi tahu saya semua file yang telah dimodifikasi oleh satu pengguna?

148

Saya ingin git memberi saya daftar semua file yang dimodifikasi oleh satu pengguna, di semua komit.

Kasus penggunaan khusus saya adalah bahwa saya telah terlibat dalam i18n dari proyek ruby ​​on rails, dan kami ingin tahu file apa yang telah dilakukan dan file apa yang masih harus dilakukan. Pengguna yang dipermasalahkan hanya melakukan pekerjaan pada i18n, bukan pada basis kode lainnya. Jadi informasinya harus dalam git, tapi saya tidak yakin bagaimana cara mengeluarkannya.

Hamish Downer
sumber

Jawaban:

128

Ini bukan satu-satunya cara, tetapi berhasil:

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

Atau, sebagai satu baris:

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

Ini akan memberi Anda daftar file sederhana, tidak ada yang lain:

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

Ganti --author untuk --committer seperlunya.

h0tw1r3
sumber
1
--name-onlytampaknya tidak menghasilkan apa-apa selain nama file. Mengingat fakta itu, apa saja pilihan --statdan --pretty=format:""pencapaiannya? Bisakah Anda meninggalkan mereka?
Jonah
1
@Jonah --pretty = format: "" diperlukan. Saya mengedit jawabannya.
Ian Kelling
2
berfungsi dengan baik, meskipun ada satu kesalahan kecil: ia menghasilkan tautan kosong pada awal output, yang berarti bahwa mem-pipkan hasil melalui 'wc -l' untuk mendapatkan jumlah file dimatikan oleh 1.
joachim
bagaimana saya bisa mengecualikan file yang dihapus?
Tim Boland
8

Coba git log --stat --committer=<user>. Cukup masukkan nama pengguna pada --committer=opsi (atau gunakan yang --author=sesuai).

Ini akan memuntahkan semua file per komit, sehingga kemungkinan akan ada duplikasi.

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

Memperlihatkan semua file yang dimodifikasi oleh perusahaan di git repo.

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

Memperlihatkan semua file yang dimodifikasi dengan nama pengguna 'pengguna' di git repo.

Abhijeet Kandalkar
sumber