如何为项目所有文件执行git log --stat并将结果输出到文件?
实现项目全文件Git修改统计的方法
当然可以!你完全可以遍历项目中所有被Git追踪的文件,执行git log --stat命令并把结果汇总到输出文件里。下面是几种实用的实现方式,适配不同的统计需求:
1. 基础版:遍历所有文件并汇总修改记录
如果你使用Bash终端(Linux/macOS原生终端、Windows的WSL或Git Bash都可以),直接运行这段命令就能生成全文件的统计日志:
for file in $(git ls-files); do # 写入文件标识,方便区分不同文件的统计结果 echo "=== 统计文件: $file ===" >> git_full_stats.log # 执行git log --stat并追加到日志文件 git log --stat "$file" >> git_full_stats.log # 添加分隔线,提升日志可读性 echo -e "\n------------------------\n" >> git_full_stats.log done
运行完成后,当前仓库根目录下会生成git_full_stats.log文件,里面包含每个文件的所有修改记录详情。
2. 进阶版:限定时间范围统计
如果只需要过去几年的统计数据,可以给git log加上--since参数缩小范围。比如要统计过去3年的记录,命令如下:
for file in $(git ls-files); do echo "=== 统计文件: $file (过去3年) ===" >> git_stats_last3years.log git log --since="3 years ago" --stat "$file" >> git_stats_last3years.log echo -e "\n------------------------\n" >> git_stats_last3years.log done
3. 团队分析版:按作者分组统计
针对团队工作统计的需求,你可以结合git shortlog来按作者汇总贡献,更直观地看到每个成员对不同文件的修改情况:
for file in $(git ls-files); do echo "=== 文件: $file 的作者贡献统计 ===" >> git_team_stats.log # -sn 参数会按提交次数排序,显示作者名和提交数,搭配--stat展示修改详情 git shortlog -sn --stat "$file" >> git_team_stats.log echo -e "\n------------------------\n" >> git_team_stats.log done
一些实用小技巧
- 排除不需要统计的目录:如果仓库里有
node_modules、dist这类无需追踪的目录,可以用grep -v过滤,比如:git ls-files | grep -v "node_modules/" - 加速统计:如果文件数量极多,可以考虑分目录统计,比如只遍历
src目录:for file in $(git ls-files src/); do ...
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

