让Git项目日志也能动起来,炫起来!数据可视化利器Gource初探
开发的工作是繁忙而又充实的,每到项目阶段性的收尾,看着一起奋斗的兄弟姐妹们,心理也总会有些碎碎念,想着为这个项目留下点什么特别的印象,收在项目的汇总报告里也好,作为彼此的一种念想也好。
但苦于手边没有趁手的工具,当然,也不是没有,而是在我的轻微的“完美”强迫症下,总觉得他们不够“惊艳”,直到我偶然的发现了:Gource。

先睹为快
不便于放上自己所进行的项目,就放上一段我用Gource制作的,关于开源软件Blockly Game开发简史的视频吧。
怎么样?够炫吧。从中,估计很容易就能看出来,Blockly Game项目,由始至终,最活跃的开发者,其实只有2个,他俩像小蜜蜂一样,在代码的花丛中穿梭。而2016年度,则应该是其开发的一个高峰期,可以看到,陆续有其他的一些开发者,也参与了进来。
安装
Gource的官方站点为:https://gource.io/,在官网上,开发者非常贴心的为Windows下的用户,提供了对应的安装包,和可直接执行的压缩文件包。

下载对应的文件,并直接安装(或解压缩到相关文件夹下),即可开始使用。
而MacOSX用户,则推荐直接使用brew进行安装
brew install gource
当然,你也可以选择自行通过源代码进行编译安装,Linux/MacOSX下,比较简单,就是非常典型的./configure、make & make install,Windows下,则最好使用Qt Creator进行编译,因为,其Windows版本是在这一IDE环境下进行开发的。
最简使用教程
Gource是一个命令行的工具,内置支持Git,Mercurial,Bazaar和SVN项目日志的可视化动画生成。
这对我来说是足够了,事实上,现在我的项目,全部是使用Git进行管理的,但如果你的项目,恰好使用的是CVS这样的版本管理系统,那么,Gource也提供了一个脚本:cvs2cl,可以将CVS日志,输出转换为Gource能够读取的日志形式。
而使用Gource的最简单方式,则是在进入到对应的项目目录后,在命令行下,直接输入:
gource
是的,就这么简单,之后,Gource会弹出一个窗口,并在其中,按照时间顺序动态展示整个项目,就好像我刚刚视频所展示的那样。
多一点参数
Gource有很多的参数可以使用,具体可以参见他的官方Wiki文档,在这里,则拣几个我觉得重要的,稍微说下。
-s 秒数 : 设置在视频中,每天以秒为单位的仿真速度,默认是10秒。
显然的,如果这是一个时间跨度相当长的项目,并且你希望从头到尾的展示下整个开发过程,那感觉一定是非常“酸爽”的,比如那个《Blockly Game开发简史》。
幸好,Gource有-s参数,并且,可以支持小数,比如:0.03这样的。
-a 秒数 : 项目中,总会有那么一些日子,或者几天、或者几周,没有什么日志的提交。为了避免视频中,出现这样的停顿,可以通过-a参数,来设置遇到这种情况时,Gource前进到下一个条目时的时间间隔,默认为3秒后。
和-s一样,-a也支持小数。
输出视频
至少在我看来,输出视频,是我最需要的一个功能。Gource并没有直接提供输出常见视频格式的功能,相反的,我们可以首先通过使用 -o 选项,从Gource窗口中,捕获原始视频,并保存为PPM格式文件。
之后,则推荐使用视频编码器ffmpeg,来进行后续的处理,以最后生成我们所需要的视频,比如mp4。

当然,在适当的参数帮助下,强大的ffmpeg还能帮助我们输出其他各种格式的视频,从webp,到gif,不一而足。
这几乎又是另外的一个话题了,在这里就不展开了。
更多一点
还记得我刚刚提到的 cvs2cl 脚本么?是的,实际上,Gource除了可以自动的处理来自Git,Mercurial,Bazaar和SVN项目的日志外,它还可以用来处理和生成任何符合Gource标准的日志文件,也就是说,Gource提供了一种可以将任何类似的日志数据,进行可视化动画展示的方式,日志文件写作的规范如下:
首先,每条日志占据1行。
其次,每条日志,一共可包含5个选项,选项和选项之间,使用半角的竖线(\’|\’)进行分隔,这5个选项分别是:
- 时间戳 : 使用UNIX时间戳表示,代表该日志发生的时间
- 用户名 : 进行相关操作的操作者名称
- 操作类型 : 对资源的操作方式,Gource一共规定了3种,分别是 : A : 增加资源;M : 修改资源;D : 删除资源
- 资源名 : 所对应操作的资源的路径名称,因为Gource事实上并不检测任何内容,因此,实际上,这里可以写任意你想写的内容
- 颜色 : 16进制(FFFFFF)格式颜色说明,用于生成资源对应的颜色(可选)
是不是有一点心动?马上试一试吧?