Git 仓库根据提交数量打印作者排行榜

906 阅读2分钟

背景

平时的项目研发一般都是持续一年或者数年:

  • 作为项目成员,你可能想知道自己到底贡献了多少了 commit,对项目的贡献有多大。
  • 作为团队的 leader 通过打印出项目的 commit 数量,可以知道谁贡献最多,然后合理安排工作。
  • 作为开源作者,可以知道谁最活跃,了解他们的贡献。

因此,Git 仓库根据提交数量打印作者排行榜,对于项目管理和开发人员都具有重要的意义。

实现步骤

大致步骤如下:

  1. 获取作者
  2. 打印作者的 commit 数量
  3. 按数量排序

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 天,这意味着中间毫无出错,每天一天才能拿到奖励,另外除了周末的诱惑,中间还隔着一个五一。

下面是我根据活动总结的一些记不住的规则:

  1. 字数不得少于500字
  2. 正式投稿时间:2023 年 4 月10 日~5 月 12 日
  3. 选择「4月日新计划更文活动」话题,即投稿成功
  4. 预计 5 月 23 日公布获奖信息