Git代码行统计命令集

http://blog.csdn.net/dwarven/article/details/46550117

统计某人的代码提交量,包括增加,删除:

  1. git log --author="$(git config --get user.name)" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }' -  

仓库提交者排名前 5(如果看全部,去掉 head 管道即可):

  1. git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5  

仓库提交者(邮箱)排名前 5:这个统计可能不会太准,因为很多人有不同的邮箱,但会使用相同的名字

  1. git log --pretty=format:%ae | gawk -- '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }' | sort -u -n -r | head -n 5  

贡献者统计:

  1. git log --pretty='%aN' | sort -u | wc -l  

提交数统计:

  1. git log --oneline | wc -l  

添加或修改的代码行数:

  1. git log --stat|perl -ne 'END { print $c } $c += $1 if /(\d+) insertions/;  

git log 参数说明:
--author   指定作者
--stat   显示每次更新的文件修改统计信息,会列出具体文件列表
--shortstat    统计每个commit 的文件修改行数,包括增加,删除,但不列出文件列表:  
--numstat   统计每个commit 的文件修改行数,包括增加,删除,并列出文件列表:
 
   
-p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新
       例如:git log -p  -2
--name-only 仅在提交信息后显示已修改的文件清单
--name-status 显示新增、修改、删除的文件清单
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)
--graph 显示 ASCII 图形表示的分支合并历史
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)
       例如: git log --pretty=oneline ; git log --pretty=short ; git log --pretty=full ; git log --pretty=fuller
--pretty=tformat:   可以定制要显示的记录格式,这样的输出便于后期编程提取分析
       例如:git log --pretty=format:""%h - %an, %ar : %s""
       下面列出了常用的格式占位符写法及其代表的意义。                   
       选项       说明                  
       %H      提交对象(commit)的完整哈希字串               
       %h      提交对象的简短哈希字串               
       %T      树对象(tree)的完整哈希字串                   
       %t      树对象的简短哈希字串                    
       %P      父对象(parent)的完整哈希字串               
       %p      父对象的简短哈希字串                   
       %an     作者(author)的名字              
       %ae     作者的电子邮件地址                
       %ad     作者修订日期(可以用 -date= 选项定制格式)                   
       %ar     作者修订日期,按多久以前的方式显示                    
       %cn     提交者(committer)的名字                
       %ce     提交者的电子邮件地址                    
       %cd     提交日期                
       %cr     提交日期,按多久以前的方式显示              
       %s      提交说明  
--since  限制显示输出的范围,
       例如: git log --since=2.weeks    显示最近两周的提交
       选项 说明                
       -(n)    仅显示最近的 n 条提交                    
       --since, --after 仅显示指定时间之后的提交。                    
       --until, --before 仅显示指定时间之前的提交。                  
       --author 仅显示指定作者相关的提交。                
       --committer 仅显示指定提交者相关的提交。
 
    一些例子: git log --until=1.minute.ago // 一分钟之前的所有 log git log --since=1.day.ago //一天之内的log git log --since=1.hour.ago //一个小时之内的 log git log --since=`.month.ago --until=2.weeks.ago //一个月之前到半个月之前的log git
log --since ==2013-08.01 --until=2013-09-07 //某个时间段的 log   git blame
看看某一个文件的相关历史记录
       例如:git blame index.html --date short



git shortlog -nse   个人贡献列表,包含merge

