如何统计远程GitLab仓库各文件类型的变更文件数与行数(含时间窗口)
自动化统计GitLab仓库指定时间窗口内的文件变更数据
嘿,我刚好有几个实用的命令组合能帮你搞定这个自动化统计需求,不用再手动数文件和行数啦!下面分两种统计目标给出具体方案,你可以根据自己的需求调整参数:
一、统计各文件类型的变更文件数量
这个命令会帮你统计指定时间范围内,每种文件类型被修改过的唯一文件数量(同一个文件多次提交只算一次):
# 先确保本地仓库同步了远程最新数据(可选,已同步过可跳过) git fetch origin # 统计最近两周内的变更文件类型分布,可替换分支和时间范围 git log origin/main --since="2 weeks ago" --until="now" --name-only --pretty=format:'' | \ grep -v '^$' | \ awk -F. '{ if (NF > 1) { # 处理多后缀文件(如.tar.gz),保留完整后缀 suffix = "" for (i=2; i<=NF; i++) { suffix = suffix (i==2 ? "" : ".") $i } print suffix } }' | \ sort | \ uniq -c | \ sort -nr
参数调整说明:
origin/main:替换成你要统计的目标远程分支(如origin/develop)--since="2 weeks ago" --until="now":可替换为具体日期范围,比如--since="2024-05-01" --until="2024-05-14"- 若不需要处理多后缀文件,可把awk部分简化为
awk -F. '{if (NF>1) print $NF}',此时.tar.gz会被统计为gz
二、统计各文件类型的变更代码行数
这个命令会统计每种文件类型的新增行数、删除行数以及净变化行数,自动跳过二进制文件:
git fetch origin git log origin/main --since="2 weeks ago" --until="now" --numstat --pretty=format:'' | \ awk '{ # 跳过二进制文件(增删行数显示为"-") if ($1 != "-" && $2 != "-") { split($3, ext_arr, ".") if (length(ext_arr) > 1) { # 处理多后缀文件 suffix = "" for (i=2; i<=length(ext_arr); i++) { suffix = suffix (i==2 ? "" : ".") ext_arr[i] } add[suffix] += $1 del[suffix] += $2 } } } END { for (type in add) { total = add[type] - del[type] printf "%-10s +%6d -%6d (净变化: %6d)\n", type, add[type], del[type], total } }' | \ sort -k5nr
额外实用技巧:
- 若只想统计特定文件类型,可在awk前加过滤,比如
grep '\.java$'只保留Java文件的统计结果 - 要把统计结果导出到文件,只需在命令末尾加上
> change_stats.txt,结果会自动保存到该文件中 - 大型仓库执行命令可能需要几秒时间,稍作等待即可
内容的提问来源于stack exchange,提问作者Mega
相关产品推荐
相关产品推荐

