精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|||||||||
---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | ||||||||
发表时间:2010-06-09
最后修改:2010-06-10
SVNKit入门 SVNKit中怎样使用不同的仓库访问协议?
当你下载了最新版的SVNKit二进制文件并且准备使用它时,一个问题出现了,要创建一个库需要做哪些初始化的步骤?直接与Subversion仓库交互已经在低级层API中实现,主要的仓库访问驱动的接口就是SVNRepository抽象类。这个驱动实现了一些协议,一个协议一个实现。每个驱动由一个抽象工厂类-SVNRepositoryFactory 创建,抽象工厂类也有每一种协议的实现。下面的表格将一种协议和工厂类的实现类一一对应:
SVNKit初始化的操作 在使用SVNKit库前,你必须为某一特定的协议创建一个合适的SVNRepositryFactory对象。例如,如果你想使用 svn:// 协议来和仓库交互,你必须注册一下SVNRepositoryFactoryImpl工厂: try { SVNRepositoryFactoryImpl.setup(); ... } catch (SVNException e) { //handle exception }
这一步之后,由于SVNKit包含了注册的工厂对象,SVNRepositoryFactory知道了怎样给svn:// 协议创建SVNRepository驱动。接下来你就可以为它创建一个驱动了:
try { ... SVNURL url = SVNURL.parseURIDecoded( "svn://host/path_to_repository_root/inner_path" ); SVNRepository repository = SVNRepositoryFactory.create( url, null ); ... } catch ( SVNException e ) { //handle exception }
在SVNKit中,所有的仓库url由SVNURL类来表示,如果一个路径字符串不是UTF-8编码的,可以使用SVNURL的 parseURIDecoded()方法来创建一个新的url(如果需要编码,它会重新编码)。然后你可以通过这个url来在SVNRepositoryFactory中创建一个新的SVNRepository驱动。这样,你可以绑定驱动到任何一个你想访问的仓库地址。
上图说明了不同的仓库路径所创建的不同的驱动;一个是仓库跟目录(svn://host/path_to_root),一个是仓库中的一个文件夹(svn://host/path_to_root/dirA),另一个是仓库中的一个文件(svn://host/path_to_root/dirB/fileB1)。SVNRepository驱动能执行的大多数操作接受一下两个类型的仓库路径: 1、 不以’/’开始的路径 – 总是相对驱动绑定的路径 2、 以’/’开始的路径 – 总是相对于仓库跟目录的绝对路径
使用高级层API 当你使用SVNKit管理工作拷贝时,由于高级层API使用低级层API来与仓库交互,你也需要创建合适的工厂类,如果你遗漏了这一初始化步骤,可能会抛出一个SVNKit不能给提供的url创建SVNRepository对象的异常。
SVN*Client 类 全部高级层管理工作拷贝的操作都逻辑的份分配到SVN*Client类中:每一个SVN*Client类将一类操作集中起来(例如,SVNUpdateClient提供update操作的API,如:check out,update,switch,export)。有两种方法使用这些类: 1、 仅创建需要使用的SVN*Client对象 2、 创建一个SVNClientManager对象,它能提供所有需要使用的类型的SVN*Client的对象。
往前的文章在我的博客中可以找到,持续更新中……by xiangxji@gmail.com 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|||||||||
返回顶楼 | |||||||||
发表时间:2010-07-06
楼主:
请教一个问题,如果通过svnkit的jar包,想把一个版本删除掉,并且删除掉这个svn里的这个版本的文件本身,请问,通过什么样的具体代码实现? 目前我做到的仅仅是删除了一个文件的版本,但是这个版本本身的东西还保留着,不知道如何处理?部分代码如下: public SVNCommitInfo deleteFile(String strFilePath) throws SVNException { // Opens the current root directory. isvnEditor = svnRepository.getCommitEditor(" delete file ", null); isvnEditor.openRoot(-1); isvnEditor.deleteEntry(strFilePath, -1); // Closes the root directory. isvnEditor.closeDir(); return isvnEditor.closeEdit(); } 请指教下了,谢谢! 我的email:playhorse@126.com |
|||||||||
返回顶楼 | |||||||||
发表时间:2010-07-06
bbsskyhorse 写道 楼主: 请教一个问题,如果通过svnkit的jar包,想把一个版本删除掉,并且删除掉这个svn里的这个版本的文件本身,请问,通过什么样的具体代码实现? 目前我做到的仅仅是删除了一个文件的版本,但是这个版本本身的东西还保留着,不知道如何处理?部分代码如下: public SVNCommitInfo deleteFile(String strFilePath) throws SVNException { // Opens the current root directory. isvnEditor = svnRepository.getCommitEditor(" delete file ", null); isvnEditor.openRoot(-1); isvnEditor.deleteEntry(strFilePath, -1); // Closes the root directory. isvnEditor.closeDir(); return isvnEditor.closeEdit(); } 请指教下了,谢谢! 我的email:playhorse@126.com 当一个文件加入仓库中,这个文件就不可能完全被删除了,请看我的svnkit的第一篇博文:svn纯java客户端SVNKit学习整理(1) |
|||||||||
返回顶楼 | |||||||||
浏览 13777 次