SVNKit开发手册Word文档格式.docx
《SVNKit开发手册Word文档格式.docx》由会员分享,可在线阅读,更多相关《SVNKit开发手册Word文档格式.docx(36页珍藏版)》请在冰豆网上搜索。
右键->
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文件:
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上右键->
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命令行客户端的命令的对应关系。
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命令行客户端的命令的对应关系。
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命令行客户端的命令的对应关系。
doStatus()
svnstatus'
SVNCommitClient:
此类提供了把改变提交到存储库上的一些操作。
doCommit(…)将修改从工作副本提交到存储库。
doImport(…)递归提交一个路径(本地目录)到存储库。
doDelete(…)从存储库中删除一个条目。
doMkDir(…)在存储库中创建一个目录。
SVNCommitClient的方法和SVN命令行客户端的命令的对应关系。
doCommit()
svncommit'
doImport()
svnimport'
svndeleteURL'
doMkDir()
svnmkdirURL'
SVNMoveClient:
此类提供文件在工作副本内移动、取消移动等操作。
doMove(…)把源条目移动到目的条目。
undoMove(…)取消上次的移动操作。
doVirtualCopy(…)复制或移动源文件的版本控制信息到目的文件。
SVNCopyClient:
此类可提供SVN支持的任何复制和移动操作。
doCopy(…)
SVNDiffClient:
此类提供比较不同版本间的差异和合并差异的方法。
doDiff(…)获取两个版本间的差异。
doMerge(…)合并两组文件间的差异。
SVNDiffClient的方法和SVN命令行客户端的命令的对应关系。
doDiff()
svndiff'
doMerge()
svnmerge'
五、程序框架
首先新建java项目,把SVNKit的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();
/*
*递归的把工作副本从repositoryURLcheckout到wcDir目录。
*SVNRevision.HEAD意味着把最新的版本checkedout出来。
SVNUpdateClientupdateClient=ourClientManager.getUpdateClient();
updateClient.setIgnoreExternals(false);
updateClient.doCheckout(repositoryURL,wcDir,SVNRevision.HEAD,SVNRevision.HEAD,true);
}catch(SVNExceptionsvne){
}
六、典型功能实现的范例
环境创建
按快速入门中介绍的方法创建版本库。
添加用户test,密码也为test。
启动版本库服务器。
访问地址:
//localhost/。
创建目录:
E:
\svntest\impDir(把此目录中的内容导入到版本库中)
\impProject
\juniper_config.txt
\cisco_config.txt
\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.wc.DefaultSVNOptions;
importorg.tmatesoft.svn.core.wc.ISVNOptions;
importorg.tmatesoft.svn.core.wc.SVNClientManager;
importorg.tmatesoft.svn.core.wc.SVNWCUtil;
/*此类执行的操作是把本地目录下的内容上传到版本库中。
publicclassDoImport{
//声明SVN客户端管理类
publicstaticvoidmain(String[]args)throwsException{
//初始化支持svn:
//协议的库。
必须先执行此操作。
SVNRepositoryFactoryImpl.setup();
//相关变量赋值
SVNURLrepositoryURL=null;
try{
repositoryURL=SVNURL.parseURIEncoded("
//localhost/"
}catch(SVNExceptione){
//
}
Stringname="
test"
Stringpassword="
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操作范例
importorg.tmatesoft.svn.cor