文章总结: 本文介绍了一款本地运行的Python工具,用于生成GitLab年度代码贡献统计报告。工具基于只读APIToken获取元数据,保障隐私与安全,利用多线程提升性能并使用Rich库美化输出。支持统计提交量、代码行数、工作模式分布及高光时刻等维度,能自动过滤锁文件与构建产物。提供一键脚本运行,帮助开发者直观复盘年度编码情况,操作简便且数据安全。 综合评分: 78 文章分类: 安全工具
GitLab 年度代码贡献统计报告生成工具
原创
摆烂的beizeng
土拨鼠的安全屋
2026年1月9日 16:59 山东
📊 GitLab 年度代码统计报告
一个本地运行的 Python 脚本,用于生成你的 GitLab 年度代码贡献统计报告。
📝 准备工作
获取 GitLab 个人访问令牌 (Personal Access Token)
在运行脚本之前,你需要先获取 GitLab 的个人访问令牌(只需要只读权限):
-
登录 GitLab 访问你的 GitLab 实例(例如:
https://gitlab.com) -
进入设置页面 点击右上角头像 → Settings(偏好设置) → 左侧菜单 Access Tokens(访问令牌)
或直接访问:
https://你的gitlab域名/-/user_settings/personal_access_tokens -
创建新令牌
- Token name(令牌名称):随意填写,例如
annual-stats - Expiration date(过期日期):选择一个未来的日期,或留空(不过期)
- Select scopes(选择权限):只需勾选
read_api即可
⚠️ 仅需只读权限,不要选择写入权限,确保安全
- 生成并复制令牌 点击 Create personal access token(创建个人访问令牌) 按钮
⚠️ 重要:令牌只会显示一次!生成后立即复制并保存
- 一键运行时粘贴令牌 或者 保存令牌到
.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.json,yarn.lock,pnpm-lock.yaml,Podfile.lock,go.sum - 压缩文件:
*.min.js,*.min.css - 构建产物:
dist/,build/,node_modules/,vendor/ - Merge Commit: 标题包含 “Merge branch” 或 “Merge request” 的提交
⚠️ 单次 Commit 超过 5000 行变更时会提示确认,防止引入大型库文件导致数据失真。
🔐 隐私声明
本工具严格遵循 Metadata Only 原则:
- ✅ 只调用获取 Commit 统计信息的 API (
additions/deletions) - ❌ 绝不 调用
repository_files或diff接口读取代码内容 - ✅ 所有逻辑在本地执行,不上传任何数据到第三方服务器
- ✅ 脚本运行结束后,内存中不保留任何数据
📝 License
地址:https://github.com/535803710/annualstats
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:土拨鼠的安全屋 摆烂的beizeng《GitLab 年度代码贡献统计报告生成工具》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。







评论