SVNKit开发手册.docx
《SVNKit开发手册.docx》由会员分享,可在线阅读,更多相关《SVNKit开发手册.docx(36页珍藏版)》请在冰豆网上搜索。
SVNKit开发手册
SVNKit开发手册
一、SVN快速入门
本文主要介绍在windows下使用的方式,对于UNIX环境下,区别并不大。
介绍的具体步骤如下:
●软件下载
●服务器和客户端安装
●建立版本库(Repository)
●配置用户和权限
●运行独立服务器
●初始化导入
●基本客户端操作
1、软件下载
下载Subversion服务器程序
到官方网站的下载二进制安装文件,来到二进制包下载部分,找到WindowsNT,2000,XPand2003部分,然后选择"thisdirectory",这样我们可以看到许多下载的内容,目前可以下载svn-1.4.0-setup.exe。
下载Subversion的Windows客户端TortoiseSVN
TortoiseSVN是扩展WindowsShell的一套工具,可以看作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服务器之后,可以直接运行,如:
svnadmincreateE:
\svndemo\repository
就会在目录E:
\svndemo\repository下创建一个版本库。
我们也可以使用TortoiseSVN图形化的完成这一步:
在目录E:
\svndemo\repository下"右键->TortoiseSVN->CreateRepositoryhere...“,然后可以选择版本库模式,这里使用默认即可,然后就创建了一系列目录和文件。
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-rE:
\svndemo\repository我们的服务器程序就已经启动了。
注意不要关闭命令行窗口,关闭窗口也会把svnserve停止。
也可以把其设置为windows服务。
6、初始化导入
来到我们想要导入的项目根目录,在这个例子里是E:
\svndemo\initproject,目录下有一个readme.txt文件:
右键->TortoiseSVN->Import...
URLofrepository输入“svn:
//localhost/”
ok
完成之后目录没有任何变化,如果没有报错,数据就已经全部导入到了我们刚才定义的版本库中。
需要注意的是,这一步操作可以完全在另一台安装了TortoiseSVN的主机上进行。
例如运行svnserve的主机的IP是133.96.121.22,则URL部分输入的内容就是“svn:
//133.96.121.22/”。
7、基本客户端操作
取出版本库到一个工作拷贝:
来到任意空目录下,在本例中是E:
\svndemo\wc1,运行右键->Checkout,在URLofrepository中输入svn:
//localhost/,这样我们就得到了一份工作拷贝。
在工作拷贝中作出修改并提交:
打开readme.txt,作出修改,然后右键->Commit...,这样我们就把修改提交到了版本库,我们可以运行。
察看所作的修改:
readme.txt上右键->TortoiseSVN->ShowLog,这样我们就可以看到我们对这个文件所有的提交。
在版本1上右键->Comparewithworkingcopy,我们可以比较工作拷贝的文件和版本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主要分为两类:
HighLevelAPI和LowLevelAPI。
通常情况下,我们使用HighLevelAPI即可完成工作任务。
HighLevelAPI通过封装、使用LowLevelAPI,使开发工作变得相对简单、容易。
在此我们重点介绍HighLevelAPI。
HighLevelAPI介绍:
在HighLevelAPI中,我们通过SVNClientManager类即可访问很多接口,这些接口几乎允许subversion用户执行可能需要的任何工作。
这些工作包括:
checkingout、更新、提交、获取历史版本、比较版本间的差异、浏览存储库等等。
类图如下图所示:
通过类图我们可以看到,通过SVNClientManager类可以获得各种client操作类的引用,进而可以执行很多操作。
接下来,对client操作类进行分别介绍:
SVNLogClient:
通过此类可以获得版本修订历史记录、浏览存储库条目、文件内容注释。
doLog(…)用来获取版本的修订历史
doList(…)用来获取存储库条目树
doAnnotate(…)用来获取文件内容注释
SVNLogClient的方法和SVN命令行客户端的命令的对应关系。
SVNKit
Subversion
doLog()
'svnlog'
doList()
'svnlist'
doAnnotate()
'svnblame'
SVNUpdateClient:
通过此类可以checkout、更新、切换工作副本,也可以从存储库中导出目录或文件。
doCheckOut(…)从存储库中检出工作副本。
doUpdate(…)把工作副本更新为最新版本或某个指定版本。
doSwitch(…)把工作副本更新为同一个存储库的不同分支上的版本。
doExport(..)从存储库中导出目录或文件。
doRelocate()把工作副本更新为不同的存储库中的版本。
SVNUpdateClient的方法和SVN命令行客户端的命令的对应关系。
SVNKit
Subversion
doCheckout()
'svncheckout'
doUpdate()
'svnupdate'
doSwitch()
'svnswitch'
doRelocate()
'svnswitch--relocateoldURLnewURL'
doExport()
'svnexport'
SVNWCClient:
此类提供了许多和本地工作副本相关的操作,同时也能访问存储库。
doAdd(…)添加文件、目录到工作副本并且预定添加到存储库。
它们会在下次提交上传并添加到存储库中。
doDelete(…)从工作副本中删除一个文件或目录。
它们会在下次提交上传并添加到存储库中。
doCleanup(…)递归清理工作副本,删除未完成的工作副本锁定,并恢复未完成的操作。
doInfo(…)获取一个工作副本条目的信息。
doLock(…)锁定工作副本或存储库中的条目,使其他用户不能对条目进行修改。
doUnlock(…)解锁工作副本或存储库中的条目。
doSetProperty(…)对工作副本或存储库中的条目设置属性名和属性值。
doSetrevisionProperty(…)对修订版本的条目设置属性名和属性值。
doGetProperty(…)获得工作副本或存储库中条目的属性值。
doGetRevisionProperty(…)获得修订版本中的条目的属性值。
doRevert(…)取消所有本地编辑。
SVNWCClient的方法和SVN命令行客户端的命令的对应关系。
SVNKit
Subversion
doAdd()
'svnadd'
doDelete()
'svndelete'
doCleanup()
'svncleanup'
doInfo()
'svninfo'
doLock()
'svnlock'
doUnlock()
'svnunlock'
doSetProperty()
'svnpropsetPROPNAMEPROPVALPATH'
'svnpropdelPROPNAMEPATH'
'svnpropeditPROPNAMEPATH'
doSetRevisionProperty()
'svnpropsetPROPNAME--revprop–rREVPROPVAL[URL]'
'svnpropdelPROPNAME--revprop-rREV[URL]'
'svnpropeditPROPNAME--revprop-rREV[URL]'
doGetProperty()
'svnpropgetPROPNAMEPATH'
'svnproplistPATH'
doGetRevisionProperty()
'svnpropgetPROPNAME--revprop–rREV[URL]'
'svnproplist--revprop-rREV[URL]'
doResolve()
'svnresolved'
doRevert()
'svnrevert'
SVNStatusClient:
此类用来获取工作副本条目(文件或目录)的状态信息。
doStatus(…)获得一个工作副本条目的状态。
SVNStatusClient的方法和SVN命令行客户端的命令的对应关系。
SVNKit
Subversion
doStatus()
'svnstatus'
SVNCommitClient:
此类提供了把改变提交到存储库上的一些操作。
doCommit(…)将修改从工作副本提交到存储库。
doImport(…)递归提交一个路径(本地目录)到存储库。
doDelete(…)从存储库中删除一个条目。
doMkDir(…)在存储库中创建一个目录。
SVNCommitClient的方法和SVN命令行客户端的命令的对应关系。
SVNKit
Subversion
doCommit()
'svncommit'
doImport()
'svnimport'
doDelete()
'svndeleteURL'
doMkDir()
'svnmkdirURL'
SVNMoveClient:
此类提供文件在工作副本内移动、取消移动等操作。
doMove(…)把源条目移动到目的条目。
undoMove(…)取消上次的移动操作。
doVirtualCopy(…)复制或移动源文件的版本控制信息到目的文件。
SVNCopyClient:
此类可提供SVN支持的任何复制和移动操作。
doCopy(…)
SVNDiffClient:
此类提供比较不同版本间的差异和合并差异的方法。
doDiff(…)获取两个版本间的差异。
doMerge(…)合并两组文件间的差异。
SVNDiffClient的方法和SVN命令行客户端的命令的对应关系。
SVNKit
Subversion
doDiff()
'svndiff'
doMerge()
'svnmerge'
五、程序框架
首先新建java项目,把SVNKit的jar包放到项目的类路径下面。
Jar包有trilead.jar,svnkit-javahl.jar,svnkit-cli.jar,svnkit.jar和jna.jar。
程序框架如下所示:
/*第一步:
*导入可能用到的类
*/
importjava.io.*;
importorg.tmatesoft.svn.core.*;
importorg.tmatesoft.svn.core.wc.*;
importorg.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
importorg.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory;
importorg.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;
importorg.tmatesoft.svn.core.internal.util.SVNPathUtil;
publicclassDemo{
/*第二步:
*声明客户端管理类SVNClientManager。
*/
privatestaticSVNClientManagerourClientManager;
publicstaticvoidmain(String[]args)throwsSVNException{
/*第三步:
*对版本库进行初始化操作(在用版本库进行其他操作前必须进行初始化)
*对于通过使用http:
//和https:
//访问,执行DAVRepositoryFactory.setup();
*对于通过使用svn:
//和svn+xxx:
//访问,执行SVNRepositoryFactoryImpl.setup();
*对于通过使用file:
///访问,执行FSRepositoryFactory.setup();
*本程序框架用svn:
//来访问
*/
SVNRepositoryFactoryImpl.setup();
/*第四步:
*要访问版本库的相关变量设置
*/
//版本库的URL地址
SVNURLrepositoryURL=null;
try{
repositoryURL=SVNURL.parseURIEncoded("svn:
//localhost/testRep");
}catch(SVNExceptione){
//
}
//版本库的用户名
Stringname="userName";
//版本库的用户名密码
Stringpassword="userPassword";
//工作副本目录
StringmyWorkingCopyPath="D:
/MyWorkingCopy";
//驱动选项
ISVNOptionsoptions=SVNWCUtil.createDefaultOptions(true);
/*第五步:
*创建SVNClientManager的实例。
提供认证信息(用户名,密码)
*和驱动选项。
*/
ourClientManager=SVNClientManager.newInstance((DefaultSVNOptions)options,name,password);
/*第六步:
*通过SVNClientManager的实例获取要进行操作的client实例(如*SVNUpdateClient)
*通过client实例来执行相关的操作。
*此框架以checkout操作来进行说明,其他操作类似。
*/
/*工作副本目录创建*/
FilewcDir=newFile(myWorkingCopyPath);
if(wcDir.exists()){
error("thedestinationdirectory'"
+wcDir.getAbsolutePath()+"'alreadyexists!
",null);
}
wcDir.mkdirs();
try{
/*
*递归的把工作副本从repositoryURLcheckout到wcDir目录。
*SVNRevision.HEAD意味着把最新的版本checkedout出来。
*/
SVNUpdateClientupdateClient=ourClientManager.getUpdateClient();
updateClient.setIgnoreExternals(false);
updateClient.doCheckout(repositoryURL,wcDir,SVNRevision.HEAD,SVNRevision.HEAD,true);
}catch(SVNExceptionsvne){
//
}
}
六、典型功能实现的范例
环境创建
按快速入门中介绍的方法创建版本库。
添加用户test,密码也为test。
启动版本库服务器。
访问地址:
svn:
//localhost/。
创建目录:
E:
\svntest\impDir(把此目录中的内容导入到版本库中)
\impProject
\juniper_config.txt
\cisco_config.txt
E:
\svntest\wc(此目录是工作副本目录)
1、Import操作范例
packagedemo.wc;
importjava.io.File;
importorg.tmatesoft.svn.core.SVNCommitInfo;
importorg.tmatesoft.svn.core.SVNDepth;
importorg.tmatesoft.svn.core.SVNException;
importorg.tmatesoft.svn.core.SVNURL;
importorg.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;
importorg.tmatesoft.svn.core.internal.wc.DefaultSVNOptions;
importorg.tmatesoft.svn.core.wc.ISVNOptions;
importorg.tmatesoft.svn.core.wc.SVNClientManager;
importorg.tmatesoft.svn.core.wc.SVNWCUtil;
/*此类执行的操作是把本地目录下的内容上传到版本库中。
*/
publicclassDoImport{
//声明SVN客户端管理类
privatestaticSVNClientManagerourClientManager;
publicstaticvoidmain(String[]args)throwsException{
//初始化支持svn:
//协议的库。
必须先执行此操作。
SVNRepositoryFactoryImpl.setup();
//相关变量赋值
SVNURLrepositoryURL=null;
try{
repositoryURL=SVNURL.parseURIEncoded("svn:
//localhost/");
}catch(SVNExceptione){
//
}
Stringname="test";
Stringpassword="test";
ISVNOptionsoptions=SVNWCUtil.createDefaultOptions(true);
//实例化客户端管理类
ourClientManager=SVNClientManager.newInstance(
(DefaultSVNOptions)options,name,password);
//要把此目录中的内容导入到版本库
FileimpDir=newFile("e:
/svntest/impDir");
//执行导入操作
SVNCommitInfocommitInfo=ourClientManager.getCommitClient().doImport(impDir,repositoryURL,
"importoperation!
",null,false,false,SVNDepth.INFINITY);
System.out.println(commitInfo.toString());
}
}
2、checkout操作范例
packagedemo.wc;
importjava.io.File;
importorg.tmatesoft.svn.core.SVNDepth;
importorg.tmatesoft.svn.core.SVNException;
importorg.tmatesoft.svn.core.SVNURL;
importorg.tmatesoft.svn.cor