zoukankan      html  css  js  c++  java
  • SVNKit学习——wiki+简介(二)

     这篇文章是参考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" );

      
       

  • 相关阅读:
    how to pass a Javabean to server In Model2 architecture.
    What is the Web Appliation Archive, abbreviation is "WAR"
    Understaning Javascript OO
    Genetic Fraud
    poj 3211 Washing Clothes
    poj 2385 Apple Catching
    Magic Star
    关于memset的用法几点
    c++ 函数
    zoj 2972 Hurdles of 110m
  • 原文地址:https://www.cnblogs.com/firstdream/p/8439348.html
Copyright © 2011-2022 走看看