背景
平时的项目研发一般都是持续一年或者数年:
- 作为项目成员,你可能想知道自己到底贡献了多少了 commit,对项目的贡献有多大。
- 作为团队的 leader 通过打印出项目的 commit 数量,可以知道谁贡献最多,然后合理安排工作。
- 作为开源作者,可以知道谁最活跃,了解他们的贡献。
因此,Git 仓库根据提交数量打印作者排行榜,对于项目管理和开发人员都具有重要的意义。
实现步骤
大致步骤如下:
- 获取作者
- 打印作者的 commit 数量
- 按数量排序
git log 打印出作者
要想打印出贡献者,还是得用 git 来实现,我们需要用到熟悉的 git log,然后用它的 格式化输出功能——format='%an', %an 是 Git log 的一个格式化参数,表示只输出每次提交的作者名字。
$ git log --format='%an'
Alice
Bob
Denise
Denise
Candice
Denise
Alice
Alice
Alice
在进行下一个步骤之前,还需要处理下,对名字进行排序,现在我们可以使用 sort 程序按字母顺序对它们进行排序,两个命令之间通过管道符来连接,管道符前面的输出结果会作为后面的输入,一个非常实用的命令。
$ git log --format='%an' | sort
Alice
Alice
Alice
Alice
Bob
Candice
Denise
Denise
Denise
运行命令,这样我们得到每次提交的作者名字,并且按照英文字母顺序进行排序。
输出数量
上面我们得到是每次提交的作者名字,我们只需要统计重复名字出现的次数即可得到,贡献者贡献的数量了,这是通过去重来实现的,接下来我们使用 uniq,命令之间依然通过管道符来连接:
$ git log --format='%an' | sort | uniq -c
4 Alice
1 Bob
1 Candice
3 Denise
根据 uniq 的使用手册,它的解释为:
uniq - 报告或省略重复行
从 INPUT(或标准输入)中过滤相邻的匹配行,写入 OUTPUT(或标准输出)。
需要注意的是 uniq 打印出重复的行,且只打印出相邻的行。这就是为什么我们必须先将输出传递给sort进行排序,再使用 uniq 命令的原因,uniq 的 -c 标志在每行前面加上出现次数。
按照数量排序
您可以看到输出仍然按字母顺序排序。所以现在剩下的就是按数字排序。排序依然使用的是 sort 命令,sort 在 flag 中有一个标志 -n,意思是是根据数字的数值从小到大排序,可以理解为默认情况下,它按升序排序,-r 标志表示以相反的顺序打印列表。然后你就有他们的——根据提交次数排序的作者列表了。
$ git log --format='%an' | sort | uniq -c | sort -nr
4 Alice
3 Denise
1 Candice
1 Bob
文章到这里就结束了,你可以复制命令:git log --format='%an' | sort | uniq -c | sort -nr 到你的项目看看自己的贡献是不是排在第一了,如果是中午自己加个鸡腿子。
最后
掘金 4月日新计划更文活动 活动已经开启,错过了两天,现在还有 31 天,这意味着中间毫无出错,每天一天才能拿到奖励,另外除了周末的诱惑,中间还隔着一个五一。
下面是我根据活动总结的一些记不住的规则:
- 字数不得少于500字
- 正式投稿时间:2023 年 4 月10 日~5 月 12 日
- 选择「4月日新计划更文活动」话题,即投稿成功
- 预计 5 月 23 日公布获奖信息