java集成svnkit

http://beisicao.iteye.com/blog/1112843
一、SVN快速入门
本文主要介绍在windows下使用的方式,对于UNIX环境下,区别并不大。
介绍的具体步骤如下:
 软件下载
 服务器和客户端安装
 建立版本库(Repository)
 配置用户和权限
 运行独立服务器
 初始化导入
 基本客户端操作
1、软件下载
下载Subversion服务器程序
到官方网站的下载二进制安装文件,来到二进制包下载部分,找到 Windows NT, 2000, XP and 2003部分,然后选择” this directory “,这样我们可以看到许多下载的内容,目前可以下载 svn-1.4.0-setup.exe 。
下载Subversion的Windows客户端TortoiseSVN
TortoiseSVN是扩展Windows Shell的一套工具,可以看作Windows资源管理器的插件,安装之后Windows就可以识别Subversion的工作目录。
官方网站是TortoiseSVN ,下载方式和前面的svn服务器类似,在Download页面的我们可以选择下载的版本,目前的最高稳定版本的安装文件为TortoiseSVN-1.4.0.7501-win32-svn-1.4.0.msi。
另外,subversion有相应的eclipse插件,通过此插件可以在eclipse集成开发环境中对开发项目进行版本管理。在这里暂不做介绍。
2、服务器和客户端安装
服务器安装,直接运行svn-1.4.0-setup.exe ,根据提示安装即可,这样我们就有了一套服务器可以运行的环境。
安装TortoiseSVN,同样直接运行TortoiseSVN-1.4.0.7501-win32-svn-1.4.0.msi按照提示安装即可,不过最后完成后会提示是否重启,其实重启只是使svn工作拷贝在windows中的特殊样式生效,与所有的实际功能无关,这里为了立刻看到好的效果,还是重新启动机器。

3、建立版本库(Repository)
运行Subversion服务器需要首先要建立一个版本库(Repository),可以看作服务器上存放数据的数据库,在安装了Subversion服务器之后,可以直接运行,如:
svnadmin create E:\svndemo\repository
就会在目录E:\svndemo\repository下创建一个版本库。
我们也可以使用TortoiseSVN图形化的完成这一步:
在目录E:\svndemo\repository下”右键->TortoiseSVN->Create Repository here…“, 然后可以选择版本库模式, 这里使用默认即可, 然后就创建了一系列目录和文件。
4、配置用户和权限
来到E:\svndemo\repository\conf目录,修改svnserve.conf:
# [general]
# password-db = passwd
改为:
[general]
password-db = passwd
然后修改同目录的passwd文件,去掉下面三行的注释:
# [users]
# harry = harryssecret
# sally = sallyssecret
最后变成:
[users]
harry = harryssecret
sally = sallyssecret

5、运行独立服务器
在任意目录下运行:
svnserve -d -r E:\svndemo\repository 我们的服务器程序就已经启动了。注意不要关闭命令行窗口,关闭窗口也会把svnserve停止。
也可以把其设置为windows服务。
6、初始化导入
来到我们想要导入的项目根目录,在这个例子里是E:\svndemo\initproject,目录下有一个readme.txt文件:
右键->TortoiseSVN->Import…
URL of repository输入“svn://localhost/”
ok
完成之后目录没有任何变化,如果没有报错,数据就已经全部导入到了我们刚才定义的版本库中。
需要注意的是,这一步操作可以完全在另一台安装了TortoiseSVN的主机上进行。例如运行svnserve的主机的IP是133.96.121.22,则URL部分输入的内容就是“svn://133.96.121.22/”。
7、基本客户端操作
取出版本库到一个工作拷贝:
来到任意空目录下,在本例中是E:\svndemo\wc1,运行右键->Checkout,在URL of repository中输入svn://localhost/,这样我们就得到了一份工作拷贝。
在工作拷贝中作出修改并提交:
打开readme.txt,作出修改,然后右键->Commit…,这样我们就把修改提交到了版本库,我们可以运行。
察看所作的修改:
readme.txt上右键->TortoiseSVN->Show Log,这样我们就可以看到我们对这个文件所有的提交。在版本1上右键->Compare with working copy,我们可以比较工作拷贝的文件和版本1的区别。

