Posted on 20 Jul 2015
平台: 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下包括三个配置文件:
-
svnserve.conf 服务器进程的配置文件
-
authz 用户验证配置文件
-
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 ~] svnserve -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 {} \;