Git - 显示作者贡献的统计数据

Ano*_*ous 11 git

我在Android工作室的一个git项目上与一个团队合作,我希望看到每个作者在编写的行或行编辑等方面的贡献...是否有这样的工具/插件可以显示统计信息作者?

Jac*_*uer 24

对于那些喜欢更内置解决方案的人,此脚本只需使用git, grep, & awk

例子

$ git user-stats
Email                           Commits         Files           Insertions      Deletions       Total Lines
-----                           -------         -----           ----------      ---------       -----------
john.smith@gmail.com            289             35              5361            3293            8654
joe.dirt@yahoo.com              142             17              2631            1756            4387
jack.bauer@fbi.gov              115             9               1407            1107            2514
Run Code Online (Sandbox Code Playgroud)
$ git -C path/to/repo user-stats --since="1 week ago"
Email                           Commits         Files           Insertions      Deletions       Total Lines
-----                           -------         -----           ----------      ---------       -----------
joe.dirt@yahoo.com              20              3               83              634             717
john.smith@gmail.com            21              2               242             110             352
Run Code Online (Sandbox Code Playgroud)

用法

$ git [git options] user-stats [git-log options]
Run Code Online (Sandbox Code Playgroud)

显示代码

$ git user-stats
Email                           Commits         Files           Insertions      Deletions       Total Lines
-----                           -------         -----           ----------      ---------       -----------
john.smith@gmail.com            289             35              5361            3293            8654
joe.dirt@yahoo.com              142             17              2631            1756            4387
jack.bauer@fbi.gov              115             9               1407            1107            2514
Run Code Online (Sandbox Code Playgroud)

查看要点

安装

下载脚本,授予其可执行权限,然后将其粘贴到路径中的某个位置。例如:

$ git -C path/to/repo user-stats --since="1 week ago"
Email                           Commits         Files           Insertions      Deletions       Total Lines
-----                           -------         -----           ----------      ---------       -----------
joe.dirt@yahoo.com              20              3               83              634             717
john.smith@gmail.com            21              2               242             110             352
Run Code Online (Sandbox Code Playgroud)

解释

基本上它使用git log --format="author: %ae" --numstat(减去任何空行或二进制文件)来生成如下所示的输出:

author: bob.smith@gmail.com
1       147     foo/bar.py
0       370     hello/world.py
author: john.smith@aol.com
7       6       foo/bar.py
author: jack.bauer@fbi.gov
1       0       super/sekrit.txt
author: john.smith@aol.com
2       1       hello/world.py
Run Code Online (Sandbox Code Playgroud)

以 开头的每个部分author: ...都是一次提交。第一列--numstat是该文件的插入次数,第二列是删除次数。

然后它会遍历每一行awk。每当它遇到以 开头的行时author:,它都会将该行的第二列(该特定提交的作者的电子邮件地址)存储在变量中author,并增加该用户的提交总数。对于后续的每一行,它都会更新该用户的插入、删除和文件数,直到到达以 开头的下一行author:。冲洗并重复直至完成。

最后,它按总行更改(插入+删除)进行排序并打印出所有收集的统计信息。如果您想按其他方式排序,只需将total数组替换为函数中的相关数组即可asorti(...)。例如,要按文件数量排序,您可以将该行更改为:

n = asorti(files, sorted_emails, "@val_num_desc");
Run Code Online (Sandbox Code Playgroud)

请注意, 任何参数/选项都将传递给git log命令并可用于过滤结果
git user-stats --since="2 weeks ago"

更详细一点

输出git log经过:

  • tr '[A-Z]' '[a-z]'标准化电子邮件地址。我的公司将电子邮件地址大写John.Smith@TheCompany.com,并且根据用户提交的地点/方式,该电子邮件可能会显示为大写或全部小写。这可确保特定电子邮件地址的所有实例始终分组在一起,无论大小写如何。
  • grep -v '^$'删除日志输出中默认显示的空行
  • grep -v '^-'删除--numstat二进制文件的信息,如下所示:
    - - foo/bar.png

另外,git我花了很长时间才发现的一个很酷的功能是,如果您git-some-command在 PATH 中的文件夹中放置一个名为的可执行文件,git 会检测到它,您可以通过以下方式使用它git some-command!这具有能够在每个命令的基础上指定自定义配置设置的额外好处,例如git -c color.ui=always some-command | sed ...。因此,如果您将此脚本放入,比如说,您就可以通过示例中的~/bin/git-user-stats方式使用它git user-stats

  • 如果您看到此错误“awk: line 38: function asorti never Defined”,请尝试安装 gawk。在 Ubuntu 上:`sudo apt-get install gawk`。默认情况下,Ubuntu 使用 mawk 代替 awk,而不是 gawk。`asorti` 是一个 gawk 扩展。 (2认同)

Kov*_*lex 15

简单如: git shortlog -s -n

  • @a.ch。要计算代码行数,您可以使用:`git ls-files | 当读 f 时;git Blame -w -M -C -C --line-porcelain "$f" | 执行 grep -I '^作者'; 完成 | 排序 -f | 优衣库-ic | 排序-n--反向` (14认同)
  • `-s -n` 可以组合成 `-sn` (9认同)
  • @hartmut你应该发布一个明确的答案 (9认同)
  • 这将计算提交数量,而不是代码行数 (3认同)

Fbo*_*Fbo 7

您应该看看repoXplorer,这是我开发的一个开源项目。它能够计算一个项目(一组 git 存储库)以及一个贡献者和一组贡献者的统计数据。它提供了一个 REST 接口和一个 Web UI。Web UI 为给定的贡献者提供各种信息,例如:

  • 提交、行更改和项目计数
  • 提交的日期直方图
  • 提交量最高的项目
  • 按行更改的顶级项目

但最好是看看这里的演示实例。

这是贡献者的统计信息页面的屏幕截图(统计信息是根据 repoxplorer 索引的所有存储库计算的,但可以针对特定项目进行过滤):

在此处输入图片说明