二、SVNKit开发环境
1、 开发环境准备
SVN服务器版本我们选择比较稳定的版本Subversion1.4,安装在windows操作系统上。
SVNKit我们选择1.3.0版本,此版本支持Subversion1.6以下的所有版本。
2、开发环境配置
在开发环境中创建好项目后,在类路径中加上SVNKit的jar包即可开始对subversion进行相关的操作。Jar包有trilead.jar,svnkit-javahl.jar,svnkit-cli.jar,svnkit.jar和jna.jar。
三、SVNKit的结构
SVNKit是一个纯java的subversion客户端库,使用SVNKit无需安装任何subversion客户端,支持各种操作系统。

四、SVNKit类关系图

SVNKit的API主要分为两类:High Level API和Low Level API。
通常情况下,我们使用High Level API即可完成工作任务。High Level API通过封装、使用Low Level API,使开发工作变得相对简单、容易。在此我们重点介绍High Level API。

High Level API介绍:
在High Level API中,我们通过SVNClientManager类即可访问很多接口,这些接口几乎允许subversion用户执行可能需要的任何工作。这些工作包括:checking out、更新、提交、获取历史版本、比较版本间的差异、浏览存储库等等。类图如下图所示:

通过类图我们可以看到,通过SVNClientManager类可以获得各种client操作类的引用,进而可以执行很多操作。
接下来,对client操作类进行分别介绍:
SVNLogClient:
通过此类可以获得版本修订历史记录、浏览存储库条目、文件内容注释。
doLog(…) 用来获取版本的修订历史
doList(…) 用来获取存储库条目树
doAnnotate(…) 用来获取文件内容注释
SVNLogClient的方法和SVN命令行客户端的命令的对应关系。
SVNKit Subversion
doLog() ‘svn log’
doList() ‘svn list’
doAnnotate() ‘svn blame’

SVNUpdateClient:
通过此类可以check out、更新、切换工作副本,也可以从存储库中导出目录或文件。
doCheckOut(…) 从存储库中检出工作副本。
doUpdate(…)把工作副本更新为最新版本或某个指定版本。
doSwitch(…)把工作副本更新为同一个存储库的不同分支上的版本。
doExport(..) 从存储库中导出目录或文件。
doRelocate()把工作副本更新为不同的存储库中的版本。

SVNUpdateClient的方法和SVN命令行客户端的命令的对应关系。
SVNKit Subversion
doCheckout() ‘svn checkout’
doUpdate() ‘svn update’
doSwitch() ‘svn switch’
doRelocate() ‘svn switch –relocate oldURL newURL’
doExport() ‘svn export’

SVNWCClient:
此类提供了许多和本地工作副本相关的操作,同时也能访问存储库。
doAdd(…)添加文件、目录到工作副本并且预定添加到存储库。它们会在下次提交上传并添加到存储库中。
doDelete(…)从工作副本中删除一个文件或目录。它们会在下次提交上传并添加到存储库中。
doCleanup(…)递归清理工作副本,删除未完成的工作副本锁定,并恢复未完成的操作。
doInfo(…)获取一个工作副本条目的信息。
doLock(…)锁定工作副本或存储库中的条目,使其他用户不能对条目进行修改。
doUnlock(…)解锁工作副本或存储库中的条目。
doSetProperty(…)对工作副本或存储库中的条目设置属性名和属性值。
doSetrevisionProperty(…)对修订版本的条目设置属性名和属性值。
doGetProperty(…)获得工作副本或存储库中条目的属性值。
doGetRevisionProperty(…)获得修订版本中的条目的属性值。
doRevert(…)取消所有本地编辑。

SVNWCClient的方法和SVN命令行客户端的命令的对应关系。

