# Centos下svn的安装配置
## 检查已安装版本
~~~
#检查是否安装了低版本的SVN
rpm -qa subversion
#卸载旧版本SVN
[root@localhost modules]# yum remove subversion
~~~
## 安装SVN
~~~
yum install httpd httpd-devel subversion mod_dav_svn mod_auth_mysql
~~~
## 确认已安装了SVN模块
~~~
cd /etc/httpd/modules
ls | grep svn
#会返回以下内容
#mod_authz_svn.so
#mod_dav_svn.so
~~~
## 验证安装
检验已经安装的SVN版本信息
~~~svnserve --version~~~
## 创建代码库
SVN软件安装完成后还需要建立SVN库
~~~
mkdir -p /svn/web
svnadmin create /svn/web
~~~
执行上面的命令后,自动建立web库,查看/svn/web 文件夹发现包含了conf, db,format,hooks, locks, README.txt等文件,说明一个SVN库已经建立。
## 配置代码库-设置SVN用户名及密码
进入上面生成的文件夹conf下,进行配置
~~~
cd /svn/svn/conf
#用户密码passwd配置
规则如下username=password
~~~
## 权限控制-authz
这里是设置用户访问权限、访问目录。
~~~
vi authz
#设置代表根目录下所有的资源
#rw是读写权限
~~~
[/]
aoxiang=rw
~~~
## 服务svnserve.conf配置
~~~
vi svnserve.conf
#追加以下内容
[general]
#匿名访问的权限,可以是read,write,none,默认为read
anon-access=none
#使授权用户有写权限
auth-access=write
#密码数据库的路径
password-db=passwd
#访问控制文件
authz-db=authz
#认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字
realm=/svn/web
~~~
## 配置防火墙端口
~~~
vi /etc/sysconfig/iptables
#添加以下内容:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
#保存后重启防火墙
service iptables restart
~~~
## 启动SVN
~~~
svnserve -d -r /svn/web
~~~
## 查看SVN进程
~~~
ps -ef|grep svn|grep -v grep
#返回一下信息:
#root 12538 1 0 14:40 ? 00:00:00 svnserve -d -r /opt/svn/repositories
~~~
## 检测SVN 端口
~~~
netstat -ln |grep 3690
#返回一下信息:
#tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN
~~~
## 停止重启SVN
~~~
killall svnserve //停止
svnserve -d -r /svn/web // 启动
~~~
# 使用钩子
## checkout代码的文件
在web目录下创建网站对应的文件夹,我这里直接给文件夹命名为svn,并且checkout
~~~
mkdir /home/wwwroot/svn
cd /home/wwwroot/svn
svn checkout svn://127.0.0.1 ./
~~~
完成以后目录下会多了.svn的隐藏文件夹
## 创建钩子
在创建好svn project之后会有如下目录结构。我们的钩子就存放在hooks里面。
其中版本库里面会存在一个hooks文件的文件夹啊
我们需要做下面步骤:
代码如下:
~~~
cd hooks
cp post-commit.tmpl post-commit #拷贝一个钩子模板
chmod 777 post-commit #赋予可执行权限
vim post-commit
~~~
## 编辑钩子文件
找到/svn/svntest/hooks/post-commit,
进入到post-commit编辑状态后,我们最好把里面的内容都给注释。然后敲入以下代码:
### 版本1://此版本主要防止文件非常多导致钩子反应慢
~~~
SVN=/usr/bin/svn #svn执行文件所在的文件夹
WEB=/home/wwwroot/svn #svn项目所在目录
LOG_PATH=/svn/svntest/svn_hook.log #我们定义的一个log文件
echo "------------Start Commit -----------" >> $LOG_PATH
echo "Time:"`date '+%Y-%m-%d %T'`>>$LOG_PATH #这里是在日志中写入执行的时间
cd $WEB
for dir in 'svnlook dirs-changed /svn/svntest' #查找有修改过的文件,并将修改过的内容部署到web目录
do
#下面一句执行update命令
$SVN update -N $WEB --username "aoxiang" --password "aoxiang" >> $LOG_PATH
done
echo "------------Commit End---------------" >>$LOG_PATH
~~~
update 所含的子命令
~~~
--revision(-r)REV
--non-recursive(-N)
--quiet(-q)
--no-ignore
--incremental
--diff3-cmdCMD
--usernameUSER
--passwordPASS
--no-auth-cache
--non-interactive
--config-dirDIR
--ignore-externals
~~~
### 版本2:此版本控制较少文件版本
~~~
/usr/local/bin/svn update /home/wwwroot/svn --username test --password test
~~~