推特按照代码行数来裁员?赶快看一下自己在 Git 仓库中的贡献有多少
据说推特是按照代码行数来裁员的。怎么才能知道自己到底贡献了多少代码呢?本文来告诉你。
绝大部分公司都使用 git 来管理源代码。git 的 commit 是以行为单位的。每个 commit 可以看到添加或删除的行。通过计算全部 commit 中添加或删除的行的数量,就可以看出一个人在代码仓库中的贡献有多少。
第一步,查看自己在 git 仓库中的贡献。
通过 git log
命令就可以查看。只需要复制粘贴这条命令,把 <邮件地址>
替换成自己在 git 仓库中使用的地址,运行之后就可以看到输出的结果了。
git log --author="<邮件地址>" --no-merges --no-show-signature --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "添加的行数: %s, 删除的行数: %s, 总行数: %s\n", add, subs, loc }' -
输出的结果类似下面这样的:
添加的行数: 38070, 删除的行数: 68072, 总行数: -30002
第二步,查看公司所有人在 git 仓库中的贡献。
这一步是确定自己在贡献排行中的位置,同样的复制粘贴脚本再运行。
git log --no-merges --no-show-signature --pretty=format:%an --numstat | awk '/./ && !author { author = $0; next } author { ins[author] += $1; del[author] += $2 } /^$/ { author = ""; next } END { for (a in ins) { printf "%10d %10d %10d %s\n", ins[a] - del[a], ins[a], del[a], a } }' | sort -rn
输出的结果会按照总行数来进行排序。结果一共有 4 列,分别是总行数、添加的行数、删除的行数和名字。
下面是 Spring 框架的贡献者的排行榜的一部分:
645708 732238 86530 Arjen Poutsma
241568 472056 230488 Rossen Stoyanchev
84111 113974 29863 Thomas Risberg
82777 111029 28252 Stephane Nicoll
68131 270734 202603 Chris Beams
67341 226088 158747 Sam Brannen
67258 91641 24383 Sebastien Deleuze
40399 121776 81377 Andy Clement
35374 136229 100855 Brian Clozel
24461 229173 204712 Phillip Webb
19649 70753 51104 Keith Donald
18111 18430 319 Mark Paluch
12734 21256 8522 rstoyanchev
8837 12209 3372 Sébastien Deleuze
7472 21998 14526 Mark Pollack
6847 8155 1308 Mark Fisher
5005 9039 4034 David Syer
4895 6243 1348 Oliver Gierke
4323 4988 665 sdeleuze
4193 5355 1162 Violeta Georgieva
3916 16517 12601 Costin Leau
3385 3876 491 Scott Andrews
3265 3457 192 Ramnivas Laddad
2983 19080 16097 Jay Bryant
上面说到的做法都需要执行脚本。有没有更加容易的做法呢?可以用工具。
这里介绍两个工具。第一个是 git-quick-stats
。使用 Homebrew 就可以安装。
brew install git-quick-stats
git-quick-stats
提供的功能很多,如下图所示。
第一个选项是我们需要运行的。
运行的结果如下所示。
git-quick-stats
所提供的结果是比较详细的,但是没有按照贡献值排序。
第二个工具是 git-fame, 使用 Ruby开发,可以通过 gem
安装。
gem install git_fame
安装了之后,运行下面的命令就可以查看结果。
git fame <git 目录>
git-fame
的输出会更加美观一点。
git-fame
的问题在于执行起来非常慢。稍微大一点的 git 仓库,执行就会卡住,很长时间都没有结果。