在多人协同开发中,有一个必不可少的工具就是SVN/git,它能帮助我们更好地管理项目代码。现在就来学习一下怎么在服务端部署SVN。

  1. 安装SVN服务端
yum -y install subversion
  1. 查看安装路径等信息
rpm -ql subversion
  1. 创建版本库目录
mkdir /var/svn/svnrepos

  1. 创建svn版本库
svnadmin create /var/svn/svnrepos/robin
  1. 修改配置
    进入版本库目录(在我这里是robin), 可以看见如下文件信息:

    进入到配置目录conf下 ,可以看见如下文件信息:

    authz:负责帐号权限的管理,控制帐号读写权限,也可以帐号进行分组
    passwd:负责帐号和密码的用户名单管理
    svnserve.conf:svn服务器配置文件
    1)、设置分组、权限及帐户名
    具体修改如下:

    第一部分在groups区创建分组admin,other各包含用户root1,root2和robin1,robin2
    第二部分设置权限:admin组内用户在当前版本库下拥有读写权限
    第三部分设置权限:other组内用户在当前版本库的test目录下拥有读写权限,则对应的svn地址为svn://svn域名/版本库/test

2)、设置完权限后,设置帐户密码

TortoiseSVN 服务器配置 svn服务器部署_svn自动更新至web目录


等号左边表示帐户,右边表示密码

3)、修改SVN服务器配置

vim svnserve.conf

TortoiseSVN 服务器配置 svn服务器部署_服务端部署svn_02


解开图中四句的注释即可:

anon-access表示匿名用户权限

auth-access表示鉴权用户权限

接受三种参数值:none:拒绝访问;write:读写权限,read:只读权限

"password-db = passwd"表示指定帐户密码文件

"authz-db = authz"表示帐户及权限文件
(在后面两句中可以指定其他文件来储存帐户、密码及权限,但文件中的内容仍需按原有格式书写)

  1. 关闭防火墙
    很多情况下服务端安装完成,配置好后,无法连接SVN服务器,均是防火墙问题。
    关闭防火墙的命令因操作系统而异,网上有很多教程,这里就不再一一赘述了。
  2. 启动SVN服务
svnserve -d -r /var/svn/svnrepos

如报错,切换至根目录下执行该命令

TortoiseSVN 服务器配置 svn服务器部署_服务端部署svn_03


查看svnserve进程

ps aux|grep svnserve

TortoiseSVN 服务器配置 svn服务器部署_版本库_04


尝试本地检出:

TortoiseSVN 服务器配置 svn服务器部署_服务端部署svn_05


8. 配置服务端版本库更新至web目录

TortoiseSVN 服务器配置 svn服务器部署_svn自动更新至web目录_06


由于我之前已经设置过一次,下面报错了。下面还是以之前设置的版本库继续

TortoiseSVN 服务器配置 svn服务器部署_服务端部署svn_07


9. 使用钩子进行SVN自动更新到WEB目录

1)、cd var/svn/svnrepos/1.0/hooks

TortoiseSVN 服务器配置 svn服务器部署_TortoiseSVN 服务器配置_08


2)、cp post-commit.tmpl post-commit #将原文件复制出来,以作备份,svn将要执行的是post-commit文件

TortoiseSVN 服务器配置 svn服务器部署_svn自动更新至web目录_09


3)、vim post-commit

编辑如下:

注释最后三行:

TortoiseSVN 服务器配置 svn服务器部署_版本库_10


加上自己要执行的同步的命令:

export LANG=zh_CN.UTF-8				#若客户端和服务器编码不一样会出现同步失败
WEB=/usr/local/apache/htdocs/			#目标web项目路径
svn update $WEB								#yum安装或已注册为svn服务的情况下可这样使用,否则需要输入完整路径,如:/usr/bin/svn $WEB即上一行所定义的web项目路径

设置post-commit文件权限:

chmod 777 post-commit

TortoiseSVN 服务器配置 svn服务器部署_svn自动更新至web目录_11


10. 将SVN设置开机自启动

先查找svn命令地址

which svnserve

TortoiseSVN 服务器配置 svn服务器部署_svn自动更新至web目录_12


TortoiseSVN 服务器配置 svn服务器部署_版本库_13


检验一下:

本地仓库编辑一份test.php

TortoiseSVN 服务器配置 svn服务器部署_服务端部署svn_14


查看Web目录下文件:

TortoiseSVN 服务器配置 svn服务器部署_svn_15

代码更新svn

$output = @shell_exec("svn up 你的web目录 --username user(你的svn用户名) --password pwd(你的svn密码) --no-auth-cache 2>&1");
        echo '<pre>';
        var_dump($output);