Git中如何根据近1年文件的贡献作者数量对文件排序
实现方案
命令说明
提供两种统计逻辑的命令,按需选择:
1. 统计所有提交过该文件的作者(包含历史上修改过但代码已被覆盖的贡献者)
该逻辑统计范围更全,只要近1年对该文件提交过代码就算贡献作者:
git log --since="1 year ago" --name-only --pretty=format: \ | grep -v '^$' | sort | uniq \ | while IFS= read -r file; do if [ -f "$file" ]; then author_count=$(git log --follow --since="1 year ago" --pretty=format:"%an" -- "$file" | sort -u | wc -l | tr -d ' ') echo "$author_count $file" fi done \ | sort -nr
2. 仅统计现存代码行的贡献作者(和你原用blame逻辑一致)
该逻辑仅统计最终留存的代码行对应的作者,和你原来使用git blame的统计逻辑一致:
git log --since="1 year ago" --name-only --pretty=format: \ | grep -v '^$' | sort | uniq \ | while IFS= read -r file; do if [ -f "$file" ]; then author_count=$(git blame --line-porcelain "$file" 2>/dev/null | sed -n 's/^author //p' | sort -u | wc -l | tr -d ' ') echo "$author_count $file" fi done \ | sort -nr
输出说明
- 输出第一列为该文件的不同贡献作者数量,第二列为文件路径
- 默认按作者数量从高到低排序,如需只看前N个结果,在命令末尾添加
| head -N即可,例如| head -20查看前20个文件
优化提示
如果仓库文件数量大、命令运行慢,可以缩小统计范围:在第一个git log命令末尾添加需要统计的目录路径,例如只统计src目录下的文件,修改为:git log --since="1 year ago" --name-only --pretty=format: -- src/
内容的提问来源于stack exchange,提问作者Roshan
相关产品推荐
相关产品推荐

