如果你是研发效能组的一员或者在从事 CI/CD 或 DevOps,除了提供基础设施,指标和数据是也是一个很重要的一环,比如需要分析下某个 Git 仓库代码提交情况:

  • 该仓库的代码谁提交的代码最多
  • 该仓库的活跃度是什么样子的
  • 各个时段的提交分析数据
  • 每个版本的贡献排名情况
  • 每周/每月/每年的贡献排名等等

几天前发现一个 Git 历史统计信息生成工具叫 GitStats (http://gitstats.sourceforge.net/)

这是一个用 python 写的,代码量很少,功能却非常强大的分析工具,也是我目前发现为数不多的可以生成漂亮的报告并且使用很方便的开源项目。

一、如何使用

安装依赖:Git,Python,Gnuplot。

如果有 Linux,推荐在 Linux 上下载和安装。我曾尝试用 Windows 来准备环境,要下载 Python2,配置 Cygwin,还要手动配置 Gnuplot (Gnuplot 是一个可移植的命令行驱动的图形工具),挺麻烦的。以下是我在 Linux 上来的安装和使用步骤。


  1. # 下载 Python 2
  2. sudo yum -y install python27
  3. # 安装 Gnuplot
  4. sudo yum -y install gnuplot
  5. # 下载 gitstats
  6. # 如果下面项目地址失效,可使用这个 https://gitee.com/jeffreyu/gitstats.git
  7. git clone https://github.com/hoxu/gitstats.git
  8. # 下载你要分析的代码仓库
  9. git clone https://github.com/alibaba/fastjson.git
  10. # 执行命令,生产报告
  11. cd gitstats
  12. ./gitstats ./fastjson ../html/fastjson
  13. # 经过 15 秒钟的执行,生成报告
  14. Generating report...
  15. [0.00393] >> git --git-dir=/workspace/gitstats/.git --work-tree=/workspace/gitstats rev-parse --short HEAD
  16. [0.00236] >> git --version
  17. [0.00716] >> gnuplot --version
  18. Generating graphs...
  19. [0.01676] >> gnuplot "/workspace/html/fastjson/day_of_week.plot"
  20. [0.01571] >> gnuplot "/workspace/html/fastjson/files_by_date.plot"
  21. [0.01281] >> gnuplot "/workspace/html/fastjson/month_of_year.plot"
  22. [0.09293] >> gnuplot "/workspace/html/fastjson/lines_of_code_by_author.plot"
  23. [0.01340] >> gnuplot "/workspace/html/fastjson/commits_by_year.plot"
  24. [0.01799] >> gnuplot "/workspace/html/fastjson/hour_of_day.plot"
  25. [0.01627] >> gnuplot "/workspace/html/fastjson/domains.plot"
  26. [0.01268] >> gnuplot "/workspace/html/fastjson/commits_by_year_month.plot"
  27. [0.09435] >> gnuplot "/workspace/html/fastjson/commits_by_author.plot"
  28. [0.01522] >> gnuplot "/workspace/html/fastjson/lines_of_code.plot"
  29. Execution time 15.16208 secs, 4.58247 secs (30.22 %) in external commands)
  30. You may now run:

二、如何访问

1、我产生的报告位置是在linux下

 2、我是通过nginx转发的

3、访问地址是

http://你的域名/fastjsonView/index.html

4、这里遇到一个问题,访问后nginx 报403

解决办法是nginx.conf配置文件,第一行去掉注释改成root;

改完重新加载配置即可。

三、报告分析

1、常规统计

可以看到这个项目叫 fastjson,从 2011 年 7 月 31 日开始提交第一次代码,距离当前已经 3060 天了,893 个活跃天。总共文件是 2960 个,一共的代码行数是 25 万行。

活跃度

每天中的每小时的、每周中的每天、每周中的每小时,每年中的每月的、每年的提交数量。

在过去的 32 周里,其中前 12 周到 17 周这段时间很活跃,提交很多。另外可以看到在白天 12 点到 20 点这段时间提交很少,大部分程序员在这段时间都在应对公司里的工作,无法贡献开源项目。

晚上 20 点之后提交开始增多,看来是一个非常努力的开发者。另外可以看到周一到周日都有提交,周六相对最少,应该是周六休息和放松一下。周日提交明显比周六多,看来还是花费了不少的个人宝贵周末时间。

还能看到该项目主要完成时间在 2016 年到 2017 年,完成的时区是在东八区,这个维度可对不同区域的开发者贡献数量进行分析。

2、贡献者

列举了所有的作者,提交数,第一次提交及最近一次提交。

这张图也是可以看到谁是该项目的创建者,以及这几年以来每年的谁的贡献最大。还有可以看到提交者所用的邮箱账户。

3、文件及行数

文件总数是 2960 个,代码行数是 25 万行。

另外还可以看到每年的文件增加趋势图以及这些文件类型数量的排名,可以看到 java 文件占了 96.08%,其次是 json。

4、Tags

Tags 对于团队是一个很重要分析指标(前提是所要分析的仓库在版本发布后创建了 Tag)可以看到每个版本的贡献度排名。

