创建一个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的值,对版本属性的修改将会被服务器拒绝。
当你使用Subversion的svnadmin工具创建一个新的仓库时,一个新的仓库的hook目录不包含真实的钩子脚本文件,而是钩子脚本模板。这就意味着在你将pre-revprop-change 钩子文件手工放入hooks目录前,你不能够改变版本属性。
由于SVNKit对版本属性的改变时非常直接的,当方法createLocalRepository的第二个参数为true时,SVNKit在hooks目录中放置一个空的可执行的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的 手册,我需要有更多的时间来做一些有意义的事情……