Git多项目提交记录提取与数据分析指南
如何快速获取近3年半多个Git工程的提交记录,包含缩减版commit、提交日期、提交作者、提交标题?本文为你系统梳理方法体系。
1 多项目提交记录批量提取方法
当需要从多个Git工程中提取近3年半的提交记录时,有几种高效的方法可以实现。
1.1 使用Git原生命令格式化输出
Git原生命令最为直接,通过git log
配合格式化参数可以精确提取所需数据:
git log --since="3.5 years ago" --pretty=format:"%h | %cd | %an | %s" --date=short
这个命令中各个参数的作用是:
--since="3.5 years ago"
:指定时间范围为3年半前至今--pretty=format:"..."
:定义输出格式%h
:简短提交哈希(通常7位)%cd
:提交日期%an
:作者姓名%s
:提交标题--date=short
:使用简短日期格式
1.2 批量处理多个仓库
对于多个Git工程,可以编写简单脚本批量处理:
#!/bin/bash# 定义仓库列表
repos=("project1" "project2" "project3")
since_date="2020-04-01" # 3年半前的大致日期for repo in "${repos[@]}"; doecho "提取仓库: $repo"cd "$repo"git log --since="$since_date" --pretty=format:"%h | %cd | %an | %s" --date=short >> ../all_commits.txtcd ..
done
1.3 使用专用工具weekly-git-summary
weekly-git-summary
是一个专门的NPM工具,可以跨平台生成Git提交汇总报告:
# 安装
npm install -g weekly-git-summary# 使用
weekly-git-summary --dir ~/projects --since 2020-04-01 --until 2023-10-20 --author "张三"
该工具支持多种输出格式:
- 文本格式:便于命令行查看
- JSON格式:便于程序进一步处理
- Markdown格式:便于生成报告
2 Git数据分析常用操作大全
掌握了数据提取基础后,我们来看Git数据分析的常用操作。
2.1 提交信息格式化与提取
Git的--pretty=format
参数支持多种占位符,可以灵活定制输出:
类别 | 占位符 | 说明 |
---|---|---|
标识符 | %H | 完整提交哈希 |
%h | 简短提交哈希 | |
作者信息 | %an | 作者姓名 |
%ae | 作者邮箱 | |
日期时间 | %ad | 作者日期 |
%cd | 提交日期 | |
%cr | 相对日期(如"2周前") | |
提交内容 | %s | 提交标题 |
%b | 提交正文 |
实用示例:
# 提取指定提交的详细信息
git log --pretty=format:"%h - %an, %cd : %s" b29b8b6 -1# 生成CSV格式输出,便于导入电子表格
git log --since="3.5 years ago" --pretty=format:'"%h","%cd","%an","%s"' --date=short > commits.csv
2.2 统计与分析操作
基础统计:
# 统计提交数量
git log --oneline | wc -l# 统计代码行数变化
git log --since="3.5 years ago" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2 } END { printf "新增: %s, 删除: %s\n", add, subs }'
作者维度统计:
# 统计每个作者的提交数量
git shortlog -sn --since="3.5 years ago"# 统计每人代码行数变化
git log --since="3.5 years ago" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'
文件变更统计:
# 显示文件变更统计
git log --since="3.5 years ago" --stat --oneline# 仅显示修改过的文件列表
git log --since="3.5 years ago" --name-only --oneline
2.3 高级筛选与过滤
时间范围筛选:
# 固定日期范围
git log --since="2020-01-01" --until="2023-10-20"# 相对时间范围
git log --since="1 year ago" --until="1 month ago"
作者筛选:
# 筛选特定作者
git log --since="3.5 years ago" --author="张三"# 使用正则表达式筛选
git log --since="3.5 years ago" --author="张.*|李.*"
提交信息内容筛选:
# 按提交信息关键词筛选
git log --since="3.5 years ago" --grep="修复"# 筛选涉及特定代码行的提交
git log --since="3.5 years ago" -S"function_name"
3 可视化与高级分析工具
3.1 GitStats代码仓库分析
GitStats能生成包含多种维度的Git仓库统计报告:
安装与使用:
# 克隆项目
git clone https://github.com/hoxu/gitstats.git# 运行分析
python gitstats.py /path/to/your/repo /path/to/output
生成报告内容:
- 常规统计:文件总数、行数、提交量、作者数
- 活跃性统计:每天每小时的提交分布、每周每天的提交模式
- 作者统计:所有作者的提交活动时间线
- 文件统计:按日期和扩展名划分的文件数量
3.2 GitAgent自动化工具
GitAgent可以自动化Git操作,包括智能提交和数据分析:
# 安装
pip install oh-my-git-agent# 查看变更
gcli ls# 使用AI生成提交信息(可选)
gcli --api-key sk-your-deepseek-key
3.3 自定义数据管道
对于高级需求,可以建立完整的数据提取管道:
# 提取数据
git log --since="3.5 years ago" --pretty=format:"%h|%ad|%an|%s" --date=iso --name-status > raw_data.txt# 转换为CSV
echo "commit_hash,date,author,message,files" > commits.csv
awk -F"|" '{print $1","$2","$3","$4}' raw_data.txt >> commits.csv
4 实战案例:团队项目分析
4.1 多仓库提交汇总分析
结合前面提到的方法,多仓库分析可以这样实现:
#!/bin/bash# 配置变量
repos=("前端项目" "后端项目" "移动端项目")
output_file="团队提交汇总.csv"
since_date="2020-04-01"echo "仓库,提交哈希,日期,作者,消息" > "$output_file"for repo in "${repos[@]}"; docd "$repo"git log --since="$since_date" --pretty=format:"$repo,%h,%cd,%an,%s" --date=short >> "../$output_file"cd ..
doneecho "分析完成!结果保存在 $output_file"
4.2 生成可视化报告
使用weekly-git-summary生成Markdown格式报告:
weekly-git-summary --dir ~/team-projects --since 2020-04-01 --md > team_report.md
报告内容示例:
# 工作内容 Git 提交记录汇总- **统计时间范围**: 2020-04-01 到 2023-10-20
- **搜索目录**: ~/team-projects## 前端项目### 2023-10-15
- feat: 添加用户仪表板 (作者: 张三, hash: a1b2c3)
- fix: 修复路由跳转问题 (作者: 李四, hash: d4e5f6)
5 技巧与最佳实践
5.1 性能优化
处理大型仓库时,这些技巧可以提升效率:
# 限制日志输出量
git log --since="3.5 years ago" --max-count=1000# 使用简单格式提高速度
git log --since="3.5 years ago" --oneline# 只关注特定分支
git log --since="3.5 years ago" develop..
5.2 数据清洗与处理
提取的数据通常需要进一步清洗:
# 去除合并提交
git log --since="3.5 years ago" --no-merges# 统一日期格式
git log --since="3.5 years ago" --date=iso# 处理特殊字符
git log --since="3.5 years ago" --pretty=format:"%h|%ad|%an|%s" | sed 's/|/-/g'
5.3 自动化与定期执行
将常用分析脚本化,方便定期执行:
#!/bin/bash
# monthly_git_report.shMONTH=$(date +%Y-%m)
REPORT_DIR="~/git-reports"for repo in /path/to/repos/*; dorepo_name=$(basename "$repo")git -C "$repo" log --since="1 month ago" --pretty=format:"%h|%cd|%an|%s" --date=short > "$REPORT_DIR/$repo_name-$MONTH.csv"
done# 生成汇总报告
weekly-git-summary --dir /path/to/repos --since "1 month ago" --md > "$REPORT_DIR/汇总-$MONTH.md"
设置cronjob每月自动执行:
# 每月1号上午9点执行
0 9 1 * * /path/to/monthly_git_report.sh
总结
通过结合Git原生命令和专用工具,我们可以高效地提取和分析多个工程的Git提交记录。关键步骤包括:
- 选择合适的提取方法:根据需求选择原生Git命令或专用工具
- 规范化输出格式:确保数据的一致性和可处理性
- 批量处理多仓库:通过脚本实现自动化分析
- 数据可视化与报告:使用工具生成易于理解的报告
这些方法不仅适用于单个开发者的项目管理,也能够满足团队级甚至企业级的代码仓库分析需求,为项目管理和技术决策提供数据支持。