1. 程式人生 > >Git程式碼行統計命令集

Git程式碼行統計命令集

統計某人的程式碼提交量,包括增加,刪除:

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 管道即可):

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

倉庫提交者(郵箱)排名前 5:這個統計可能不會太準,因為很多人有不同的郵箱,但會使用相同的名字

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 

貢獻者統計:

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

提交數統計:

git log --oneline | wc -l  

某段時間內所有人的新增,刪除總程式碼數

git log  --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat:  --since ==2018-7-3 --until=2018-7-4 --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

掃描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

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 <[email protected]>
  2290  Fabrice Bellard <[email protected]>
  1978  Peter Maydell <[email protected]>
  1737  Blue Swirl <[email protected]>
  1732  Gerd Hoffmann <[email protected]>
  1606  Aurelien Jarno <[email protected]>
  1582  Richard Henderson <[email protected]>
  1344  Markus Armbruster <[email protected]>
  1202  Andreas Färber <[email protected]>
  1189  Kevin Wolf <[email protected]>
  1181  Anthony Liguori <[email protected]>
   933  Thiemo Seufer <[email protected]>
   876  Juan Quintela <[email protected]>
   724  Michael S. Tsirkin <[email protected]>
   716  Jan Kiszka <[email protected]>
   656  Paul Brook <[email protected]>
   652  Alexander Graf <[email protected]>
   617  Stefan Weil <[email protected]>
   571  Fam Zheng <[email protected]>
   552  Eduardo Habkost <[email protected]>
   552  Luiz Capitulino <[email protected]>
   536  Max Reitz <[email protected]>
   516  Stefan Hajnoczi <[email protected]>
   458  Avi Kivity <[email protected]>
   455  Andrzej Zaborowski <[email protected]>
   452  Igor Mammedov <[email protected]>
   435  Eric Blake <[email protected]>
   391  David Gibson <[email protected]>
   374  Daniel P. Berrange <[email protected]>
   361  Stefan Weil <[email protected]>
   358  Edgar E. Iglesias <[email protected]>
   344  Peter Crosthwaite <[email protected]>
   319  malc <[email protected]>
   295  Hans de Goede <[email protected]>
   289  Alexey Kardashevskiy <[email protected]>
   287  John Snow <[email protected]>
   283  Stefan Hajnoczi <[email protected]>
   269  Jocelyn Mayer <[email protected]>
   266  Gonglei <[email protected]>
   250  Isaku Yamahata <[email protected]>
   243  Tom Musta <[email protected]>
   216  Marc-André Lureau <[email protected]>
   205  Alex Williamson <[email protected]>
   198  Hervé Poussineau <[email protected]>
   195  Dr. David Alan Gilbert <[email protected]>
   188  Max Filippov <[email protected]>
   186  Amit Shah <[email protected]>
   185  Peter Lieven <[email protected]>
   167  Jeff Cody <[email protected]>
   167  Mark McLoughlin <[email protected]>
   165  Laszlo Ersek <[email protected]>

使用以下程式碼處理:

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


相關推薦

Git程式碼統計命令

統計某人的程式碼提交量,包括增加,刪除:git log --author="$(git config --get user.name)" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc +=

Git代碼統計命令

dex git log 歷史 命令 史記 增加 insert 提交 這樣的 統計某人的代碼提交量,包括增加,刪除: git log --author="$(git config --get user.name)" --pretty=tformat: --numstat

git 程式碼管理工具 命令總結

個人習慣 一般情況下現在遠端建立程式碼庫,然後克隆到本地,這樣的好處是直接了當編輯器命令列推送,簡單方便,所以就不討論 git init 了,想要了解的自行上網查閱資料; git clone git clone -b 分支名 git專案地址 git cone git專案地址

git程式碼託管常用命令

git程式碼託管常用命令(windows系統): 一、單人git管理開發 首先配置SSH公鑰; 1)首次在coding或者github上建立一個新的倉庫時:在本地CMD上輸入: md test          //建立一個名為tes

程式碼統計工具cloc

http://cloc.sourceforge.net v 1.64  T=0.35 s (26.1 files/s, 28419.1 lines/s) ------------------------------------------------------------------------------

記-統計svn與git的log日誌中的程式碼變更

