最近有一个需求是要统计 Git 仓库里每个人的代码量,于是上网搜了一下,找了一些相关命令:
指定用户名版
|
git log --author="_Your_Name_Here_" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' - |
这句话可以输出当前项目内指定用户名的用户的代码量统计,结果如下:
|
added lines: 30400 removed lines: 21317 total lines: 9083 |
使用 ls-file 实现不指定用户版统计行数版
|
git ls-files -z | xargs -0n1 git blame -w | ruby -n -e '$_ =~ /^.*\((.*?)\s[\d]{4}/; puts $1.strip' | sort -f | uniq -c | sort -n |
这段代码比较有意思,它扫描了当前分支的每个文件,然后用 Git 的 blame 功能输出每个人的代码行数,最后用系统命令 sort 和 uniq 实现计数。
结果如下:
|
8 aaa 9 bbb 145 ccc 146 ddd 261 eee |
扫描 Log 统计增删行数版
|
git log --shortstat --pretty="%cE" | sed 's/\(.*\)@.*/\1/' | grep -v "^$" | awk 'BEGIN { line=""; } !/^ / { if (line=="" || !match(line, $0)) {line = $0 "," line }} /^ / { print line " # " $0; line=""}' | sort | sed -E 's/# //;s/ files? changed,//;s/([0-9]+) ([0-9]+ deletion)/\1 0 insertions\(+\), \2/;s/\(\+\)$/\(\+\), 0 deletions\(-\)/;s/insertions?\(\+\), //;s/ deletions?\(-\)//' | awk 'BEGIN {name=""; files=0; insertions=0; deletions=0;} {if ($1 != name && name != "") { print name ": " files " files changed, " insertions " insertions(+), " deletions " deletions(-), " insertions-deletions " net"; files=0; insertions=0; deletions=0; name=$1; } name=$1; files+=$2; insertions+=$3; deletions+=$4} END {print name ": " files " files changed, " insertions " insertions(+), " deletions " deletions(-), " insertions-deletions " net";}' |
这段比较复杂,我也没有认真解读,直接贴结果吧:
|
aaa,: 353 files changed, 9359 insertions(+), 3844 deletions(-), 5515 net aaa,bbb,: 4 files changed, 144 insertions(+), 2 deletions(-), 142 net ccc,: 114 files changed, 2301 insertions(+), 481 deletions(-), 1820 net ddd,: 27 files changed, 1856 insertions(+), 757 deletions(-), 1099 net eee,: 1726 files changed, 32841 insertions(+), 22719 deletions(-), 10122 net eee,fff,: 13 files changed, 209 insertions(+), 211 deletions(-), -2 net ggg,: 53 files changed, 1153 insertions(+), 1170 deletions(-), -17 net fff,: 2445 files changed, 69875 insertions(+), 62148 deletions(-), 7727 net fff,eee,: 30 files changed, 394 insertions(+), 472 deletions(-), -78 net bbb,: 37 files changed, 781 insertions(+), 216 deletions(-), 565 net hhh,: 4 files changed, 34 insertions(+), 4 deletions(-), 30 net |
比较奇怪的是会列出两个人同时修改,可能是 (更多…)