Centos5.8下搭建svn

SVN安装与配置指南
本文详细介绍如何在Linux环境下安装Subversion(SVN),包括配置SVN服务器、建立项目版本库、用户管理等步骤,并介绍了SVN钩子的应用场景与实例。

一、安装svn(subversion)

1.更新源

# yum -y update

2.检查svn软件是否安装

# rpm -aq subversion

3.如果没安装,则执行下面命令安装

# yum -y install subversion

二、配置并启动svn

1.建立svn版本数据存储根目录(svndata)及用户、密码权限目录(svnpasswd)

# mkdir -p /appliction/svndata
# mkdir -p /appliction/svnpasswd

2.启动svn服务指定服务的svn根目录

# svnserve -d -r /appliction/svndata/
# svnserve -d -r /appliction/svndata/ --pid-file=/appliction/svndata/svn.pid

3.查看svn进程

# ps -ef|grep svn
# ps -ef|grep svn|grep -v grep

4.检测svn端口

# lsof -i :3690
# lsof -i tcp:3690
# netstat -lnt|grep 3690

三、建立项目版本库

1.创立一个新的 Subversion 项目 sadoc

# svnadmin create /appliction/svndata/sadoc
# ls -ld /appliction/sadoc
提示:查看svnadmin 命令帮助的方法
# svnadmin help
# svnadmin help create
查看目录树
# tree /appliction/svndata/

2.调整 svn 配置文件及权限文件

# cd /appliction/svndata/sadoc/conf/
# cp svnserve.conf svnserve.conf.bacpup
# cp svnserve.conf svnserve.conf.$(date +%F)
# vi svnserve.conf

修改为下面参数

auth-access = write
password-db = /appliction/svnpasswd/passwd
authz-db = /appliction/svnpasswd/authz

3.对比源文件查看改了哪些东西

# diff svnserve.conf.bacpup svnserve.conf

4.检查

# egrep "\-access|\-db =" svnserve.conf

四、添加svn用户

1.拷贝模板文件

# cp passwd authz /appliction/svnpasswd/

2.查看文件复制过去没有

# ll /appliction/svnpasswd/

3.添加用户(这里添加了3个)

# cd /appliction/svnpasswd/
# vi passwd

注意:前面是账号,后面是密码

[users]
admin1 = admin123
admin2 = admin123
admin3 = admin123

提示:更改svnserve.conf时,需要重启svn,更改 passwd authz不需要重启

4.用户组的配置

# vi authz

5.配置版本库权限 ( sadoc库 )
这里写图片描述

新建群组用户名为sagroup ,该有2个用户

设置群组权限前面加 @

[groups]
sagroup = admin1 ,admin2
[sadoc:/]
admin3 = rw
@sagroup = r

五、重启svn命令

命令1

# pkill svnserve
# svnserve -d -r /appliction/svndata

命令2

# kill -USER1 `cat /appliction/svndata/svn.pid`
# svnserve -d -r /appliction/svndata/ --pid-file=/appliction/svndata/svn.pid

六、SVN钩子

钩子脚本是被版本库事件触发的程序,例如新修订版本的创建或未版本控制属性的修改。每一种钩子都会被告知事件的足够信息,操作的目标,触发事件的用户名。依赖于钩子的输出或返回状态,钩子程序可以继续执行,停止或以某种方式挂起。
1.钩子说明

钩子说明
post_commint在提交完成成功创建版本之后执行该钩子,提交已经完成,不可更改,因此,本脚本的返回值被忽略。提交完成时触发事务
pre_commint提交完成前触发执行该脚本
start_commint在客户端还没向服务器提交数据之前,即还没有建立 Subversion transition之前,执行该脚本(提交前触发事务)
pre-lock对文件进行加锁之前执行该脚本
post-lock对文件进行加锁之后执行该脚本
pre-unlock对文件进行解锁操作之前执行该脚本
post-unlock对文件进行解锁操作之后执行该脚本
pre-revprop-change在修改 revision 属性之后执行该脚本
post-revprop-change在修改 revision 属性之前执行该脚本

2.钩子应用场景

钩子场景
pre-commit限制上传文件扩展名及大小,控制提交要输入的信息等
post-commitSVN更新自动通知,更新触发chekout程序,然后实时 rsync 推送到服务器等

3.钩子生产实例
post-commit 代码同步

#!/bin/sh

REPOS="$1"
REV="$2"

export LC_CTYPE="en_US.UTF-8"
export LC_ALL=

LOGPATH="/app/log"
[ ! -d ${LOGPATH} ] && mkdir ${LOGPATH} -p

#update content from svn
SVN=/usr/bin/svn
$SVN update --username xx --password oo /home/test
if [ $? -eq 0 ]
then
/usr/bin/rsync -az --delete /home/test /tmp/
fi

shell

# export LC_CTYPE="en_US.UTF-8"
# export LC_ALL=
# chmod 700 post-comit

pre-comit 限制上传文件扩展名及大小(扩展和大小不可用)

#!/bin/sh

REPOS="$1"
TXN="$2"
#此处更改大小限制,这里是5M
MAX_SIZE=5242880
#此处增加限制文件后缀名
FILTER='\.(zip|rar|o|obj|tar|gz)$'
SVNLOOK=/usr/bin/svnlook

#LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`
LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | wc -c`

if [ "$LOGMSG" -lt 9 ];
then
    echo -e "nLog message cann't be empty!you must input more than 8 chanrs as comment!." 1>&2
exit 1
fi

files=$($SVNLOOK changed -t $TXN $REPOS |cut -d " " -f 4-)

#echo "files">&2
#echo "$r">&2
#exit 1

rc=0

echo "files"|while read f;
do

#check file type
if echo $f|tr A-Z a-z|grep -Eq $FILTER;
then
    echo "File $f is not allow ($FILTER) file" >&2
    exit 1;
fi

#check file size
filesize=`$SVNLOOK cat -t "$TXN" "$REPOS" "$f" | wc -c`
if [ "$filesize" -gt "$MAX_SIZE" ];
then
    echo "File $f is too large(must <=$MAX_SIZE)B" >&2
    exit 1
fi
done
#ALL checks passed,so allow the commit
if [ $? -eq 1 ];
then
exit 1
else
exit 0
fi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值