SVNKit Subversion
doAdd() ‘svn add’
doDelete() ‘svn delete’
doCleanup() ‘svn cleanup’
doInfo() ‘svn info’
doLock() ‘svn lock’
doUnlock() ‘svn unlock’
doSetProperty() ‘svn propset PROPNAME PROPVAL PATH’
‘svn propdel PROPNAME PATH’
‘svn propedit PROPNAME PATH’
doSetRevisionProperty() ‘svn propset PROPNAME –revprop –r REV PROPVAL [URL]’
‘svn propdel PROPNAME –revprop -r REV [URL]’
‘svn propedit PROPNAME –revprop -r REV [URL]’
doGetProperty() ‘svn propget PROPNAME PATH’
‘svn proplist PATH’
doGetRevisionProperty() ‘svn propget PROPNAME –revprop –r REV [URL]’
‘svn proplist –revprop -r REV [URL]’
doResolve() ‘svn resolved’
doRevert() ‘svn revert’

SVNStatusClient:
此类用来获取工作副本条目(文件或目录)的状态信息。
doStatus(…)获得一个工作副本条目的状态。
SVNStatusClient的方法和SVN命令行客户端的命令的对应关系。
SVNKit Subversion
doStatus() ‘svn status’

SVNCommitClient:
此类提供了把改变提交到存储库上的一些操作。
doCommit(…)将修改从工作副本提交到存储库。
doImport(…)递归提交一个路径(本地目录)到存储库。
doDelete(…)从存储库中删除一个条目。
doMkDir(…)在存储库中创建一个目录。
SVNCommitClient的方法和SVN命令行客户端的命令的对应关系。
SVNKit Subversion
doCommit() ‘svn commit’
doImport() ‘svn import’
doDelete() ‘svn delete URL’
doMkDir() ‘svn mkdir URL’

SVNMoveClient:
此类提供文件在工作副本内移动、取消移动等操作。
doMove(…)把源条目移动到目的条目。
undoMove(…)取消上次的移动操作。
doVirtualCopy(…)复制或移动源文件的版本控制信息到目的文件。

SVNCopyClient:
此类可提供SVN支持的任何复制和移动操作。
doCopy(…)

SVNDiffClient:
此类提供比较不同版本间的差异和合并差异的方法。
doDiff(…)获取两个版本间的差异。
doMerge(…)合并两组文件间的差异。
SVNDiffClient的方法和SVN命令行客户端的命令的对应关系。
SVNKit Subversion
doDiff() ‘svn diff’
doMerge() ‘svn merge’

五、程序框架
首先新建java项目,把SVNKit的jar包放到项目的类路径下面。
Jar包有trilead.jar,svnkit-javahl.jar,svnkit-cli.jar,svnkit.jar和jna.jar。

程序框架如下所示:

六、典型功能实现的范例

环境创建

按快速入门中介绍的方法创建版本库。添加用户test,密码也为test。
启动版本库服务器。访问地址:svn://localhost/。
创建目录:E:\svntest\impDir (把此目录中的内容导入到版本库中)
\impProject
\juniper_config.txt
\cisco_config.txt
E:\svntest\wc     (此目录是工作副本目录)

1、Import操作范例

2、checkout操作范例

3、commit操作范例
注意:执行此操作要先
执行checkout操作。因为本地需要有工作副本此范例才能运行。

4、update操作范例
注意:执行此操作要先执行checkout操作。因为本地需要有工作副本此范例才能运行。

5、版本差异比较操作范例
注意:执行此操作要先执行checkout操作。因为本地需要有工作副本此范例才能运行。

6、浏览版本库操作范例
此范例用了底层API.和高层 API的程序框架有所不同。

7、显示文件内容操作范例
此范例用了底层API.和高层 API的程序框架稍有不同。

七、参考资源
http://www.svnkit.com/documentation.html :里面有SVNKit的介绍及详细的示例代码。

SVNKit工具包中的javadoc文档:里面有详细的类及类方法的介绍。

SVNKit下载地址:http://www.svnkit.com