首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Git 程式碼統計自動化腳本:按月統計各成員提交次數與增刪行數

     編輯:Java 綜合教學

腳本架構三層設計

腳本職責輸出
GetStat.sh主控腳本,遍歷專案彙總 CSVgoluk.csv
GetAllByMon.sh單專案統計:提交次數、代碼增刪行commit.txt detail.txt every.txt
Getrepo.sh首次批次 clone 所有倉庫本地鏡像目錄

目錄結構範例

.
├── GetStat.sh
├── cdc.txt                    # 專案名 + 相對目錄
├── android/
│   ├── GetAllByMon.sh
│   ├── cdc.txt                # Git URL 列表
│   └── workspace-goluk/       # 已 clone 倉庫
└── firmware/
    ├── GetAllByMon.sh
    └── ...

關鍵 Git 指令解析

1. 提交次數統計(按月)

git log --pretty='%aN' --since=2016-01-01 --until=2016-01-31 \
  | sort | uniq -c | sort -k1 -nr

2. 總增刪行數

git log --author='^.*' --pretty=tformat: --numstat \
  --since=2016-01-01 --until=2016-01-31 \
| awk '{add+=$1; del+=$2} END {print add, del, add-del}'

3. 個人明細增刪行

git log --pretty='tformat:%aN' --numstat \
  --since=2016-01-01 --until=2016-01-31 \
| awk '!/^$/ {
    if ($1 ~ /^[a-zA-Z]+$/) {  # 作者行
        if (NR>1) print prev, adds, dels
        prev=$1; adds=0; dels=0
    } else {                   # numstat 行
        adds+=$1; dels+=$2
    }
} END {print prev, adds, dels}'

彙總邏輯

# commit.txt → 每人總提交次數
awk '{sum[$2]+=$1} END {for(i in sum) print i, sum[i]}' commit.txt | sort -k2 -nr > total.txt

# every.txt → 每人總增刪行
awk '!/^$/ { ... }' every.txt \
| awk '{cnt[$1]++; adds[$1]+=$2; dels[$1]+=$3}
       END {for(i in cnt) printf "%-20s %10d %10d %10d %10d\n", i, cnt[i], adds[i], dels[i], adds[i]-dels[i]}'

使用前提與注意事項

  • 統計機器需具備**所有倉庫讀取權限**(SSH Key 或 Token)
  • cdc.txt 格式:專案名 相對目錄,**尾行不可留空**
  • 分支可透過參數 $2 指定,預設 develop
  • 月份參數 $1 (1-12),自動拼接 2016-MM-01 ~ 2016-MM-31

常見問題排查

現象原因對策
統計結果為 0倉庫未 clone 或分支錯誤先執行 Getrepo.sh,確認 git checkout $Branch 成功
作者名大小寫不一致Git 設定差異統計前統一 git config --global user.name 或後處理合併
跨年月份統計腳本僅支援單月修改 --since/--until 邏輯支援年月範圍

將三支腳本納入 Jenkins/Cron 定時任務,即可實現團隊程式碼貢獻度自動化月報,支援多專案、多倉庫、多彎道並行開發場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved