这篇文章是参考SVNKit官网在wiki的文档,做了个人的理解~

  首先抛出一个疑问,Subversion是做什么的,SVNKit又是用来干什么的?

  相信一般工作过的同学都用过或了解过svn,不了解的同学可以到官网看下,这里不作为本文重点。

  需要理解的概念:

    仓库(Repository):是一个特殊的结构,记录文件版本管理的状态。

    工作副本(Working Copy):本地从仓库检出的文件。

    修订版(Revision):用于记录仓库数据的变更状态,初始化版本为0,每执行一次操作版本号+1,每执行一次都会生成一个快照。

  SVN目录结构:

    每次进行提交等操作,svn并非记录所有文件的内容,而是比较智能的只记录和上一个版本不同的文件、目录。

    所以,如果你删除了某一个文件,并非完整的删除掉了,因为你在历史的修订版本中还是可以看到的。

  使用方式:

    1.利用一个svn客户端程序,比如命令行、TortoiseSVN、VisualSVN Server、各种IDE插件(Eclipse的Subclipse、Intellij IDEA的TMATE)
    2.利用特殊的客户端类库,比如SVNKit就是一个纯java操作SVN的程序

  集中管理不同的应用大约可以分为以下两种模式:

    1.适用于使用Working Copy管理的程序,程序通常以文件、目录等方式存在。

    2.不适用于Working Copy管理的程序,这里比较抽象一些,区别于文件、目录。但是这类文件的版本控制也是非常重要的。这种类型的程序使用Subversion Repository管理,保持其抽象的模型层次。

  建立一个Subversion仓库

  参考我的另一篇博客:http://www.cnblogs.com/douJiangYouTiao888/p/6116121.html

  SVNKit的结构是什么样子的?

  

  通过上图我们可以比较明显的看出,主要包含两种操作方式:

  ①.High-Level API:针对Working Copy的一系列操作,底层实现实际调用Low-Level API。封装了多个SVN*Client,不同的操作基于不同的SVN*Client,操作方法和参数与SVN客户端命令行比较相似。

  ②.Low-Level API:针对Subversion Repository的操作,相当于操作Repository的中间驱动,它知道如何与底层协议进行交互(实际上这层API实现了底层协议)。这一层对数据结构进行了分层,表现为一个包含版本控制的、抽象复杂的树结构。

  SVNKit访问Repository所支持的协议:

  远程协议:
  ①.svn://协议(或svn+xxx,最常用的是svn+ssh)
  ②.http://协议(或https://协议)
  本地协议:
  ①.file:///协议,只支持FSFS类型的Repository

  

  开始使用SVNKit

  从官网下载好SVNKit的二进制安装包后,第一步应该做什么?

  High-Level API:主要使用SVNClientManager类来创建一些了的SVN*Client实现一系列对Working Copy的操作,比如创建一个SVNUpdateClient,可以执行checkout、update、switch、export等。

  Low-Level API:主要使用SVNRepository类与Repository仓库进行交互,支持的协议都是基于SVNRepositoryFactory抽象类的具体实现,协议和实现类的关系:

protocol    SVNRepositoryFactory realization
svn:// SVNRepositoryFactoryImpl
http:// DAVRepositoryFactory
file:/// FSRepositoryFactory

  使用High-Level API的操作步骤:

  1.根据不同协议,初始化不同的仓库工厂。(工厂实现基于SVNRepositoryFactory抽象类)

//svn://, svn+xxx:// (svn+ssh:// in particular)
SVNRepositoryFactoryImpl.setup();
//http:// and https://
DAVRepositoryFactory.setup();
//file:///
FSRepositoryFactory.setup();

  2.创建一个驱动。(基于工厂),svnkit中repository所有的URL都基于SVNURL类生成,编码不是UTF-8的话,可以调用SVNURL的parseURIEncoded()方法。url可以是项目根目录、目录或文件。

