bash - 如何使用 git shortlog 在单个目录中的多个存储库中汇总用户提交统计信息?
问题描述
我有一个目录,里面有很多 Git repo 子目录,我想积累类似的信息
git shortlog -sne --no-merges
对于其中的所有存储库,按用户的所有总提交对用户进行排序。
例如对于回购 1:
430 Author 1 <author1@email.com>
20 Author 2 <author2@email.com>
例如对于回购 2:
123 Author 1 <author1@email.com>
92 Author 2 <author2@email.com>
总结果:
453 Author 1 <author1@email.com>
112 Author 2 <author2@email.com>
是否可以使用 git 内置工具来做到这一点?
我能够离开 repo 文件夹并为单个文件夹运行它:
git -C repoFolder shortlog -sne --no-merges
解决方案
cd
在循环中进入每个子目录并使用以下方法处理git shortlog
输出awk
:
for d in *; do git -C $d shortlog -ens --no-merges; done |
awk '{name_email=""; for (i=2; i<=NF; i++) {name_email=name_email " " $i}; count_by_user[name_email]+=$1} END {for (name_email in count_by_user) print count_by_user[name_email], name_email}'
awk
脚本解释:
name_email="";
对于每个输入行:从空变量开始name_email
。
for (i=2; i<=NF; i++) {name_email=name_email " " $i};
加入从 2 空格分隔的所有字段到name_email
. 即结合所有姓名+电子邮件字段。
count_by_user[name_email]+=$1
创建一个新的关联数组count_by_user
,并在每一行中增加第一个字段的值(默认为 0)(提交计数)。
END {for (name_email in count_by_user) print count_by_user[name_email], name_email}
最后打印结果:遍历count_by_user
索引(姓名+电子邮件),打印计算出的计数器,打印姓名+电子邮件。结果未排序打印。可以在非常awk
脚本中排序或使用| sort -nr
.
使用. gawk
_awk
推荐阅读
- arrays - 在 Perl 的数组数组中删除 undef
- c# - C#,将多行插入 SQL 数据库
- html - 如何更改此 HTML 文件中文本的颜色?
- kotlin - 如何以“yyyy-mm-dd hh:mm:ss”格式反序列化日期?
- django - 带有关键字参数的命名 URL 的 NoReverseMatch
- laravel - 在 laravel 验证规则中使用 if 条件
- python - Django:是否有可以将断言作为子测试运行的 assertNumQueries 方法?
- node.js - multer s3的上传功能出错但错误为空
- javascript - fluent-ffmpeg typeError 尝试保存文件时
- tensorflow - ValueError: 层序号_3 的输入 0 与层不兼容:预期 ndim=5,发现 ndim=4。收到的完整形状:(无、288、432、3)