Mic*_*dis 2 git bash shell git-log
我有一个目录,里面有很多 Git repo 子目录,我想积累类似于
git shortlog -sne --no-merges
Run Code Online (Sandbox Code Playgroud)
对于其中的所有存储库,按用户的所有总提交对用户进行排序。
例如对于回购 1:
430 Author 1 <author1@email.com>
20 Author 2 <author2@email.com>
Run Code Online (Sandbox Code Playgroud)
例如对于回购 2:
123 Author 1 <author1@email.com>
92 Author 2 <author2@email.com>
Run Code Online (Sandbox Code Playgroud)
总结果:
453 Author 1 <author1@email.com>
112 Author 2 <author2@email.com>
Run Code Online (Sandbox Code Playgroud)
是否可以使用 git 内置工具来做到这一点?
我能够走出 repo 文件夹并为单个文件夹运行它:
git -C repoFolder shortlog -sne --no-merges
Run Code Online (Sandbox Code Playgroud)
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}'
Run Code Online (Sandbox Code Playgroud)
该awk脚本解释说:
name_email="";
Run Code Online (Sandbox Code Playgroud)
对于每个输入行:从空变量开始name_email。
for (i=2; i<=NF; i++) {name_email=name_email " " $i};
Run Code Online (Sandbox Code Playgroud)
将从 2 个空格分隔的所有字段连接到name_email. 即结合所有姓名+电子邮件字段。
count_by_user[name_email]+=$1
Run Code Online (Sandbox Code Playgroud)
创建一个新的关联数组,count_by_user并在每一行中通过第一个字段的值(提交计数)增加值(默认为 0)。
END {for (name_email in count_by_user) print count_by_user[name_email], name_email}
Run Code Online (Sandbox Code Playgroud)
最后打印结果:遍历count_by_user索引(姓名+电子邮件),打印计算出的计数器,打印姓名+电子邮件。结果打印时未排序。可以在非常awk脚本中排序或使用| sort -nr.
与发达国家gawk的版本awk。
| 归档时间: |
|
| 查看次数: |
880 次 |
| 最近记录: |