开发人员进行提交,合并分支,覆盖彼此的代码。他们进来并重构或添加新功能。代码是迭代的。
是否有一个很好的git机制来查找哪个开发人员在当前分支中使用最多的代码?
例如:
git blame
将显示开发人员 Y 和 Z 作为每行50行代码的作者。
根据相同的 blame ,开发人员 X 负责0行代码。
但是,我们知道 X 写了原始的100行。因此,我想知道每个开发人员的贡献。
考虑到当前仍在使用的代码行:是否有一个良好的git
机制来查找谁在这些行的历史中贡献最多?
答案 0 :(得分:3)
非常有趣的问题!感谢您的提问 - 偶尔我的团队也需要这些。
我快速找到了你想要的东西:
需要的是作者grep对git blame --line-porcelain
的输出。
(for f in `git ls-files`; do git blame --line-porcelain $f |
grep 'author '; done) |
awk '{cnt[$_]++} END {for (x in cnt) print cnt[x],x}' | sort -rn -k1
它不是火箭科学,也不是速度恶魔。它只是使用标准Unix工具对所有存储库文件的git blame
输出进行聚合。但它显示了一些整洁的输出..
git ls-files
返回的所有文件的行计数器的总和,这是我们所期望的。
Elixir语言的存储库示例:
97037 author José Valim
3151 author Aleksei Magusev
3017 author Alexei Sholik
3003 author James Fish
2837 author Bryan Enders
2677 author Eric Meadows-Jönsson
2667 author eksperimental
1604 author Andrea Leopardi
1109 author Bryan Endersstocker
1073 author Eric Meadows-Jonsson
1058 author Yurii Rashkovskii
901 author Yuki Ito
828 author Rafael Mendonça França
735 author John Warwick
689 author Paulo Almeida
[...]
请注意使用git blame --line-porcelain
代替git blame --incremental
。后者在与提交相对应的记录中输出信息,而不是单行;所以计算是错误的。
[ EDIT note ]无论是谁查看原始答案,它都包含一个错误,该错误与适当的解决方案一起解释,后来由社区编辑以缩短消息。