这篇文章是参考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. oracle--错误笔记(一)

    一,环境模拟 SQL> select status from v$instance; STATUS ------------ OPEN SQL> select * from v$backu ...

  2. Fiddler使用一(Fiddler简介)

    参考文章:http://blog.csdn.net/ohmygirl/article/details/17846199 1.为什么是Fiddler? 抓包工具有很多,小到最常用的web调试工具fire ...

  3. LinuxShell脚本编程基础2-变量与数值运算、父shell和子shell

    1.变量和数值运算 Shell脚本的变量不需要声明的 对变量赋值有两种方式, 直接用“=” 或者用键盘输入值 #!/bin/bash name1="Jack" echo $name ...

  4. 怎么高效查找和正确改变谷歌浏览器编码格式(新版和旧版Google Chrome)(图文详解)

    前言 今天,无意中在解决一个乱码问题,后台是有过判断解决兼容性问题,但是有个别电脑还是有乱码问题,就去想改变下前台的编码格式,突然发现一向好用的谷歌,居然找不到编码格式了! 上网百度了半天,查阅各种网 ...

  5. 游戏反编译工具dnSpy

    dnSpy使用的工具下载地址为: https://github.com/cnxy/dnSpy/archive/v4.0.0.zip 或 dnSpy官方下载地址: https://github.com/ ...

  6. 如何优雅地使用 VSCode 来编辑 vue 文件?

    最近有个项目使用了 Vue.js ,本来一直使用的是 PHPStorm 来进行开发,可是遇到了很多问题. 后来,果断放弃收费的 PHPStorm ,改用 vscode (Visual Stdio Co ...

  7. Python 读取图像文件的性能对比

    Python 读取图像文件的性能对比 使用 Python 读取一个保存在本地硬盘上的视频文件,视频文件的编码方式是使用的原始的 RGBA 格式写入的,即无压缩的原始视频文件.最开始直接使用 Pytho ...

  8. java java-web linux C C++ 安装系统 数据结构 算法 教程分享

    qq1206630874 v18455730857 免费分享

  9. Java中final修饰参数的作用

    在方法参数前面加final关键字就是为了防止数据在方法体中被修改. 主要分两种情况:第一,用final修饰基本数据类型:第二,用final修饰引用类型. 第一种情况,修饰基本类型(非引用类型).这时参 ...

  10. mysql服务器运维简单命令介绍

    1.mysql>show processlist; 此处关注查询时间,关注谁锁住了表,谁最多: 2.查看开启的日志 mysql>show global variables like '%l ...