SVN服务器安装与配置

平台: CentOS6.6 x86_64

svn repositories目录: /data/svn

创建的库为: repos

web应用: /data/www/test

安装

[root@localhost ~] yum install subversion

创建

[root@localhost ~] svnadmin create /data/svn/repos

配置

SVN数据仓库repos下包括三个配置文件:

  1. svnserve.conf 服务器进程的配置文件

  2. authz 用户验证配置文件

  3. passwd 用户密码配置文件

SVNSERVE.CONF配置文件说明

这个文件是服务器主进程svnserve的配置文件,在SVN中修改配置后不用重启服务。

##匿名用户访问规则
anon-access = none / read / write
##验证用户访问规则
auth-access = none / read / write
##指定验证用户配置文件,权限管理主要操作文件,可以指定文件路径
authz-db = authz
##指定密码配置文件,可以指定文件路径
password-db = passwd

authz配置文件说明

这个是SVN权限管理的配置文件,很重要,配置要慎重。在开始具体阐述如何配置各级权限前,我们需要明确一个重要的定义,那就是SVN只针对目录进行权限控制,无法控制到具体某个文件。

#数据仓库/代码库的名称及根目录
[edu:/]
#用户及用户的权限,若在用户后面跟空白,就表示该用户在当前项目中无权限
#若使用“*”,表示所有用户具有的基本权限,对于具体某个人来说,还要看他有没有定义自己的权限
ioioj5 = rw  #读写权限
test =     #当前项目/分支无权限
* = r       #当前项目对所有人都开放读权限

如果需要对代码库下级目录指定具体权限,那么可以这样操作:

[edu:/demo]
test1 = rw # 对demo拥有读写权限
test2 = # 对demo没有任何权限

SVN的组配置如下:

#组的配置,为了方便区分,一般组名前面加"g_"
[groups]
# 任何想要查看文档的非本部门人士,如领导
g_vip = morson
# 项目经理
g_manager = michael
# 测试人员
g_test = scofield
# 开发人员
g_dev = lincon
# 一般员工
g_member = rory, linda, sarah
# 小秘,撰写文档
g_docs = sarah

我们开始对组进行权限控制:

[edu:/]  #代码库根目录权限控制
@g_manager = rw      #项目经理或管理者具有读写权限
@g_member =          #一般员工没有权限
@g_vip = r           #领导有读的权限
* =                  #非小组成员没有权限

#代码库源代码子目录
[edu:/src]
@g_dev = rw
@g_manager = r
@g_member = 
@g_vip = r
* =                  #非小组成员没有权限

#代码库文档目录
[edu:/doc]
@g_manager = rw      #项目经理或管理者具有读写权限
@g_member = r        #一般员工有读的权限
@g_vip = r           #领导有读的权限
@g_dev = r           #开发人员有读权限
@g_docs = rw         #文档管理员有读、写权限
* =                  #非小组成员没有权限

在每个目录的权限配置中,我们都特别标注了“* = ”,这主要是因为SVN中的一个规则,那就是”子目录“默认继承“父目录”的所有权限,而这个可能会导致在“父目录”中有访问权限的用户进入他不能访问的“子目录”。

passwd密码配置文件说明

这个文件是用户密码配置文件。在SVN中,可以通过编辑该文件对用户进行密码管理,也可以通过SVN命令来对密码进行管理。

下面是密码配置文件格式:

hansy = 87827192
sarah = 87827239

在此需要注意的是,密码可以是明文,也可以是加密的,但是密码不能是中文。这个和配置方式有关系。

我们可以用SVN命令进行用户密码配置。

#使用htpasswd进行添加用户、密码以及MD5加密
#参数c表示创建一个新文件,如果有这个文件也会被新文件覆盖,注意哦,否则你就哭吧
#参数m表示对密码进行MD5加密
htpasswd -cm /opt/svn/edu/conf/authz

用htpasswd不能建立用户权限配置文件,所以你还需要到authz文件中进行权限配置才能正常使用。

开启服务

[root@localhost ~] svnadmin -d -r /data/repos

创建HOOKS

#!/bin/sh
# set env
export LANG=zh_CN.UTF-8
REPOS="$1"
REV="$2"
SVN_PATH=/usr/bin/svn
WEB_PATH=/data/www/test
LOG_PATH=/tmp/svn_update.log
echo "##########START COMMIT " `date "+%Y-%m-%d %H:%M:%S"` '##################' >> $LOG_PATH
echo `whoami`,$REPOS,$REV >> $LOG_PATH
$SVN_PATH update --username test --password 123456 $WEB_PATH --no-auth-cache >> $LOG_PATH
chown -R www:www $WEB_PATH
cd $WEB_PATH
find -type d -exec chmod 750 {} \;
find -not -type d -exec chmod 640 {} \;