




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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五、程序框架9六、典型功能实现的范例11环境创建111、Import操作范例122、checkout操作范例133、commit操作范例144、update操作范例165、版本差异比较操作范例176、浏览版本库操作范例197、显示文件内容操作范例22七、参考资源25一、SVN快速入门本文主要介绍在windows下使用的方式,对于UNIX环境下,区别并不大。介绍的具体步骤如下:l 软件下载l 服务器和客户端安装l 建立版本库(Repository) l 配置用户和权限l 运行独立服务器 l 初始化导入 l 基本客户端操作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-501-win32-svn-1.4.0.msi。另外,subversion有相应的eclipse插件,通过此插件可以在eclipse集成开发环境中对开发项目进行版本管理。在这里暂不做介绍。2、服务器和客户端安装 服务器安装,直接运行svn-1.4.0-setup.exe ,根据提示安装即可,这样我们就有了一套服务器可以运行的环境。 安装TortoiseSVN,同样直接运行TortoiseSVN-501-win32-svn-1.4.0.msi按照提示安装即可,不过最后完成后会提示是否重启,其实重启只是使svn工作拷贝在windows中的特殊样式生效,与所有的实际功能无关,这里为了立刻看到好的效果,还是重新启动机器。 3、建立版本库(Repository)运行Subversion服务器需要首先要建立一个版本库(Repository),可以看作服务器上存放数据的数据库,在安装了Subversion服务器之后,可以直接运行,如: svnadmin create E:svndemorepository就会在目录E:svndemorepository下创建一个版本库。 我们也可以使用TortoiseSVN图形化的完成这一步: 在目录E:svndemorepository下右键-TortoiseSVN-Create Repository here.“, 然后可以选择版本库模式, 这里使用默认即可, 然后就创建了一系列目录和文件。 4、配置用户和权限 来到E:svndemorepositoryconf目录,修改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:svndemorepository 我们的服务器程序就已经启动了。注意不要关闭命令行窗口,关闭窗口也会把svnserve停止。 也可以把其设置为windows服务。6、初始化导入 来到我们想要导入的项目根目录,在这个例子里是E:svndemoinitproject,目录下有一个readme.txt文件:右键-TortoiseSVN-Import. URL of repository输入“svn:/localhost/” ok 完成之后目录没有任何变化,如果没有报错,数据就已经全部导入到了我们刚才定义的版本库中。 需要注意的是,这一步操作可以完全在另一台安装了TortoiseSVN的主机上进行。例如运行svnserve的主机的IP是2,则URL部分输入的内容就是“svn:/2/”。7、基本客户端操作 取出版本库到一个工作拷贝: 来到任意空目录下,在本例中是E:svndemowc1,运行右键-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命令行客户端的命令的对应关系。 SVNKitSubversiondoLog()svn logdoList()svn listdoAnnotate()svn blameSVNUpdateClient:通过此类可以check out、更新、切换工作副本,也可以从存储库中导出目录或文件。doCheckOut() 从存储库中检出工作副本。doUpdate()把工作副本更新为最新版本或某个指定版本。doSwitch()把工作副本更新为同一个存储库的不同分支上的版本。doExport(.) 从存储库中导出目录或文件。doRelocate()把工作副本更新为不同的存储库中的版本。SVNUpdateClient的方法和SVN命令行客户端的命令的对应关系。 SVNKitSubversiondoCheckout()svn checkoutdoUpdate()svn updatedoSwitch()svn switchdoRelocate()svn switch -relocate oldURL newURLdoExport()svn exportSVNWCClient:此类提供了许多和本地工作副本相关的操作,同时也能访问存储库。doAdd()添加文件、目录到工作副本并且预定添加到存储库。它们会在下次提交上传并添加到存储库中。doDelete()从工作副本中删除一个文件或目录。它们会在下次提交上传并添加到存储库中。doCleanup()递归清理工作副本,删除未完成的工作副本锁定,并恢复未完成的操作。doInfo()获取一个工作副本条目的信息。doLock()锁定工作副本或存储库中的条目,使其他用户不能对条目进行修改。doUnlock()解锁工作副本或存储库中的条目。doSetProperty()对工作副本或存储库中的条目设置属性名和属性值。doSetrevisionProperty()对修订版本的条目设置属性名和属性值。doGetProperty()获得工作副本或存储库中条目的属性值。doGetRevisionProperty()获得修订版本中的条目的属性值。doRevert()取消所有本地编辑。SVNWCClient的方法和SVN命令行客户端的命令的对应关系。SVNKitSubversiondoAdd()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 PROPNAME -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:此类用来获取工作副本条目(文件或目录)的状态信息。doStatus()获得一个工作副本条目的状态。SVNStatusClient的方法和SVN命令行客户端的命令的对应关系。SVNKitSubversiondoStatus()svn statusSVNCommitClient:此类提供了把改变提交到存储库上的一些操作。doCommit()将修改从工作副本提交到存储库。doImport()递归提交一个路径(本地目录)到存储库。doDelete()从存储库中删除一个条目。doMkDir()在存储库中创建一个目录。SVNCommitClient的方法和SVN命令行客户端的命令的对应关系。 SVNKitSubversiondoCommit()svn commitdoImport()svn importdoDelete()svn delete URLdoMkDir()svn mkdir URLSVNMoveClient:此类提供文件在工作副本内移动、取消移动等操作。doMove()把源条目移动到目的条目。undoMove()取消上次的移动操作。doVirtualCopy()复制或移动源文件的版本控制信息到目的文件。SVNCopyClient:此类可提供SVN支持的任何复制和移动操作。doCopy()SVNDiffClient:此类提供比较不同版本间的差异和合并差异的方法。doDiff()获取两个版本间的差异。doMerge()合并两组文件间的差异。SVNDiffClient的方法和SVN命令行客户端的命令的对应关系。SVNKitSubversiondoDiff()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.core.*;import org.tmatesoft.svn.core.wc.*;import ernal.io.dav.DAVRepositoryFactory;import ernal.io.fs.FSRepositoryFactory;import ernal.io.svn.SVNRepositoryFactoryImpl;import ernal.util.SVNPathUtil;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地址 SVNURL repositoryURL = null; try repositoryURL = SVNURL.parseURIEncoded(svn:/localhost/testRep); catch (SVNException e) / /版本库的用户名 String name = userName;/版本库的用户名密码 String password = userPassword;/工作副本目录 String myWorkingCopyPath = D:/MyWorkingCopy;/驱动选项 ISVNOptions options = SVNWCUtil.createDefaultOptions(true); /*第五步: * 创建SVNClientManager的实例。提供认证信息(用户名,密码) * 和驱动选项。 */ ourClientManager = SVNClientManager.newInstance(DefaultSVNOptions)options, name, password); /*第六步: * 通过SVNClientManager的实例获取要进行操作的client实例(如 * SVNUpdateClient) * 通过client实例来执行相关的操作。 * 此框架以check out操作来进行说明,其他操作类似。 */ /*工作副本目录创建*/ File wcDir = new File(myWorkingCopyPath); if (wcDir.exists() error(the destination directory + wcDir.getAbsolutePath() + already exists!, null); wcDir.mkdirs(); try /* * 递归的把工作副本从repositoryURL check out 到 wcDir目录。 * SVNRevision.HEAD 意味着把最新的版本checked out出来。 */ SVNUpdateClient updateClient = ourClientManager.getUpdateClient(); updateClient.setIgnoreExternals(false);updateClient.doCheckout(repositoryURL,wcDir,SVNRevision.HEAD, SVNRevision.HEAD, true); catch (SVNException svne) / 六、典型功能实现的范例环境创建按快速入门中介绍的方法创建版本库。添加用户test,密码也为test。启动版本库服务器。访问地址:svn:/localhost/。创建目录:E:svntestimpDir (把此目录中的内容导入到版本库中)impProjectjuniper_config.txtcisco_config.txtE:svntestwc (此目录是工作副本目录)1、Import操作范例package demo.wc;import java.io.File;import org.tmatesoft.svn.core.SVNCommitInfo;import org.tmatesoft.svn.core.SVNDepth;import org.tmatesoft.svn.core.SVNException;import org.tmatesoft.svn.core.SVNURL;import ernal.io.svn.SVNRepositoryFactoryImpl;import ernal.wc.DefaultSVNOptions;import org.tmatesoft.svn.core.wc.ISVNOptions;import org.tmatesoft.svn.core.wc.SVNClientManager;import org.tmatesoft.svn.core.wc.SVNWCUtil;/*此类执行的操作是把本地目录下的内容上传到版本库中。*/public class DoImport /声明SVN客户端管理类private static SVNClientManager ourClientManager;public static void main(String args) throws Exception /初始化支持svn:/协议的库。 必须先执行此操作。SVNRepositoryFactoryImpl.setup();/相关变量赋值SVNURL repositoryURL = null;try repositoryURL = SVNURL.parseURIEncoded(svn:/localhost/); catch (SVNException e) /String name = test;String password = test;ISVNOptions options = SVNWCUtil.createDefaultOptions(true);/实例化客户端管理类ourClientManager = SVNClientManager.newInstance(DefaultSVNOptions) options, name, password);/要把此目录中的内容导入到版本库File impDir = new File(e:/svntest/impDir);/执行导入操作SVNCommitInfo commitInfo=ourClientManager.getCommitClient().doImport(impDir, repositoryURL,import operation!,null, false,false,SVNDepth.INFINITY);System.out.println(commitInfo.toString();2、checkout操作范例package demo.wc;import java.io.File;import org.tmatesoft.svn.core.SVNDepth;import org.tmatesoft.svn.core.SVNException;import org.tmatesoft.svn.core.SVNURL;import ernal.io.svn.SVNRepositoryFactoryImpl;import ernal.wc.DefaultSVNOptions;import org.tmatesoft.svn.core.wc.ISVNOptions;import org.tmatesoft.svn.core.wc.SVNClientManager;import org.tmatesoft.svn.core.wc.SVNRevision;import org.tmatesoft.svn.core.wc.SVNUpdateClient;import org.tmatesoft.svn.core.wc.SVNWCUtil;/*此类执行的操作是把版本库中的内容check out到本地目录中*/public class CheckOut /声明SVN客户端管理类private static SVNClientManager ourClientManager;public static void main(String args) throws Exception /初始化支持svn:/协议的库。 必须先执行此操作。 SVNRepositoryFactoryImpl.setup();/相关变量赋值SVNURL repositoryURL = null;try repositoryURL = SVNURL.parseURIEncoded(svn:/localhost/); catch (SVNException e) /String name = test;String password = test;ISVNOptions options = SVNWCUtil.createDefaultOptions(true);/实例化客户端管理类ourClientManager = SVNClientManager.newInstance(DefaultSVNOptions) options, name, password);/要把版本库的内容check out到的目录File wcDir = new File(e:/svntest/wc);/通过客户端管理类获得updateClient类的实例。SVNUpdateClient updateClient = ourClientManager.getUpdateClient();/* * sets externals not to be ignored during the checkout */updateClient.setIgnoreExternals(false);/执行check out 操作,返回工作副本的版本号。long workingVersion= updateClient.doCheckout(repositoryURL, wcDir, SVNRevision.HEAD, SVNRevision.HEAD, SVNDepth.INFINITY,false);System.out.println(把版本:+workingVersion+ check out 到目录:+wcDir+中。);3、commit操作范例注意:执行此操作要先执行checkout操作。因为本地需要有工作副本此范例才能运行。package demo.wc;import java.io.File;import org.tmatesoft.svn.core.SVNDepth;import org.tmatesoft.svn.core.SVNException;import org.tmatesoft.svn.core.SVNURL;import ernal.io.svn.SVNRepositoryFactoryImpl;import ernal.wc.DefaultSVNOptions;import org.tmatesoft.svn.core.wc.ISVNOptions;import org.tmatesoft.svn.core.wc.SVNClientManager;import org.tmatesoft.svn.core.wc.SVNStatus;import org.tmatesoft.svn.core.wc.SVNStatusType;import org.tmatesoft.svn.core.wc.SVNWCUtil;/*此类的操作是把工作副本的某个文件提交到版本库中*/public class DoCommit /声明SVN客户端管理类private static SVNClientManager ourClientManager;public static void main(String args) throws Exception /初始化支持svn:/协议的库。 必须先执行此操作。SVNRepositoryFactoryImpl.setup();/相关变量赋值SVNURL repositoryURL = null;try repositoryURL = SVNURL.parseURIEncoded(svn:/localhost/); catch (SVNException e) /String name = test;String password = test;ISVNOptions options = SVNWCUtil.createDefaultOptions(true);/实例化客户端管理类ourClientManager = SVNClientManager.newInstance(DefaultSVNOptions) options, name, password);/要提交的文件File commitFile=new File(e:/svntest/wc/impProject/juniper_config.txt);/获取此文件的状态(是文件做了修改还是新添加的文件?)SVNStatus status=ourClientManager.getStatusClient().doStatus(commitFile, true);/如果此文件是新增加的则先把此文件添加到版本库,然后提交。if(status.getContentsStatus()=SVNStatusType.STATUS_UNVERSIONED)/把此文件增加到版本库中ourClientManager.getWCClient().doAdd(commitFile, false, false, false, SVNDepth.INFINITY,false,false);/提交此文件ourClientManager.getCommitClient().doCommit(new File commitFile , true, ,null,null,true, false, SVNDepth.INFINITY);System.out.println(add);/如果此文件不是新增加的,直接提交。else/ourClientManager.getCommitClient().doCommit(/new File commitFile , true, , false, true);ourClientManager.getCommitClient().doCommit(new File commitFile , true, ,null,null,true, false, SVNDepth.INFINITY);System.out.println(commit);System.out.println(status.getContentsStatus();4、update操作范例注意:执行此操作要先执行checkout操作。因为本地需要有工作副本此范例才能运行。package demo.wc;import java.io.File;import org.tmatesoft.svn.core.SVNDepth;import org.tmatesoft.svn.core.SVNException;import org.tmatesoft.svn.core.SVNURL;import ernal.io.svn.SVNRepositoryFactoryImpl;import ernal.wc.DefaultSVNOptions;import org.tmatesoft.svn.core.wc.ISVNOptions;import org.tmatesoft.svn.core.wc.SVNClientManager;import org.tmatesoft.svn.core.wc.SVNRevision;import org.tmatesoft.svn.core.wc.SVNUpdateClient;import org.tmatesoft.svn.core.wc.SVNWCUtil;/*此类用来把版本库中文件的某个版本更新到工作副本中*/public class DoUpdate /声明SVN客户端管理类private static SVNClientManager ourClientManager;public static void main(String args) throws Exception /初始化支持svn:/协议的库。 必须先执行此操作。SVNRepositoryFactoryImpl.setup();/相关变量赋值SVNURL repositoryURL = null;try repositoryURL = SVNURL.parseURIEncoded(svn:/localhost); catch (SVNException e) /String name = test;String password = test;ISVNOptions options = SVNWCUtil.createDefaultOptions(true);/实例化客户端管理类ourClientManager = SVNClientManager.newInstance(DefaultSVNOptions) options, name, password);/要更新的文件File updateFile=new File(e:/svntest/wc/impProject/juniper_config.txt);/获得updateClient的实例SVNUpdateClient updateClient = ourClientManager.getUpdateClient();updateClient.setIgnoreExternals(false);/执行更新操作long versionNum= updateClient.doUpdate(updateFile, SVNRevision.HEAD, SVNDepth.INFINITY,false,false);System.out.println(工作副本更新后的版本:+versionNum);5、版本差异比较操作范例注意:执行此操作要先执行checkout操作。因为本地需要有工作副本此范例才能运行。package demo.wc;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import org.tmatesoft.svn.core.SVNDepth;import org.tmatesoft.svn.core.SVNException;import org.tmatesoft.svn.core.SVNURL;import ernal.io.svn.SVNRepositoryFactoryImpl;import ernal.wc.DefaultSVNOptions;import org.tmatesoft.svn.core.wc.ISVNOptions;import org.tmatesoft.svn.core.wc.SVNClientManager;import org.tmatesoft.svn.core.wc.SVNDiffClient;import org.tmatesoft.svn.core.wc.SVNRevision;import org.tmatesoft.svn.core.wc.SVNWCUtil;/*此类用来比较某个文件两个版本的差异*/public class DoDiff /声明SVN客户端管理类private static SVNClientManager ourClientManager;public static void main(String args) throws Exception /初始化支持svn:/协议的库。 必须先执行此操作。SVNRepositoryFactoryImpl.setup();/相关变量赋值SVNURL repositoryURL = null;/在此例中用不上。try repositoryURL = SVNURL.parseURIEncoded(svn:/localhost); catch (SVNException e) /String name = test;String password = test;ISVNOptions options = SVNWCUtil.createDefaultOptions(true);/实例化客户端管理类ourClientManager = SVNClientManager.newInstance(DefaultSVNOptions) options, name, password);/要比较的文件File compFile = new File(e:/svntest
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年国家开放大学《文学与影视》期末考试备考试题及答案解析
- 2025年国家开放大学(电大)《人文艺术概论》期末考试备考试题及答案解析
- 员工职业健康安全管理与培训方案
- 2025年国家开放大学《品牌管理与推广策略》期末考试备考试题及答案解析
- 2025年国家开放大学《国际商务谈判》期末考试备考试题及答案解析
- 初中七年级英语单词默写纸质版模板
- 单亲家庭断绝父子关系协议书7篇
- 艾宾浩斯记忆曲线运用表格解析
- 四年级小学体育课程教案全集
- 农村山地合作投资协议书6篇
- 马铃薯水肥一体化技术
- 城镇排水管道检测与评估技术规程
- 药品储存与养护技术
- GB/T 18445-2025水泥基渗透结晶型防水材料
- 成都工勤转管理办法
- 基于深度学习的心电图诊断心律失常的研究
- 基金会专项基金管理办法
- 物业承接查验表格
- 行政管理专科经济法考试实务试题及答案
- spa馆卫生管理制度
- 2025年高考湖南省物理真题(含解析)
评论
0/150
提交评论