Git统计代码量

1 指定用户名版

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

2 使用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

3 扫描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

比较奇怪的是会列出两个人同时修改,可能是 merge 操作,没有深究.

4 扫描Log单独统计每个人的增删行数加强版

git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --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 }' -; done

直接上输出:

aaa added lines: 34, removed lines: 4, total lines: 30 
bbb added lines: 2301, removed lines: 481, total lines: 1820 
ccc added lines: 1856, removed lines: 757, total lines: 1099 
ddd added lines: 30400, removed lines: 21317, total lines: 9083 
eee added lines: 1153, removed lines: 1170, total lines: -17 
fff added lines: 1153, removed lines: 1170, total lines: -17 
ggg added lines: 72886, removed lines: 64233, total lines: 8653 
hhh added lines: 814, removed lines: 216, total lines: 598 
iii added lines: 9503, removed lines: 3846, total lines: 5657

5 第三方小工具

使用这个工具可以直接输出非常漂亮的统计表格:
https://github.com/oleander/git-fame-rb

转自https://blog.csdn.net/jdz199409/article/details/79425405

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值