You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计远程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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:57:13