我有一个包含很多Git repo子目录的目录,我想积累类似于以下内容的信息
git shortlog -sne --no-merges
对于其中的所有回购,将按用户的总提交次数对其进行排序。
例如回购1:
430 Author 1 <[email protected]>
20 Author 2 <[email protected]>
例如回购2:
123 Author 1 <[email protected]>
92 Author 2 <[email protected]>
总结果:
453 Author 1 <[email protected]>
112 Author 2 <[email protected]>
使用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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句