本文转自https://yamdestiny.xyz/2019/03/08/how-to-use-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 或更高版本
- 本文介绍在windows环境下
操作步骤
- checkout 需要统计的项目
- 导出一个该项目的日志文件
- 运行 StatSVN 即可
checkout 项目
如果本地已经 checkout 下来的项目,可以忽略该步。
因为 StatSVN 需要在该项目目录下运行,需要使用 svn diff
等命令,所以实际只是需要项目的 URL。
故,可以使用以下命令,checkout 一个空内容的项目文件夹,专门用来生成统计数据。
执行以下命令需要本地安装SVN客户端
svn co --depth empty 【SVN地址】 |
生成 SVN 日志文件
StatSVN 需要一个 SVN 的日志文件,来标示一段时间的 SVN 的每次提交信息,用于获取文件的变更记录。运行时,基于该日志文件,使用 svn diff
等命令,统计日志文件包含的时间段内的记录。
1 2 3 4 5 6 7 8 | cd 【保存logfile.log的路径】 // 获取所有提交记录 svn log -v --xml > logfile.log // 获取一段时间内的提交记录 svn log -v --xml -r {2018-12-19}:{2018-10-09} > logfile.log // 获取版本段内的提交记录 svn log -v --xml -r 2299:2301 > logfile.log |
注:因为需要每个版本修改文件的信息,所以 -v
不能少。不然不能运行。
运行 StatSVN
-
Copy
StatSVN.jar
到 【保存logfile.log的路径】 目录下,使用以下命令运行1
java -jar statsvn.jar logfile.log 【上面checkout的项目文件夹路径】 -charset utf-8 -output-dir 【报告html存放路径】
-
-charset gbk
,字符集-disable-twitter-button
,停用 Twitter 按钮-output-dir ./report
,输出目录-include
,需要统计的目录或文件(正则表达式)-exclude
,不需要统计的目录或文件(正则表达式)
…
-
运行完成后,使用浏览器打开【报告html存放路径】中的
index.html
即可查看
运行时错误
Subversion binary is incorrect version. Found: 1.12.0, required: 1.3.0 Updating
造成该问题的原因在于 SvnStartupUtils#checkSvnVersionSufficient() 中的判断语句问题
1 | if (versionString.compareTo(SVN_MINIMUM_VERSION) >= 0) |
通过修改该判断,重新编译后运行。
注:
- 如使用 BUG#109 的方式
- 需要下载
maven-artifact
放到..\statsvn-code-r406-trunk\statsvn\lib
目录下 - 需要下载SvnStartupUtils.java 放到
..\statsvn-code-r406-trunk\statsvn\src\net\sf\statsvn\util
目录下并覆盖 - 修改
..\statsvn-code-r406-trunk\statsvn\.classpath
,增加一行<classpathentry kind="lib" path="lib/maven-artifact-3.5.4.jar"/>
- 修改
..\statsvn-code-r406-trunk\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" />
- 编译项目生成statsvn.jar
- 将
maven-artifact-3.5.4.jar
放到与statsvn.jar
同目录下即可按照前文介绍的方法正常使用
- 需要下载
源码
访问 SourceForge StatSVN,获取源码。
编译
该项目使用 Apache Ant 编译,使用如下命令
1 2 3 4 | // 生成 ..\statsvn-code-r406-trunk\statsvn\dist\statsvn.jar ant -buildfile ..\statsvn-code-r406-trunk\statsvn\build.xml dist // 生成 statsvn.jar,发布文件,javadoc等 ant -buildfile ..\statsvn-code-r406-trunk\statsvn\build.xml release |
其余可用命令查看 ./statsvn-code/statsvn/build.xml
总结
使用该工具可以很快速的统计出整个项目的代码开发情况,可以将当前SVN库的状态用图表的方式展现,直观方便。但是 StatSVN 统计的是所有的行,包括注释和空行,不仅是有效代码行,且不计算修改的代码行,只计算新增或删除的代码行数,比较局限。在我看来,仅有纪念意义,无其它的实际意义。要考察代码质量,推荐使用 SonarQube 等工具。