1、SVNKit 开发指南一、SVN 快速入门 .11、软件下载 .22、服务器和客户端安装 .23、建立版本库(Repository) .24、配置用户和权限 .25、运行独立服务器 .36、初始化导入 .37、基本客户端操作 .3二、SVNKit 开发环境 .4三、SVNKit 的结构 .4四、SVNKit 类关系图 .4SVNLogClient: .5SVNUpdateClient: .6SVNWCClient: .6SVNStatusClient:.8SVNCommitClient:.8SVNMoveClient: .8SVNCopyClient:.8SVNDiffClient:.9五、程
2、序框架 .9六、典型功能实现的范例 .11环境创建 .111、Import 操作范例 .122、checkout 操作范例 .133、commit 操作范例 .144、update 操作范例 .165、版本差异比较操作范例 .176、浏览版本库操作范例 .197、显示文件内容操作范例 .22七、参考资源 .25一、SVN 快速入门本文主要介绍在 windows 下使用的方式,对于 UNIX 环境下,区别并不大。介绍的具体步骤如下: 软件下载 服务器和客户端安装 建立版本库(Repository) 配置用户和权限 运行独立服务器 初始化导入 基本客户端操作1、软件下载 下载 Subversion
3、 服务器程序 到官方网站的下载二进制安装文件,来到二进制包下载部分,找到 Windows NT, 2000, XP and 2003 部分,然后选择 “ this directory “,这样我们可以看到许多下载的内容,目前可以下载 svn-1.4.0-setup.exe 。 下载 Subversion 的 Windows 客户端 TortoiseSVN TortoiseSVN 是扩展 Windows Shell 的一套工具,可以看作 Windows 资源管理器的插件,安装之后 Windows 就可以识别 Subversion 的工作目录。 官方网站是 TortoiseSVN ,下载方式和前面
4、的 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
5、-1.4.0.msi 按照提示安装即可,不过最后完成后会提示是否重启,其实重启只是使 svn 工作拷贝在 windows中的特殊样式生效,与所有的实际功能无关,这里为了立刻看到好的效果,还是重新启动机器。3、建立版本库(Repository)运行 Subversion 服务器需要首先要建立一个版本库(Repository),可以看作服务器上存放数据的数据库,在安装了 Subversion 服务器之后,可以直接运行,如: svnadmin create E:svndemorepository就会在目录 E:svndemorepository 下创建一个版本库。 我们也可以使用 TortoiseS
6、VN 图形化的完成这一步: 在目录 E:svndemorepository 下“ 右键-TortoiseSVN-Create Repository here.“, 然后可以选择版本库模式, 这里使用默认即可, 然后就创建了一系列目录和文件。 4、配置用户和权限 来到 E:svndemorepositoryconf 目录,修改 svnserve.conf: # general # password-db = passwd 改为: general password-db = passwd 然后修改同目录的 passwd 文件,去掉下面三行的注释: # users # harry = harryss
7、ecret # sally = sallyssecret 最后变成: users harry = harryssecret sally = sallyssecret 5、运行独立服务器 在任意目录下运行: svnserve -d -r E:svndemorepository 我们的服务器程序就已经启动了。注意不要关闭命令行窗口,关闭窗口也会把 svnserve 停止。 也可以把其设置为 windows 服务。6、初始化导入 来到我们想要导入的项目根目录,在这个例子里是 E:svndemoinitproject,目录下有一个readme.txt 文件:右键-TortoiseSVN-Import.
8、 URL of repository 输入“svn:/localhost/” ok 完成之后目录没有任何变化,如果没有报错,数据就已经全部导入到了我们刚才定义的版本库中。 需要注意的是,这一步操作可以完全在另一台安装了 TortoiseSVN 的主机上进行。例如运行 svnserve 的主机的 IP 是 133.96.121.22,则 URL 部分输入的内容就是“svn:/133.96.121.22/”。7、基本客户端操作 取出版本库到一个工作拷贝: 来到任意空目录下,在本例中是 E:svndemowc1,运行右键-Checkout,在 URL of repository 中输入 svn:/l
9、ocalhost/,这样我们就得到了一份工作拷贝。 在工作拷贝中作出修改并提交: 打开 readme.txt,作出修改,然后右键-Commit.,这样我们就把修改提交到了版本库,我们可以运行。 察看所作的修改: readme.txt 上右键 -TortoiseSVN-Show Log,这样我们就可以看到我们对这个文件所有的提交。在版本 1 上右键-Compare with working copy ,我们可以比较工作拷贝的文件和版本1 的区别。 二、SVNKit 开发环境1、 开发环境准备SVN 服务器版本我们选择比较稳定的版本 Subversion1.4,安装在 windows 操作系统上。
10、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 的 AP
11、I 主要分为两类: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、更新、提交、获取历史版本、比较版本间的差异、浏览存储
12、库等等。类图如下图所示:通过类图我们可以看到,通过 SVNClientManager 类可以获得各种 client 操作类的引用,进而可以执行很多操作。接下来,对 client 操作类进行分别介绍:SVNLogClient:通过此类可以获得版本修订历史记录、浏览存储库条目、文件内容注释。doLog() 用来获取版本的修订历史doList() 用来获取存储库条目树doAnnotate() 用来获取文件内容注释SVNLogClient 的方法和 SVN 命令行客户端的命令的对应关系。 SVNKit SubversiondoLog() svn logdoList() svn listdoAnnota
13、te() svn blameSVNUpdateClient:通过此类可以 check out、更新、切换工作副本,也可以从存储库中导出目录或文件。doCheckOut() 从存储库中检出工作副本。doUpdate()把工作副本更新为最新版本或某个指定版本。doSwitch()把工作副本更新为同一个存储库的不同分支上的版本。doExport(.) 从存储库中导出目录或文件。doRelocate()把工作副本更新为不同的存储库中的版本。SVNUpdateClient 的方法和 SVN 命令行客户端的命令的对应关系。 SVNKit SubversiondoCheckout() svn checkou
14、tdoUpdate() svn updatedoSwitch() svn switchdoRelocate() svn switch -relocate oldURL newURLdoExport() svn exportSVNWCClient:此类提供了许多和本地工作副本相关的操作,同时也能访问存储库。doAdd()添加文件、目录到工作副本并且预定添加到存储库。它们会在下次提交上传并添加到存储库中。doDelete()从工作副本中删除一个文件或目录。它们会在下次提交上传并添加到存储库中。doCleanup()递归清理工作副本,删除未完成的工作副本锁定,并恢复未完成的操作。doInfo()获取
15、一个工作副本条目的信息。doLock()锁定工作副本或存储库中的条目,使其他用户不能对条目进行修改。doUnlock()解锁工作副本或存储库中的条目。doSetProperty()对工作副本或存储库中的条目设置属性名和属性值。doSetrevisionProperty()对修订版本的条目设置属性名和属性值。doGetProperty()获得工作副本或存储库中条目的属性值。doGetRevisionProperty()获得修订版本中的条目的属性值。doRevert()取消所有本地编辑。SVNWCClient 的方法和 SVN 命令行客户端的命令的对应关系。SVNKit SubversiondoA
16、dd() svn adddoDelete() svn deletedoCleanup() svn cleanupdoInfo() svn infodoLock() svn lockdoUnlock() svn unlockdoSetProperty() svn propset PROPNAME PROPVAL PATHsvn propdel PROPNAME PATHsvn propedit PROPNAME PATH doSetRevisionProperty()svn propset PROPNAME -revprop r REV PROPVAL URLsvn propdel PROPNA
17、ME -revprop -r REV URLsvn propedit PROPNAME -revprop -r REV URL doGetProperty() svn propget PROPNAME PATHsvn proplist PATH doGetRevisionProperty()svn propget PROPNAME -revprop r REV URLsvn proplist -revprop -r REV URL doResolve() svn resolveddoRevert() svn revertSVNStatusClient:此类用来获取工作副本条目(文件或目录)的状
18、态信息。doStatus()获得一个工作副本条目的状态。SVNStatusClient 的方法和 SVN 命令行客户端的命令的对应关系。SVNKit SubversiondoStatus() svn statusSVNCommitClient:此类提供了把改变提交到存储库上的一些操作。doCommit()将修改从工作副本提交到存储库。doImport()递归提交一个路径(本地目录)到存储库。doDelete()从存储库中删除一个条目。doMkDir()在存储库中创建一个目录。SVNCommitClient 的方法和 SVN 命令行客户端的命令的对应关系。 SVNKit Subversiondo
19、Commit() svn commitdoImport() svn importdoDelete() svn delete URLdoMkDir() svn mkdir URLSVNMoveClient:此类提供文件在工作副本内移动、取消移动等操作。doMove()把源条目移动到目的条目。undoMove()取消上次的移动操作。doVirtualCopy()复制或移动源文件的版本控制信息到目的文件。SVNCopyClient:此类可提供 SVN 支持的任何复制和移动操作。doCopy()SVNDiffClient:此类提供比较不同版本间的差异和合并差异的方法。doDiff()获取两个版本间的差
20、异。doMerge()合并两组文件间的差异。SVNDiffClient 的方法和 SVN 命令行客户端的命令的对应关系。SVNKit SubversiondoDiff() svn diffdoMerge() svn merge五、程序框架首先新建 java 项目,把 SVNKit 的 jar 包放到项目的类路径下面。Jar 包有 trilead.jar,svnkit-javahl.jar,svnkit-cli.jar ,svnkit.jar 和 jna.jar。程序框架如下所示:/*第一步:*导入可能用到的类*/import java.io.*;import org.tmatesoft.svn
21、.core.*;import org.tmatesoft.svn.core.wc.*;import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory;import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;import org.tmatesoft.svn.core.internal.util.SVNPathUti
22、l;public class Demo /*第二步:*声明客户端管理类 SVNClientManager。*/private static SVNClientManager ourClientManager;public static void main(String args) throws SVNException /*第三步:* 对版本库进行初始化操作 (在用版本库进行其他操作前必须进行初始化) * 对于通过使用 http:/ 和 https:/ 访问,执行 DAVRepositoryFactory.setup();* 对于通过使用 svn:/ 和 svn+xxx:/访问,执行 SVNRepositoryFactoryImpl.setup();* 对于通过使用 file:/访问,执行 FSRepositoryFactory.setup();* 本程序框架用 svn:/来访问*/SVNRepositoryFactoryImpl.setup(); /*第四步:* 要访问版本库的相关变量设置*/版本库的 URL 地址