最后

  1. 如果感兴趣可以分析一下自己的项目或是去 GitHub 上找一个有意思、有影响力的项目拿来分析一下,比如 996.ICU 以及 vue 等。
  2. 为方便团队成员访问,建议创建一个自动化任务,可以用Jenkins来定期执行获取最新的 Git 历史记录,然后讲生成的 html 放到一个 Tomcat 服务上,这样所有的团队成员就都可以访问了。

GitStats - 统计Git所有提交记录工具的更多相关文章

  1. 规范git commit提交记录和版本发布记录

    在开发过程中我们一般都会用到git管理代码,在git commit提交代码时我们一般对git commit message随便写点简单的描述,可是随着项目参与人数的增多,发现提交的commit记录越来 ...

  2. git 跟踪提交记录

    一.克隆git仓库 git clone ssh://hwl@xxx/home/data/repositories/git.git 二.申明使用人信息,以便跟踪提交记录 $ git config --g ...

  3. git 查看提交记录

    查看提交的内容 -p 选项,同时在 - 后加数字限制一下数目 git log -p -2. commit 500eeadd71a21f1166803e12a792bfa86f4ca784 (HEAD ...

  4. Jenkins 获取 Git 的提交记录(Change Log)

    工作中用 Jenkins 做 iOS 和 Android 的持续集成,之前实现的是当 git 有新代码提交的时候,就会自动编译并上传安装包到蒲公英,然后自动发送QQ群通知或者讨论组通知给相关小伙伴,方 ...

  5. 统计git代码提交量

    以下是我写的一个脚本,可以统计在某个项目中,自己修改代码的行数,包括增加多少行,删除多少行. 可以统计当天,24小时内或全部时间内.使用时需要把代码中的author对应的值换成自己的名字. 代码如下: ...

  6. Git 删除提交记录

    .Checkout git checkout --orphan latest_branch 2. Add all the files git add -A 3. Commit the changes ...

  7. 使用gitstats分析git 仓库代码

    gitstats 是一个很不错的git 代码提交分析工具,可以帮助我们生成图表统计结果 工具文档信息 gitstats http://gitstats.sourceforge.net/ 安装 使用ce ...

  8. git log 查看提交记录

    git log 查看提交记录 1. git log 查看提交历史记录2. git log --oneline 或者 git log --pretty=oneline 以精简模式显示3. git log ...

  9. git log 查看指定文件的提交记录

    使用git log除了可以看整个仓库的提交记录外,还可以指定某个文件的提交记录. 1. 查看指定文件的历史提交记录 命令: git log -- <file> 说明:只需要指定文件名称. ...

随机推荐

  1. spring-boot-learning 日志相关

    sprint-boot 日志   市面上的日志框架: JUL.JCL.Jboss-logging.logback.log4j.log4j2.slf4j.... SpringBoot:底层是Spring ...

  2. Linux用户无法使用sudo命令

    新建的用无法使用sudo命令,出现这样的提示: xiaojing is not in the sudoers file. This incident will be reported 原来是新建的用户 ...

  3. 雅虎WEB前端网站优化—34条军规

    Yslow工具 1.Minimize HTTP Requests 减少HTTP请求 图片.css.script.flash等等这些都会增加http请求数,减少这些元素的数量就能减少响应时间.把多个JS ...

  4. GoLang数组切片

    1. 数组1.1 如何定义数组同java数组一样,数组是一组内存连续且类型相同的数据组成 //不初始化初始值默认为0 var arr1 = [5]int{} var arr2 = [5]int{1,2 ...

  5. nodejs和树莓派开发以及点亮RGB的LED灯代码

    前段时间集团举行前端IOT比赛,借此机会熟悉了树莓派相关的东西,特此记录一些相关的文档和开发指南. 先介绍一些树莓派的入门教程 阮一峰的树莓派入门 微雪电子-树莓派硬件中文官网 ssh链接树莓派 ss ...

  6. 【Weex笔记】-- Animate.css的使用

    animate.css是一个使用CSS3的animation制作的动画效果的CSS集合,里面预设了很多种常用的动画,且使用非常简单.本文将详细介绍animate.css的使用. 一,安装辅助依赖 np ...

  7. 浅谈ES6中的Class

    转载地址:https://www.cnblogs.com/sghy/p/8005857.html 一.定义类(ES6的类,完全可以看做是构造函数的另一种写法) class Greet { constr ...

  8. 前端加密办法之混淆js加密

    每个页面都是有数据和页面结构以及样式组成,对于单页面的作者来说这中分离的感觉会明显一点,那当我们通过ajax请求拿到数据之后我们一般就是把数据渲染到页面,但是数据接口又不想那么明显是一个json字符串 ...

  9. Ubuntu20.04中创建Pycharm桌面快捷方式

    [Desktop Entry] Type=Application Name=Pycharm GenericName=Pycharm3 Comment=Pycharm3:The Python IDE E ...

  10. iOS开发 将html 富文本文字 转换成oc 的富文本

    - (NSMutableAttributedString *)mf_htmlAttribute:(NSString *)htmlString{ htmlString = [NSString strin ...