git shortlog -nse --no-merges  个人贡献列表,不包含merge,纯作者


  2447  Paolo Bonzini <pbonzini@redhat.com>
  2290  Fabrice Bellard <fabrice@bellard.org>
  1978  Peter Maydell <peter.maydell@linaro.org>
  1737  Blue Swirl <blauwirbel@gmail.com>
  1732  Gerd Hoffmann <kraxel@redhat.com>
  1606  Aurelien Jarno <aurelien@aurel32.net>
  1582  Richard Henderson <rth@twiddle.net>
  1344  Markus Armbruster <armbru@redhat.com>
  1202  Andreas Färber <afaerber@suse.de>
  1189  Kevin Wolf <kwolf@redhat.com>
  1181  Anthony Liguori <anthony@codemonkey.ws>
   933  Thiemo Seufer <ths@networkno.de>
   876  Juan Quintela <quintela@redhat.com>
   724  Michael S. Tsirkin <mst@redhat.com>
   716  Jan Kiszka <jan.kiszka@siemens.com>
   656  Paul Brook <paul@codesourcery.com>
   652  Alexander Graf <agraf@suse.de>
   617  Stefan Weil <sw@weilnetz.de>
   571  Fam Zheng <famz@redhat.com>
   552  Eduardo Habkost <ehabkost@redhat.com>
   552  Luiz Capitulino <lcapitulino@redhat.com>
   536  Max Reitz <mreitz@redhat.com>
   516  Stefan Hajnoczi <stefanha@redhat.com>
   458  Avi Kivity <avi@redhat.com>
   455  Andrzej Zaborowski <balrogg@gmail.com>
   452  Igor Mammedov <imammedo@redhat.com>
   435  Eric Blake <eblake@redhat.com>
   391  David Gibson <david@gibson.dropbear.id.au>
   374  Daniel P. Berrange <berrange@redhat.com>
   361  Stefan Weil <weil@mail.berlios.de>
   358  Edgar E. Iglesias <edgar.iglesias@gmail.com>
   344  Peter Crosthwaite <peter.crosthwaite@xilinx.com>
   319  malc <av1474@comtv.ru>
   295  Hans de Goede <hdegoede@redhat.com>
   289  Alexey Kardashevskiy <aik@ozlabs.ru>
   287  John Snow <jsnow@redhat.com>
   283  Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
   269  Jocelyn Mayer <l_indien@magic.fr>
   266  Gonglei <arei.gonglei@huawei.com>
   250  Isaku Yamahata <yamahata@valinux.co.jp>
   243  Tom Musta <tommusta@gmail.com>
   216  Marc-André Lureau <marcandre.lureau@redhat.com>
   205  Alex Williamson <alex.williamson@redhat.com>
   198  Hervé Poussineau <hpoussin@reactos.org>
   195  Dr. David Alan Gilbert <dgilbert@redhat.com>
   188  Max Filippov <jcmvbkbc@gmail.com>
   186  Amit Shah <amit.shah@redhat.com>
   185  Peter Lieven <pl@kamp.de>
   167  Jeff Cody <jcody@redhat.com>
   167  Mark McLoughlin <markmc@redhat.com>
   165  Laszlo Ersek <lersek@redhat.com>

使用以下代码处理:

import os

mydict = {}

p = open('qemu-list','r')
content = p.readlines()
for line in content:
    p = line.split()
    try:
        con1 = p[-1][1:-1].split('.')[-2]
        con2 = con1.split('@')
        if len(con2) == 2:
            con3 = con2[1]
        else:
            con3 = con2[0]
        if not mydict.has_key(con3):
            mydict[con3] = int(p[0])
        else:
            mydict[con3] += int(p[0])
    except:
        pass


for k in sorted(mydict.iteritems(), key=lambda d:d[1], reverse = True):
    print k[0],k[1]

得出公司统计:


redhat 16199
gmail 4305
linaro 2421
bellard 2290
suse 2046
ibm 1960
aurel32 1606
twiddle 1583
codemonkey 1181
networkno 933
codesourcery 770
siemens 718
weilnetz 618
xilinx 555
co 451
id 414
fujitsu 391
huawei 389
berlios 361
comtv 319
ozlabs 291
imgtec 279
magic 269
citrix 234
reactos 200
web 194
kamp 185
intel 183
msk 139
igalia 137
lst 113
crashing 112
openvz 106
ispras 106
samsung 103
walle 100
uni-paderborn 97
greensocs 95
nokia 94
upc 85
petalogix 83
tribudubois 82
vivier 79
freescale 75
virtuozzo 73
163 69
ravellosystems 57
adacore 55
amd 55
iksaif 54
irqsave 52


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值