之前有介紹使用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仓库中不同贡献者的代码行数的一些方法