Memperbarui
git ls-tree -r -z --name-only HEAD -- */*.c | xargs -0 -n1 git blame \
--line-porcelain HEAD |grep "^author "|sort|uniq -c|sort -nr
Saya memperbarui beberapa hal dalam perjalanan.
Untuk kenyamanan, Anda juga bisa memasukkan ini ke dalam perintahnya sendiri:
#!/bin/bash
# save as i.e.: git-authors and set the executable flag
git ls-tree -r -z --name-only HEAD -- $1 | xargs -0 -n1 git blame \
--line-porcelain HEAD |grep "^author "|sort|uniq -c|sort -nr
simpan ini di suatu tempat di jalur Anda atau ubah jalur Anda dan gunakan seperti itu
git authors '*/*.c' # look for all files recursively ending in .c
git authors '*/*.[ch]' # look for all files recursively ending in .c or .h
git authors 'Makefile' # just count lines of authors in the Makefile
Jawaban Asli
Sementara jawaban yang diterima melakukan pekerjaan itu sangat lambat.
$ git ls-tree --name-only -z -r HEAD|egrep -z -Z -E '\.(cc|h|cpp|hpp|c|txt)$' \
|xargs -0 -n1 git blame --line-porcelain|grep "^author "|sort|uniq -c|sort -nr
hampir seketika.
Untuk mendapatkan daftar file yang saat ini dilacak dapat Anda gunakan
git ls-tree --name-only -r HEAD
Solusi ini menghindari panggilan fileuntuk menentukan tipe file dan menggunakan grep untuk mencocokkan ekstensi yang diinginkan untuk alasan kinerja. Jika semua file harus disertakan, cukup hapus ini dari baris.
grep -E '\.(cc|h|cpp|hpp|c)$' # for C/C++ files
grep -E '\.py$' # for Python files
jika file dapat berisi spasi, yang buruk untuk shell, Anda dapat menggunakan:
git ls-tree -z --name-only -r HEAD | egrep -Z -z '\.py'|xargs -0 ... # passes newlines as '\0'
Berikan daftar file (melalui pipa) yang dapat digunakan xargs untuk memanggil perintah dan mendistribusikan argumen. Perintah yang memungkinkan banyak file diproses diproses oleh -n1. Dalam hal ini kami memanggil git blame --line-porcelaindan untuk setiap panggilan kami menggunakan tepat 1 argumen.
xargs -n1 git blame --line-porcelain
Kami kemudian memfilter output untuk kejadian "penulis" mengurutkan daftar dan menghitung garis duplikat dengan:
grep "^author "|sort|uniq -c|sort -nr
Catatan
Jawaban lain sebenarnya menyaring garis yang hanya berisi spasi putih.
grep -Pzo "author [^\n]*\n([^\n]*\n){10}[\w]*[^\w]"|grep "author "
Perintah di atas akan mencetak penulis baris yang mengandung setidaknya satu karakter non-spasi putih. Anda juga dapat menggunakan kecocokan \w*[^\w#]yang juga akan mengecualikan baris di mana karakter non-spasi pertama bukan merupakan #(komentar dalam banyak bahasa scripting).