如何使用 git shortlog 聚合单个目录中多个存储库的用户提交统计信息?
How to use git shortlog to aggregate user commit stats over multiple repositories in a single directory?
我有一个目录,里面有很多 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]+=} 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 space 开始的所有字段加入到 name_email
中。 IE。合并所有姓名+电子邮件字段。
count_by_user[name_email]+=
创建一个新的关联数组count_by_user
并在每一行中增加第一个字段(提交计数)的值(默认为 0)。
END {for (name_email in count_by_user) print count_by_user[name_email], name_email}
最后打印结果:运行 到 count_by_user
索引(姓名+电子邮件),打印计算的计数器,打印姓名+电子邮件。结果未分类打印。可以在 awk
脚本中排序或 post-使用 | sort -nr
.
处理
使用 awk
的 gawk
版本开发。
我有一个目录,里面有很多 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]+=} 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 space 开始的所有字段加入到 name_email
中。 IE。合并所有姓名+电子邮件字段。
count_by_user[name_email]+=
创建一个新的关联数组count_by_user
并在每一行中增加第一个字段(提交计数)的值(默认为 0)。
END {for (name_email in count_by_user) print count_by_user[name_email], name_email}
最后打印结果:运行 到 count_by_user
索引(姓名+电子邮件),打印计算的计数器,打印姓名+电子邮件。结果未分类打印。可以在 awk
脚本中排序或 post-使用 | sort -nr
.
使用 awk
的 gawk
版本开发。