Git的簡單統計 用指令

之前有介紹使用GitStats的工具來統計Git的log。
它會像Github一樣給你這個專案從頭到目前的各式各樣統計結果。
非常的好玩,而且不管是安裝還是使用上也相當簡單。

不過!它只不支援Windows。

那Windows的使用者怎辦?我也想統計呀?!
難道一定要上傳Github?(誤)
搞一個Linux的VM?(誤)
把Git弄得更熟練!!!!!!

「Git很神,一定有這功能的!」

就這樣找呀找。
終於找到一些有趣的來玩。

第一招

顯示每一次commit的日期、作者(這個可以自訂[1])
檔案修改、增加的行數、去除掉的行數

顯示的結果如下

Mon Aug 18 16:48:42 2014 +0800 Ken
1 file changed, 2 insertions(+), 2 deletions(-)

Mon Aug 18 16:12:16 2014 +0800 Ken
4 files changed, 57 insertions(+), 39 deletions(-)

Thu Aug 14 16:51:22 2014 +0800 Ken
1 file changed, 7 insertions(+), 5 deletions(-)

Thu Aug 14 14:35:53 2014 +0800 Ken
1 file changed, 7 insertions(+), 5 deletions(-)
...

在Bash下指令

git log --shortstat --pretty=format:"%cd %an" --author=ken --since="2014-05-06"

參數說明

--shortstat     簡短的統計內容
--pretty=format:"%cd %an"     每個commit的標題指定格式(在此指定: 日期、作者)
--author=ken    過濾作者字串

--author    列出作者名稱符合指定字串的更新。
--committer     列出提交者名稱符合指定字串的更新。

限制時間區間

--since="2014-05-06"
從2014/05/06開始找

-(n)    僅顯示最後 n 個更新
--since, --after      列出特定日期後的更新。
--until, --before     列出特定日期前的更新。

第二招[2]

統計commit的數目

顯示的結果如下

   356  chris
   317  YuKai
   113  Ken Tseng
    70  Kimi Lu
    37  vul3yo6
    29  Ken

在Bash下指令

git shortlog --numbered --summary

參數說明

--numbered 依commit數目排序(原本預設是依作者字母順序排列)
--summary 不顯示commit的標題文字,只顯示統計數字

第三招[2]

顯示這個專案所有時間統計下來的
作者、修改檔案數、增加行數、刪除行數、增加行數-刪除行數

顯示結果

chris,:  9497 fils, (+)1513667 (-)473535 = 104013
chris,vul3yo6,:  5 fils, (+)28 (-)28 = 0
chris,yukai,:  20 fils, (+)426 (-)454 = -28
vul3yo6,:  989 fils, (+)184025 (-)15499 = 168526
vul3yo6,yukai,:  25 fils, (+)936 (-)460 = 476
yukai,:  4859 fils, (+)689366 (-)338120 = 351246
yukai,chris,:  76 fils, (+)5127 (-)825 = 4302
yukai,vul3yo6,:  22 fils, (+)315 (-)44 = 271
yukai,zc1145,:  12 fils, (+)45 (-)39 = 6
zc1145,:  453 fils, (+)27439 (-)6025 = 21414
zc1145,yukai,:  38 fils, (+)866 (-)264 = 602
zc1145,yukai,vul3yo6,: 7 fils, (+)749 (-)71 = 678

在Bash下指令(超長的)

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 " fils, (+)" insertions " (-)" deletions " = " insertions-deletions ; files=0; insertions=0; deletions=0; name=$1; }  name=$1; files+=$2; insertions+=$3; deletions+=$4} END {print name ": " files " fils, (+)" insertions " (-)" deletions " = " insertions-deletions ;}'

參考資料:
[1] 2.3 Git 基礎 - 檢視提交的歷史記錄
[2] 统计本地Git仓库中不同贡献者的代码行数的一些方法

沒有留言:

張貼留言

(什麼是留言欄訊息?)