如何计算每个贡献者对Git或Gerrit中的Code单词的贡献百分比?

时间:2019-01-21 07:57:00

标签: git commit gerrit

场景是... 想象正在进行一个项目开发,并且许多贡献者正在添加和编辑代码... 通过使用提交和评论,如何从每个贡献者和每个提交中获取在代码中添加和删除的行数?基于此,如何计算每个人对代码贡献的百分比?

1 个答案:

答案 0 :(得分:1)

您可以通过遍历用户并使用git log中的--shortstat选项来完成此操作:

要获取所有提交的所有人的所有 commit 电子邮件地址,请运行以下命令:

git log --pretty="%ce%n" | sort | uniq

这将打印出所有电子邮件地址,对它们进行排序,并由此创建一个唯一列表。 然后可以使用以下脚本将其设置为变量,以遍历它们以获取提交,添加和删除的次数:

git log --author=$USER --shortstat $BRANCH | \
awk '/^ [0-9]/ { f += $1; i += $4; d += $6 } \
END { printf("%d files changed, %d insertions(+), %d deletions(-)", f, i, d) }'

完整的脚本如下:

# Loop through users
for user in $(git log --pretty="%ce%n" | sort | uniq);
do
   # print user email
   echo "$user"
   # print total files changed, total insertions, total deletions
   echo $(git log --author="${user}" --shortstat 'master' | awk '/^ [0-9]/ { f += $1; i += $4; d += $6 } END { printf("%d files changed, %d insertions(+), %d deletions(-)", f, i, d) }')
done

上面的脚本将从 master 分支输出统计信息。

示例

我已经签出(git clone https://github.com/MunGell/awesome-for-beginners)了一个small repository,创建了一个文件script.sh,并使其可以在chmod +x script上运行。运行脚本时,它会显示以下输出:

已查看电子邮件...

user1@gmail.com
2 files changed, 2 insertions(+), 1 deletions(-)
user2@users.noreply.github.com
22 files changed, 45 insertions(+), 28 deletions(-)
user3.amalik07@gmail.com
1 files changed, 1 insertions(+), 0 deletions(-)
user4@iastate.edu
2 files changed, 5 insertions(+), 1 deletions(-)
user5@gmail.com
1 files changed, 3 insertions(+), 3 deletions(-)
user6@mozilla.com
2 files changed, 8 insertions(+), 1 deletions(-)
user7@domain.co
1 files changed, 1 insertions(+), 0 deletions(-)
user8@domain.com
1 files changed, 1 insertions(+), 0 deletions(-)
user9@domain.me
1 files changed, 1 insertions(+), 0 deletions(-)
user10@perguth.de
1 files changed, 1 insertions(+), 0 deletions(-)
user11@gmail.com
1 files changed, 1 insertions(+), 0 deletions(-)
user12@mozilla.com
0 files changed, 0 insertions(+), 0 deletions(-)
user13@gmail.com
1 files changed, 1 insertions(+), 0 deletions(-)
user14@github.com
0 files changed, 0 insertions(+), 0 deletions(-)
user15@gmail.com
1 files changed, 1 insertions(+), 0 deletions(-)
user16@umich.edu
1 files changed, 1 insertions(+), 0 deletions(-)
user17@up-nxt.com
2 files changed, 3 insertions(+), 2 deletions(-)
user18@hotmail.com
1 files changed, 1 insertions(+), 0 deletions(-)
user19@mozilla.com
2 files changed, 52 insertions(+), 52 deletions(-)
user20@gmail.com
8 files changed, 83 insertions(+), 8 deletions(-)
user21@gmail.com
3 files changed, 3 insertions(+), 0 deletions(-)
user22@gmail.com
1 files changed, 4 insertions(+), 0 deletions(-)
user23@talater.com
1 files changed, 1 insertions(+), 0 deletions(-)
user24@gmail.com
4 files changed, 5 insertions(+), 1 deletions(-)