http://pengtyao.iteye.com/blog/1001815
StatSVN簡單使用說明
本文參考網(wǎng)上一些資料以及StatSVN官方手冊編寫
目錄
StatSVN簡單使用說明...1
1. 簡介...1
2. 前置條件...2
3. 快速上手...2
4. 命令行選項...3
5. 設置統(tǒng)計的開始與結(jié)束時間...5
6. Ant任務...5
7. 不足之處...6
8. 使用心得...6
9. 更多參考...7
1. 簡介
StatSVN是一個Java寫的開源統(tǒng)計程序,從StatCVS移值而來。StatSVN能夠從Subversion版本庫中取得信息,然后使用JFreeChart生成描述項目開發(fā)的各種表格和圖表。比如:
代碼行數(shù)的時間線
針對每個開發(fā)者的代碼行數(shù)
開發(fā)者的活躍程度
開發(fā)者最近所提交的文件數(shù)量
平均文件大小
最大文件
哪個文件是修改最多次數(shù)的
目錄大小
帶有文件數(shù)量和代碼行數(shù)的Repository tree
StatSVN當前版本能夠生成一組包括表格與圖表的靜態(tài)HTML或XDOC文檔。
StatSVN統(tǒng)計的文件數(shù)量包含:所有文件類型。
StatSVN統(tǒng)計的代碼變動行數(shù)包含文件類型:所有編程文件類型(如.java、.cpp、.h),.xml,.properties、.txt等,jar包等不在統(tǒng)計之內(nèi)。
2. 前置條件
Java version 1.4.x or above
The Subversion command-line client*, version 1.3.0 or higher (The binaries need to be on your command-line path when executing StatSVN)*
3. 快速上手
3.1.安裝Java運行環(huán)境
StatSVN運行需要Java的運行環(huán)境支持,所以需要安裝Java的運行環(huán)境jdk 1.4.或更高版本。在命令行模式下運行java --version命令,可以查看到所安裝java運行環(huán)境版本。
3.2.安裝SVN客戶端命令
StatSVN在使用中需要使用SVN的客戶端,因此需要確保機器上可以訪問到SVN的客戶端命令,也就是那個SVN.EXE文件,我們可以將它拷貝出來,比如我將它拷貝到了我客戶端的版本庫D:\bl_repos
3.3.下載StatSVN
可以從http://www.statsvn.org/下載,下載完成后解壓到一個目錄,比如C:\statsvn,里面有一個statsvn.jar的文件,無需安裝。
3.4.從Subversion CheckOut一個模塊
CheckOut一個最新的工作版本庫比如e:\bl_repos
3.5.生成LOG文件
使用以下命令生成LOG文件例如:
- D:\bl_repos>svn log -r {2011-3-1}:{2011-4-1}-v --xml --username xxx --password 123 e:\bl_repos > e:\bl_repos\logfile.log
詳情可以參考svn log -?,這里的意思是生成e:\bl_repos工作目錄的2011-3-1到2011-4-1的代碼日志文件到e:\bl_repos\logfile.log下
3.6.調(diào)用StatSVN進行統(tǒng)計- C:\statsvn>java -jar statsvn.jar e:\bl_repos\logfile.log e:\bl_repos
該命令的格式是java -jar statsvn.jar [options] <logfile> ,其中參數(shù)為生成的log文件,e:\bl_repos為工作拷貝目錄,注意兩個參數(shù)都要列出正確的全路徑,否則會提示錯誤如logfile.log找不到等等
3.7.查看統(tǒng)計結(jié)果 回到C:\statsvn,會發(fā)現(xiàn)里面生成了很多網(wǎng)頁,查看index.html,就可以看見統(tǒng)計結(jié)果了。
4. 命令行選項
statsvn必要參數(shù)是<logfile> <checked-out-module>:
- java -jar statsvn.jar options<logfile> <checked-out-module>
但是statsvn還可以支持更多其它參數(shù):
指定報告生成目錄,如果目錄不存在則自動創(chuàng)建此目錄。
- -include <include-pattern-list>
- -exclude <exclude-pattern-list>
設置過濾規(guī)則:'?' 匹配單個字符
'*' 匹配0個或多個字符
'**' 匹配0級或多級目錄
例1:src/**/*.java-----匹配src目錄及子目錄下所有java文件。*.java-----匹配根目錄下的java文件,因為*不包含子目錄。
例2:-include "**/*.c:**/*.h" -exclude "legacy/**"匹配目錄下除legacy目錄下所有.c和.h文件。
注意:Unix系統(tǒng)下注意在表達式上使用引號,否則shell將會與通配符相沖突。
為從Subversion服務起收集信息指定緩存目錄,
- -username <subversion_username>
指定連接Subversion server的用戶名.
- -password <subversion_username>
指定連接Subversion server的密碼.
- -tags <tags-regularexpression>
添加Subversion tags信息到報告中。只有與正則表達式相匹配的tags才會被添加。例如:-tags '.*' 則會添加所有的tags。
注意:這一功能會到你的存儲目錄的/tags目錄下查找tags,所以為了能讓這一功能運行正常,必須在你的存儲根目錄下生成log文件,這樣才會將各個tags和trunk的信息都寫入log文件,但tags目錄沒有必要都checked out下來。
注意:Unix系統(tǒng)下注意在表達式上使用引號,否則shell將會與通配符相沖突。
指定tags正則表達式去評估的根目錄,默認值為/tags/
- -no-developer <login-name>
在報告中排除某個或某幾個開發(fā)者的代碼提交信息。比如排除管理員的一些代碼操作。
輸出中添加進程信息
- -bugzilla< bugzilla_install_root>
指定Bugzilla的安裝路徑,報告中將以鏈接的形式代替'Bug ###',這樣方便直接鏈接至相應Bug。
指定報告的名稱,默認以Subversion模塊名作為標題。
將報告文檔從默認的html文檔改為Maven的XDoc文檔。
將報告文檔從默認的html文檔改為xml文檔。
為報告指定css樣式,這里可以是http url或本地文件。
指定一個注釋文件,該文件的內(nèi)容將會添加至報告的index頁面。文件內(nèi)容應該包含一個有效的塊級html片段。例如:
- <p>
- These are development statistics for the<a >StatSVN</a>
- project, created by StatSVN itself.
- </p>
-
- <p>
- <strong>Note:</strong>
-
- This report was generated by an unreleased development version of StatSVN. It might contain features not yet found in the official release.
-
- </p>
其它更多參數(shù)請查閱其官方文檔。
示例:
- java -jar statsvn.jar -verbose -title jUCMNav -exclude **/src/urncore/**;**/src/grl/**;**/src/ucm/**;**/src/urn/**;**/src/seg/jUCMNav/model/ucm/** \ -output-dir ./stats c:\eclipse\workspace\seg.jUCMNav\svn.log c:\eclipse\workspace\seg.jUCMNav
5. 設置統(tǒng)計的開始與結(jié)束時間雖然StatSVN不提供指定報告統(tǒng)計的開始與結(jié)束時間,但是可以通過svn log命令來指定從而達到相同的效果。
- svn log v -xml -r {2007-02-19}:{2007-02-12}> log.xml
更多信息可以查看:
http://svnbook.red-bean.com/en/1.2/svn.tour.revs.html#svn.tour.revs.dates
http://jbrugge.com/blog/2007/02/27/using-date-ranges-with-statsvn/
6. Ant任務StatSVN可以與Apache Ant進行集成使用。
示例:
- <?xml version="1.0"?>
-
- <project name="StatSvnAnt" default="main" basedir=".">
-
- <taskdef name="statsvn" classname="net.sf.statsvn.ant.StatSvnTask" classpath="dist/statsvn.jar" />
-
-
- <target name="main">
-
- <statsvn
-
- path="d:/statsvn"
-
- log="d:/statsvn/logfile.log"
-
- outputDir="d:/statsvn/stats"
-
- title="StatSVN"
-
- include="*/.java"
-
- exclude="tests-src/**"
-
- notes="d:/statsvn/report-notes.txt"/>
-
- </target>
</project>其中path和log屬性是必須指定的(path為源碼所在目錄),其它屬性可選。statsvn.jar必須位于Ant的classpath下,或者像上面一樣由taskdef屬性來指定。
7. 不足之處StatSVN現(xiàn)在最新版才到0.7.0,屬于一個新推出工具,還沒有正式發(fā)布穩(wěn)定版,所以還存在一些不足之處:
刪除和移動文件:在刪除和移動的文件上,代碼統(tǒng)計行數(shù)可能不精確。當一個文件被刪除或被移動,StatSVN現(xiàn)在還不能準確的統(tǒng)計出文件行數(shù)以及都由哪些人提交過(這是StatCVS的遺留問題,但是StatSVN在將來會解決這一遺留問題)。
分支(Branches):StatSVN analyzes anything it is given. Because of the way Subversion treats branches, StatSVN is not limited to a repository's default branch, as StatCVS was. However, there are currently no special features that take into account the most common Subversion repository layout (with /branches and /trunk).
Tags:這個參數(shù)當前還處于beta階段,不夠成熟,使用起來有些不便,詳情可查看前面提到的tags參數(shù)使用部分。
8. 使用心得8.1.有時統(tǒng)計結(jié)果會有一點點偏差,如對原有文件進行格式化后,格式的變動也會算入代碼變動行數(shù)之列,這個jsp偏差量比較大,所以建議每個代碼提交者都養(yǎng)成提交代碼時使用IDE格式化快捷鍵對文件進行一下格式化操作,這樣能最小避免這種誤差。
8.2.刪除文件和移動文件統(tǒng)計上會有不準確。
所以使用此工具生成報告后,最好檢查一下是否存在大量代碼變動只是由于源文件排版格式的變動,以及是否存在有大量代碼是引入了某些工具類(非jar包形式)或配置文件(如installanywhere使用的一個配置文件TWNS_hp.iap_xml 有幾萬行)。這些情況都是需要最后手動減除的。
9. 更多參考http://wiki.statsvn.org
http://statcvs.sourceforge.net/