GitLab年度代码贡献统计报告生成工具

admin 2026-01-09 23:21:09 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍了一款本地运行的Python工具,用于生成GitLab年度代码贡献统计报告。工具基于只读APIToken获取元数据,保障隐私与安全,利用多线程提升性能并使用Rich库美化输出。支持统计提交量、代码行数、工作模式分布及高光时刻等维度,能自动过滤锁文件与构建产物。提供一键脚本运行,帮助开发者直观复盘年度编码情况,操作简便且数据安全。 综合评分: 78 文章分类: 安全工具


cover_image

GitLab 年度代码贡献统计报告生成工具

原创

摆烂的beizeng

土拨鼠的安全屋

2026年1月9日 16:59 山东

📊 GitLab 年度代码统计报告

一个本地运行的 Python 脚本,用于生成你的 GitLab 年度代码贡献统计报告。

📝 准备工作

获取 GitLab 个人访问令牌 (Personal Access Token)

在运行脚本之前,你需要先获取 GitLab 的个人访问令牌(只需要只读权限):

  1. 登录 GitLab 访问你的 GitLab 实例(例如:https://gitlab.com

  2. 进入设置页面 点击右上角头像 → Settings(偏好设置) → 左侧菜单 Access Tokens(访问令牌)

    或直接访问:https://你的gitlab域名/-/user_settings/personal_access_tokens

  3. 创建新令牌

  • Token name(令牌名称):随意填写,例如 annual-stats
  • Expiration date(过期日期):选择一个未来的日期,或留空(不过期)
  • Select scopes(选择权限):只需勾选 read_api 即可

⚠️ 仅需只读权限,不要选择写入权限,确保安全

  1. 生成并复制令牌 点击 Create personal access token(创建个人访问令牌) 按钮

⚠️ 重要:令牌只会显示一次!生成后立即复制并保存

  1. 一键运行时粘贴令牌 或者 保存令牌到 .env 文件(后续步骤会引导配置)

⚡ 一键运行

Windows (PowerShell)

# 1. 克隆项目(如果是从 Git 获取)
git clone https://github.com/535803710/annualstats.git
cd annualstats

# 2. 运行一键安装脚本
.\quick_start.ps1

Linux / macOS (Bash) 未测试

# 1. 克隆项目(如果是从 Git 获取)
git clone https://github.com/535803710/annualstats.git
cd annualstats

# 2. 运行一键安装脚本
chmod +x quick_start.sh
./quick_start.sh

💡 脚本会自动:

  • ✅ 检查 Python 环境
  • ✅ 安装依赖
  • ✅ 引导配置 .env 文件
  • ✅ 运行统计脚本

✨ 特性

核心功能

  • 🔒 安全优先: Token 通过 .env 文件读取,绝不硬编码
  • 🛡️ 隐私保护: 仅读取元数据 (Commit 统计),绝不读取代码内容
  • ⚡ 高性能: 多线程并发请求,快速获取数据
  • 🎨 美观输出: 使用 Rich 库在终端展示精美表格和进度条
  • 🧹 智能过滤: 自动过滤锁文件、构建产物、Merge Commit 等无效数据

统计维度

📊 基础统计

  • 总提交次数、增删行数、净增行数
  • 参与项目数、活跃天数
  • 平均每次提交行数

🏆 高光时刻

  • 🔥 最高产的一天(哪一天干的最多)
  • 🌙 最晚提交时间(哪一天熬夜到最晚)
  • 📅 最忙的月份
  • 🔥 最长连续工作天数

⏰ 工作模式分析

  • 工作日 vs 周末提交占比
  • 深夜代码占比 (22:00-6:00)
  • 星期几最忙?(周一到周日分布)
  • 24小时活跃度(每4小时时间段统计)

📈 项目与趋势

  • 最活跃项目 Top 5
  • 月度提交趋势图

🚀 快速开始

方式一:一键脚本(推荐)

Windows:

.\quick_start.ps1

Linux/macOS:

chmod +x quick_start.sh && ./quick_start.sh

方式二:手动安装

1. 安装依赖

pip install -r requirements.txt

2. 配置环境变量

复制 .env.example 为 .env 并填写你的 GitLab 信息:

cp .env.example .env

编辑 .env 文件:

GITLAB_URL=https://your-gitlab.com
PRIVATE_TOKEN=your_token_here

💡 如何获取 Token: GitLab → Settings → Access Tokens → 创建一个具有 read_api 权限的 Token

3. 运行脚本

# 统计 2024 年
python main.py --year 2024

# 统计当前年份
python main.py

📋 命令行参数

| 参数 | 说明 | 默认值 | | — | — | — | | --year | 统计的年份 | 当前年份 | | --emails | 额外的邮箱列表 (逗号分隔) | 无 |

📊 输出示例

╭──────────────────────────────────────────────────╮
│           🎉 2025 年度代码统计报告               │
╰──────────────────────────────────────────────────╯

         📊 总览
┏━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ 指标       ┃     数值 ┃
┡━━━━━━━━━━━━╇━━━━━━━━━━┩
│ 总提交次数 │    1,269 │
│ 总增加行数 │ +174,457 │
│ 总删除行数 │  -71,265 │
│ 净增行数   │ +103,192 │
│ 参与项目数 │        5 │
│ 活跃天数   │   245 天 │
│ 平均每次提交│   193.6 行│
└────────────┴──────────┘

      🏆 高光时刻
┏━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 成就           ┃ 详情                             ┃
┡━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ 🔥 最高产的一天│ 2025-07-15 (23 次提交, +2345/-876)│
│ 🌙 最晚提交时间│ 2025-11-20 23:47                   │
│ 📅 最忙的月份  │ 2025-07 (155 次提交)               │
│ 🔥 最长连续工作│ 18 天                              │
└────────────────┴──────────────────────────────────┘

    ⏰ 工作模式分析
┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━┓
┃ 维度               ┃   统计 ┃ 占比 ┃
┡━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━┩
│ 工作日提交         │ 945 次 │ 74.5%│
│ 周末提交           │ 324 次 │ 25.5%│
│ 深夜代码 (22-6)    │  89 次 │  7.0%│
└────────────────────┴────────┴──────┘

   📅 星期几最忙?
┏━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 星期 ┃ 提交数 ┃ 活跃度                       ┃
┡━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ 周一 │    205 │ █████████████████            │
│ 周二 │    189 │ ███████████████              │
│ 周三 │    198 │ ████████████████             │
│ 周四 │    176 │ ██████████████               │
│ 周五 │    177 │ ██████████████               │
│ 周六 │    162 │ █████████████                │
│ 周日 │    162 │ █████████████                │
└──────┴────────┴──────────────────────────────┘

   ⏰ 24小时活跃度
┏━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 时间段      ┃ 提交数 ┃ 活跃度                               ┃
┡━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ 深夜 00-04  │     12 │ ██                                   │
│ 清晨 04-08  │     45 │ ████████                             │
│ 上午 08-12  │    356 │ ██████████████████████████████       │
│ 下午 12-16  │    423 │ ████████████████████████████████████ │
│ 傍晚 16-20  │    267 │ ████████████████████                 │
│ 晚上 20-24  │    166 │ ████████████                         │
└─────────────┴────────┴──────────────────────────────────────┘

🏆 最活跃项目 Top 5
...

🔍 过滤规则

以下文件/目录的变更不会被统计:

  • 锁文件package-lock.jsonyarn.lockpnpm-lock.yamlPodfile.lockgo.sum
  • 压缩文件*.min.js*.min.css
  • 构建产物dist/build/node_modules/vendor/
  • Merge Commit: 标题包含 “Merge branch” 或 “Merge request” 的提交

⚠️ 单次 Commit 超过 5000 行变更时会提示确认,防止引入大型库文件导致数据失真。

🔐 隐私声明

本工具严格遵循 Metadata Only 原则:

  1. ✅ 只调用获取 Commit 统计信息的 API (additions/deletions)
  2. ❌ 绝不 调用 repository_files 或 diff 接口读取代码内容
  3. ✅ 所有逻辑在本地执行,不上传任何数据到第三方服务器
  4. ✅ 脚本运行结束后,内存中不保留任何数据

📝 License

地址:https://github.com/535803710/annualstats


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:土拨鼠的安全屋 摆烂的beizeng《GitLab 年度代码贡献统计报告生成工具》

如何巧用VPS解题? 网络安全文章

如何巧用VPS解题?

文章总结: 本文介绍利用VPS解决HITCONWeb题目的RCE技巧。核心在于通过换行符绕过正则限制,结合tar打包特性及十进制IP绕过IP过滤。通过在VPS准
评论:0   参与:  0