1:创建SVN服务
安装subversion
centos: yum install subversion
ubuntu: apt-get install subversion
2:开始搭建SVN服务
2.1 mkdir /www/svndata //建立版本库目录
svnserve -d -r /www/svndata/
2.2 svnadmin create /www/svndata/site //创建一个新的Subversion项目
2.3 修改配置
cd /www/svndata/site/conf/
配置允许用户访问
vi svnserve.conf
anon-access=none
auth-access=write
password-db=passwd
注:修改的文件前面不能有空格,否则启动svn server出错
配置密码文件
vim passwd
[users]
# harry = harryssecret
# sally = sallyssecret
appteam = app123
manager = manager
配置登录认证文件
vi authz
[groups]
appm = appteam,manager
[/]
@appm = rw
* = r
或者直接最后添加
[/]
appteam = rw
3.将WEB目录文件导入版本库
svn import WEB目录 file:///usr/local/svn/newrepos/some/project
4.建立同步脚本
4.1 hooks(钩子)文件说明:
# start-commit 提交前触发事务
# pre-commit 提交完成前触发事务
# post-commit 提交完成时触发事务
# pre-revprop-change 版本属性修改前触发事务
# post-revprop-change 版本属性修改后触发事务
cp post-commit.tmpl post-commit
编辑post-commit,在文件最后添加以下内容
复制代码
export LANG=zh_CN.UTF-8
REPOS="$1"
REV="$2"
SVN_PATH=/usr/bin/svn
WEB_PATH=/mnt/......./www
LOG_PATH=/tmp/svn_update.log
$SVN_PATH update --username username --password password $WEB_PATH --no-auth-cache
echo "nnn##########开始提交 " `date "+%Y-%m-%d %H:%M:%S"` '##################' >> $LOG_PATH
echo `whoami`,$REPOS,$REV >> $LOG_PATH
$SVN_PATH update --username username --password password $WEB_PATH --no-auth-cache >> $LOG_PATH
chown -R www:www $WEB_PATH
chmod +x post-commit
chmod 777 post-commit
svn服务的关闭:
killall svnserve
svn开启:
svnserve -d -r /www/svndata
可以使用 ./post-commit 测试有效性
为避免WEB目录跟SVN不一致,删除WEB目录,将之前导入到SVN的代码恢复到WEB目录即可;
实例:
-------------------------------------------------------------------------------------------------------
post-commit:
export LANG=zh_CN.UTF-8
WEB_PATH=/www/webdir/
/usr/bin/svn update --username username --password password $WEB_PATH --no-auth-cache
chown -R www:www $WEB_PATH
导入:WEB目录代码导入到SVN svn import /www/webdir/ file:///svndata/www/ -m "Initial import"
检出:SVN代码到WEB目录 svn co svn://IP/www/
-------------------------------------------------------------------------------------------------------
修改端口
svnserve -d -r 项目路径 --listen-port 21
SVN自动同步程序执行流程:
1、用户提交文件到SVN服务器,提交操作成功后触发post-commit脚本
2、在post-commit版本文件中使用php_script.php执行PHP脚本
3、在PHP脚本中通过exec系统调用更新服务器上的版本库工作副本
4、根据更新操作结果日志,对另一个SVN版本库进行对应的操作处理
温馨提示:
1:修改post-commit文件;
注释所有,加入
export LANG=zh_CN.UTF-8
WEB_PATH=/www/webdir/
/usr/bin/svn update --username username --password password $WEB_PATH --no-auth-cache
chown -R www:www $WEB_PATH
2:WEB目录导入版本库
svn import WEB目录 file:///usr/local/svn/newrepos/some/project
3:SVN代码检出到WEB目录,保证SVN代码可以跟WEB目录保持一致的版本;
svn checkout svn://localhost/site