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