svn纯java客户端SVNKit学习整理(2)

创建一个Subversion仓库

Subversion仓库类型

到目前为止,一个Subversion仓库的存储可以用Berkley DB数据库(一般叫做Berkley DB 类型)或者普通的文件系统(一般叫做FSFS 类型)来实现。

手动创建一个Subversion仓库

Subversion安装包(你可以在Subversion home site 下载该配置包)包括一个用于创建仓库的svnadmin工具。当你安装Subversion时,你可以通过在命令提示行中输入以下命令行创建一个仓库:

...>svnadmin create C:\path

以上可以为你给定的路径创建一个FSFS类型的仓库。你也可以在命令后端明确的提供仓库的类型:

...>svnadmin create --fs-type bdb C:\path

Subversion仓库的根目录类似如下结构:

 /

 |_conf/

 |_dav/

 |_db/

 |_hooks/

 |_locks/

 |_format

 |_readme.txt

阅读创建和设置仓库的官方操作手册来使用官方Subversion工具

使用SVNKit创建一个Subversion仓库

SVNKit仅提供创建FSFS类型仓库的功能。以下就是使用SVNKit创建一个空仓库的代码片段:

   1 import org.tmatesoft.svn.core.io.SVNRepositoryFactory;

   2 import org.tmatesoft.svn.core.SVNURL;

   3 import org.tmatesoft.svn.core.SVNException;

   4 ...

   5

   6     try {

   7         String tgtPath = "C:/repos/root/path";

   8         SVNURL tgtURL = SVNRepositoryFactory.createLocalRepository( new File( tgtPath ), true , false );

   9     } catch ( SVNException e ) {

  10         //handle exception

  11     }

  12

以上将会在路径C:/repos/root/path创建一个FSFS类型的仓库。方法createLocalRepository第二个参数设为true时,被创建的仓库就可以修改版本属性。如果版本属性没有版本,一旦允许这些文件被改变,那么就存在永远丢失这些文件的风险。要允许版本属性改变,你必须在根目录的hooks目录中放置一个可执行的pre-revprop-change钩子脚本文件。

当尝试改变一个版本属性时,服务器(也就是svnserve)首先唤起pre-revprop-change 钩子。如果这个钩子脚本在hooks目录中不存在,或者脚本返回一个不等于0的值,对版本属性的修改将会被服务器拒绝。

当你使用Subversionsvnadmin工具创建一个新的仓库时,一个新的仓库的hook目录不包含真实的钩子脚本文件,而是钩子脚本模板。这就意味着在你将pre-revprop-change 钩子文件手工放入hooks目录前,你不能够改变版本属性。

由于SVNKit对版本属性的改变时非常直接的,当方法createLocalRepository第二个参数为true时,SVNKithooks目录中放置一个空的可执行的pre-revprop-change 钩子脚本。这个脚本不做任何事情,只是返回0,让请求的改变得以执行。相反,当参数值为false时,钩子脚本不会添加到hooks目录(目录中仅有模板),并且不能改变版本属性。

方法createLocalRepository第三个参数用于控制是否强制创建仓库。也就是,如果这个参数值为true,并且提供的路径已经存在一个仓库,那么SVNKit将会在这个路径上创建一个新的仓库。相反,参数值为false时,已存在的仓库不会删除,并且新的仓库创建将会失败,抛出SVNException

如果一个仓库创建成功了,方法createLocalRepository将返回这个仓库根目录位置的文件URL。你也可以使用SVNAdminClient(属于高级API中的类)来创建一个FSFS类型的仓库。实际上,这个admin客户端类使用SVNRepositoryFactory来做相同的工作。

  1 import org.tmatesoft.svn.core.wc.admin.SVNAdminClient;

   2 import org.tmatesoft.svn.core.SVNURL;

   3 import org.tmatesoft.svn.core.SVNException;

   4 ...

   5     SVNAdminClient adminClient;

   6     ...

   7     try {

   8         String tgtPath = "C:/repos/root/path";

   9         SVNURL tgtURL = adminClient.doCreateRepository( new File( tgtPath ), null , true , false );

  10     } catch ( SVNException e ) {

  11         //handle exception

  12     }

 

访问仓库

有两种方式访问Subversion仓库:

  • 通过网络
  • 访问本机

到目前为止,Subversion支持以下仓库访问方法

 

方法

访问的方法

file:///

直接仓库访问 (在本机磁盘上)

http://

通过 WebDAV 协议访问Subversion 关联的Apache server

https://

http:// 相同, 多了SSL 加密

svn://

通过普通的SVN协议访问svnserve服务器

svn+ssh://

svn://相同, 使用SSH终端

file:/// 访问

当仓库在你本机时,这一协议不需要你为这个仓库设置用户账户来工作。在提交操作中,Subversion仅使用一个用户名,如果没有明确地提供用户名,会话的用户名将会被使用。

svn://, svn+ssh:// 访问

要使用SVN://协议,管理员需要配置 svnserve程序用来验证用户的访问规则和账户。Svn+ssh://协议:首先,客户端通过ssh验证他对服务器主机的权限,终端连接远程服务器,就像是在本机上工作一样。你可以尝试任意一种方法。详细请看Subversion book 这一章

http://, https:// 访问

使用http://协议访问,管理员需要设置一个带有WebDAV协议扩展模块的Apache 服务器。怎样通过http://访问来分享你的仓库(包括账户设置提示),请阅读Subversion book Apache专用章节

 

 

时隔很久,终于整理了下一篇SVNKit的 手册,我需要有更多的时间来做一些有意义的事情……

你可能感兴趣的:(java,SVN,脚本,ssh,subversion)