如何使用 StatSVN
统计 SVN 提交记录。
最近,因为不可描述的原因,抄了两天自己的代码,手都要码断了。感觉自己码了上万行,不计其数的字符。为了看看最终的记录是多少,于是有了这篇为了获取 SVN 统计数据的 StatSVN 工具使用说明。
StatSVN 是什么
StatSVN 是一款开源的从 SVN (Apache Subversion) 存储库中检索信息,并生成描述项目开发的各种表格和图表的统计数据。
包括:
- 每个提交人员的统计数据
- 每次提交的统计数据
- 项目代码行的变化
- 文件统计(文件修改版本统计,文件行数统计,不同文件类型统计)
- 目录大小
- …
截止目前,最后一个 Release 版本:2010-01-01: release of 0.7.0 is released
如何使用
因为 StatSVN 是开源的且托管在 SourceForge,所以可以很轻易的从 SourceForge 获取 StatSVN 的最新 Release 版本 和 源码 自己编译。
先决条件
- Java: 1.4 或更高版本
- Subversion command-line client: SVN 的命令行客户端,1.3 或更高版本
操作步骤
- checkout 需要统计的项目
- 导出一个该项目的日志文件
- 运行 StatSVN 即可
checkout 项目
如果本地已经 checkout 下来的项目,可以忽略该步。
因为 StatSVN 需要在该项目目录下运行,需要使用 svn diff
等命令,所以实际只是需要项目的 URL。
故,可以使用以下命令,checkout 一个空内容的项目文件夹,专门用来生成统计数据。
1 | $ svn co --depth empty svn://server/repo/trunk/project |
生成 SVN 日志文件
StatSVN 需要一个 SVN 的日志文件,来标示一段时间的 SVN 的每次提交信息,用于获取文件的变更记录。运行时,基于该日志文件,使用 svn diff
等命令,统计日志文件包含的时间段内的记录。
1 | $ cd project |
注:因为需要每个版本修改文件的信息,所以 -v
不能少。不然不能运行。
运行 StatSVN
Copy
StatSVN.jar
到./project
目录下,使用以下命令运行1
$ java -jar statsvn.jar logfile.log -output-dir ./report
指定目录运行
1
$ java -jar /path/to/statsvn.jar /path/to/module/logfile.log /path/to/module
-charset gbk
,字符集-disable-twitter-button
,停用 Twitter 按钮-output-dir ./report
,输出目录-include
,需要统计的目录或文件(正则表达式)-exclude
,不需要统计的目录或文件(正则表达式)- …
运行完成后,使用浏览器打开
./report
中的index.html
即可查看
运行时错误
Subversion binary is incorrect version. Found: 1.10.0, required: 1.3.0 Updating
造成该问题的原因在于 SvnStartupUtils#checkSvnVersionSufficient() 中的判断语句问题
1 | if (versionString.compareTo(SVN_MINIMUM_VERSION) >= 0) |
通过修改该判断,重新编译后运行。
注:
- 如使用 BUG#109 的方式
- 需要下载
maven-artifact
放到./statsvn-code/statsvn/lib
目录下 - 修改
./statsvn-code/statsvn/.classpath
,增加一行<classpathentry kind="lib" path="lib/maven-artifact-3.5.4.jar"/>
- 修改
./statsvn-code/statsvn/build.xml
,<target name="dist" depends="compile,copyfiles">
标签部分中的Class-Path
属性,如<attribute name="Class-Path" value="svnkit.jar jna.jar maven-artifact-3.5.4.jar" />
- 将
maven-artifact-3.5.4.jar
放到与statsvn.jar
同目录下即可
- 需要下载
源码
访问 SourceForge StatSVN,获取源码。
编译
该项目使用 Apache Ant 编译,使用如下命令
1 | // 生成 ./statsvn-code/statsvn/dist/statsvn.jar |
其余可用命令查看 ./statsvn-code/statsvn/build.xml
总结
使用该工具可以很快速的统计出整个项目的代码开发情况,可以将当前 SVN 库的状态用图表的方式展现,直观方便。但是 StatSVN 统计的是所有的行,包括注释和空行,不仅是有效代码行,且不计算修改的代码行,只计算新增或删除的代码行数,比较局限。在我看来,仅有纪念意义,无其它的实际意义。要考察代码质量,推荐使用 SonarQube 等工具。