任務要求 統計指定時間內,指定git地址與svn地址上的所有人員的程式碼行變更情況。   解決方案 最初為根據資料庫中儲存的所有git與svn地址來統計所有人員的提交程式碼行。之後由於庫中儲存的地址不全,改為通過gitlab api,找到上面的所有倉庫,之後統計程式碼行。svn由於資料庫中地

git統計程式碼量相關命令

統計某人的程式碼提交量,包括增加,刪除: git log --author="$(git config --get user.name)" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc

使用svn命令統計兩次上線之間的程式碼數,以及不同作者的程式碼

原理 其原理如下:  1,取得svn的兩個版本之間的diff資料 target=https://svn.xxx.com/erp/trunk/cms/cmsnew    start_version=113121    end_version=113128    步驟一,使

一句shell命令搞定程式碼統計

最粗略版 Shell程式碼   find . -name "*.java"|xargs wc -l|grep "total"|awk '{print $1}'   find . -name "*.java"|xargs cat|wc -l    #Output:

統計本地Git倉庫中不同貢獻者的程式碼數的一些方法

簡單的檢視和統計 1.顯示所有貢獻者及其commit數 git shortlog –numbered –summary 2.只看某作者提交的commit: git log –author=”eisneim” –oneline –shortstat

linux怎麽用一個命令統計出給定目錄中有多少個子目錄

linux怎麽用一個命令行統計出給定目錄中有多少個子目錄查看某目錄下文件的個數 ls -l |grep "^-"|wc -l 或 find ./company -type f | wc -l 查看某目錄下文件的個數,包括子目錄裏的。 ls -lR|grep "^-"|wc -l 查看某

GIT命令

reflog clone 信息 目標 服務器 email 還要 版本信息 電腦 what‘s the GIT?   GIT是一款免費、開源的分布式版本控制系統,用於敏捷高效地處理任何或小或大的項目。 Git的功能特性: 從一般開發者的角度來看,git有以下功能:   1

命令

倒計時 命令 ESS explore 碎片 媒體播放 簡介 簽名 vdp 運行命令集 winver-檢查Windows版本   wmimgmt.msc打開windows管理體系結構(WMI)   wupdmgrwindows更新程序   wscriptwindows腳本宿

Git的使用基於命令

git clone ase xcode 圖片 終端 man tro 郵箱 全局 一、檢查Git 使用Git前先檢查本機上是否安裝了Git,Mac上默認都是安裝了Git的 1、打開終端,輸入指令,如果已經安裝了Git就會顯示版本號 git version 2、如果尚未安裝

git 命令

    最近在學習git,現彙總如下:     pwd      ----顯示當前目錄    cd xxx    ----進入XXX為名的資料夾    cd ..

如何再window下統計自己寫的程式碼

git log --since="2018-05-01" --before="2018-11-5" --author="$(git config --get user.name)" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2

[Java]統計Java原始檔程式碼數,註釋數,空白行數

題目 1.各種行的說明 在Java源程式中的行共有3種: (1)程式碼行,可執行的Java原始碼。例如: int n = 10; (2) 註釋行,3種註釋均可。例如: /** 文件註釋 */ /* 多行註釋 */ //單行註釋 (3)

統計C/C++程式碼

近日在寫一個統計專案中C/CPP/H/CC/HPP檔案(C/C++程式碼檔案字尾名)的小程式。目標是給定一個專案程式碼所在資料夾,統計出總程式碼行數、有效程式碼行數、註釋行數、空白行數。 其中:總程式碼行數 =(有效程式碼行數+註釋行數+空白行數) 每找到一個目的碼檔案,就建立任務投進執行緒池裡,執行速度

Android studio怎麼使用git程式碼檔案逐追溯

在Android studio中集成了相當多的工具用於管理程式碼,應該現在經常使用的git的方式來管理管理,用於上傳程式碼或者進行下載程式碼庫中,而在git中進行管理的話,那麼就可以進行歷史的記錄資訊,如果提交的錯誤程式碼,或者在編輯的檔案上傳之後,就可以同追溯的方式,來找回自己需要的內容檔案。 開啟

程式碼統計方法

下面所有方法來自網上: 1 linux find命令 單格式 find -name '*.cpp' | xargs wc -l 多格式 find -name '*[.cpp|.h]' | xargs wc -l 2 git命令 user.