SVNURL url = SVNURL.parseURIDecoded( "svn://host/path_to_repository_root/inner_path" );
SVNRepository repository = SVNRepositoryFactory.create( url, null );

  这里的URL有两种表现形式:(此处不好理解,下一篇文章会使用具体代码做解释)

  ①.不是以"/"开头,相对于驱动的绑定位置,即Repository的目录
  ②.以"/"开头,代表repository的根,相对于Repository的Root对应的目录

  3.创建一个权限验证对象

  SVN大多数操作都是具有权限访问控制的,大多数情况不支持匿名访问。

  SVNKit使用ISVNAuthenticationManager接口来实现权限的控制。

ISVNAuthenticationManager authManager;
...
SVNURL url = SVNURL.parseURIEncoded( "svn://host/path_to_repository_root/inner_path" );
SVNRepository repository = SVNRepositoryFactory.create( url , null );
//set an auth manager which will provide user credentials
repository.setAuthenticationManager(basicAuthManager);
...

  权限管理基于以下四个逻辑块:

  

  不同类型的身份验证凭据:(要依据实际类型创建)

Kind                Class representation            Field of usage
PASSWORD SVNPasswordAuthentication login:password authentication (svn://, http://)
SSH SVNSSHAuthentication In svn+ssh:// tunneled connections
SSL SVNSSLAuthentication In secure https:// connections
USERNAME SVNUserNameAuthentication With file:/// protocol, on local machines

  身份验证交互示意图(图1首次、图2非首次):身份验证首次需要用户输入,后续则无需重复输入:

  图1:

  

  图2:

   

  代理:如果authentication manager提供了一个非空的proxy manager,SVNKit将通过代理服务器代理管理目标服务器。

  SSL:支持SSL管理

  ISVNAuthenticationManager的默认实现:

  ①.BasicAuthenticationManager:

    1.无需磁盘授权存储。

    2.无需提供SSL provider

    3.无需服务器或者文件配置。

    4.使用proxy、ssh setting、user credentials provoded到类的构造器中,无需身份验证提供者。

    5.不缓存credentials 。

  ②.DefaultSVNAuthenticationManager:

    1.可以使用磁盘一个授权存储于默认Subversion运行的配置或者指定的目录。可以在目录中缓存credentials。

    2.使用运行时的内存存储credentials。

    3.可以使用用户提供的username/password认证用户。

    4.使用SSL、SSH、Proxy setting、服务器配置文件运行Subvesion。

  强制认证方案:

  尽管Subversion的优势是你不需要重复验证直到服务器要求验证。有时它可能是有效有能力让svnkit立即验证用户不浪费时间。ISVNAuthenticationManager接口提供了这个能力,它在SVNKit使用一个行为控制时返回一个标识。

  HTTP认证的方案:

  ①.Basic

  ②.Digest

  ③.NTLM

  Basic、Digest两种方案,你需要提供一个用户名和密码:

ISVNAuthenticationManager authManager = new BasicAuthenticationManager( "login" , "password" );

  NTLM方案,你需要提供一个主域名:

ISVNAuthenticationManager authManager = new BasicAuthenticationManager( "DOMAIN\\login" , "password" );

  
   

SVNKit学习——wiki+简介(二)的更多相关文章

  1. 现代3D图形编程学习-基础简介(2) (译)

    本书系列 现代3D图形编程学习 基础简介(2) 图形和渲染 接下去的内容对渲染的过程进行粗略介绍.遇到的部分内容不是很明白也没有关系,在接下去的章节中,会被具体阐述. 你在电脑屏幕上看到的任何东西,包 ...

  2. 现代3D图形编程学习-基础简介(1) (译)

    本书系列 现代3D图形编程学习 基础简介 并不像本书的其他章节,这章内容没有相关的源代码或是项目.本章,我们将讨论向量,图形渲染理论,以及OpenGL. 向量 在阅读这本书的时候,你需要熟悉代数和几何 ...

  3. 学习javascript数据结构(二)——链表

    前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...

  4. C#可扩展编程之MEF学习笔记(二):MEF的导出(Export)和导入(Import)

    上一篇学习完了MEF的基础知识,编写了一个简单的DEMO,接下来接着上篇的内容继续学习,如果没有看过上一篇的内容, 请阅读:http://www.cnblogs.com/yunfeifei/p/392 ...

  5. AspectJ基础学习之一简介(转载)

    AspectJ基础学习之一简介(转载) 一.为什么写这个系列的博客   Aspectj一个易用的.功能强大的aop编程语言.其官网地址是:http://www.eclipse.org/aspectj/ ...

  6. VSTO学习笔记(二)Excel对象模型

    原文:VSTO学习笔记(二)Excel对象模型 上一次主要学习了VSTO的发展历史及其历代版本的新特性,概述了VSTO对开发人员的帮助和效率提升.从这次开始,将从VSTO 4.0开始,逐一探讨VSTO ...

  7. springmvc学习笔记(简介及使用)

    springmvc学习笔记(简介及使用) 工作之余, 回顾了一下springmvc的相关内容, 这次也为后面复习什么的做个标记, 也希望能与大家交流学习, 通过回帖留言等方式表达自己的观点或学习心得. ...

  8. SVNKit学习——基于Repository的操作之print repository tree、file content、repository history(四)

    此篇文章同样是参考SVNKit在wiki的官方文档做的demo,每个类都可以单独运行.具体的细节都写到注释里了~ 开发背景: SVNKit版本:1.7.14 附上官网下载链接:https://www. ...

  9. git学习之简介(一)

    一.前言 史上最浅显易懂的Git教程! 为什么要编写这个教程?因为我在学习Git的过程中,买过书,也在网上Google了一堆Git相关的文章和教程,但令人失望的是,这些教程不是难得令人发指,就是简单得 ...

随机推荐

  1. 腾讯地图添加多个Marker

    //重置地图 init(){ var self = this; this.wSize = { wHeight: window.innerHeight-, wWidth: window.innerWid ...

  2. 《The Python Standard Library》——http模块阅读笔记3

    http.cookies — HTTP state management http.cookies模块定义了一系列类来抽象cookies这个概念,一个HTTP状态管理机制.该模块支持string-on ...

  3. 关于cg语言中求法向量 N=mul(worldMatrix_IT,normal); 的随笔

    解释一下标题,N是变换到世界坐标后的法向量,worldMatrix_IT是变换矩阵worldMatrix的逆的转置矩阵,normal就是模型坐标的法向量. 对于点p,我们根据变换矩阵M(即worldM ...

  4. SpagoBI系列----------[01]SpagoBI简介及安装步骤

    商务智能套件SpagoBI提供一个基于J2EE的框架用于管理BI对象如报表.OLAP分析.仪表盘.记分卡以及数据挖掘模型等的开源BI产品.它提供的BI管理器能 够控制.校验.验证与分发这些BI对象. ...

  5. weblogic JDBC Connection Pools--转官方文档

    http://docs.oracle.com/cd/E13222_01/wls/docs81/ConsoleHelp/jdbc_connection_pools.html#1106016 JDBC C ...

  6. Java入门系列-15-封装

    为什么要封装 Student stu=new Student(); stu.age=-10; 上面的代码中 age 属性被随意访问,容易产生不合理的赋值 什么是封装 封装:将类的某些信息隐藏在内部,不 ...

  7. IDE vscode识别webpack中alias配置路径

    引言网上看到一篇关于 ctrl+鼠标左键无法识别别名路径的问题,最后有人回复的方法只能在ts项目中可以识别 https://segmentfault.com/q/1010000011911879 最后 ...

  8. angular-ui-router动态加载模块

    1.定义index.html主页,对于通用的js就不用require依赖加载了,其中main.js作为主模块,用require添加系统路由模块. <!DOCTYPE html> <h ...

  9. [转]Entity FrameWork利用Database.SqlQuery<T>执行存储过程并返回参数

    本文转自:http://www.cnblogs.com/xchit/p/3334782.html 目前,EF对存储过程的支持并不完善.存在以下问题:        EF不支持存储过程返回多表联合查询的 ...

  10. Maven 配置Tomcat

    1.Tomcat conf 下的tomcat-users.xml 增加 <role rolename="manager"/> <role rolename=&qu ...