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" );

      
       

  • 相关阅读:
    final 和 abstract 抽象类
    ajax的同步 和 异步
    自定义控件进阶01_侧滑菜单_快速索引
    自定义控件基础02_下拉刷新_侧拉菜单_自定义属性
    自定义控件基础01_菜单轮__viewPager_下拉框_自定义开关
    解决xxview.measure(0, 0)主动测量控件报错 android.view.InflateException
    Android Studio 笔记
    百度地图_api
    手机卫士13_屏幕适配_异常处理_盈利模式_混淆加密
    手机卫士12_软件锁,应用程序相关
  • 原文地址:https://www.cnblogs.com/firstdream/p/8439348.html
Copyright © 2011-2022 走看看