环境:CentOS6.5 测试线 svn和web服务器在同一台机器上 SVN版本1.6php
情景:在测试环境下,开发部提出但愿提交到SVN的代码能自动同步到WEB站点目录下,解决每次都要传双份这一问题,尤为是频繁更新后的繁琐,浪费了大量时间。web
思路:经过搜索,查到svn的hooks目录的触发功能,该目录下有许多模板,其中一个是post-commit.tmpl,意为“提交后执行”,经过这个功能咱们能够将提交代码后要作的事写到里面来执行。服务器
步骤:网络
1. 首先导出一份svn的文件到网站目录svn
# svn co file:///data/svn/php/ /data/wwwroot/post
注:file:///data/svn/php/ 表示php的svn代码在该Linux系统中的系统路径。测试
2. 修改“提交后执行文件”post-commit.tmpl优化
# cd /data/svn/php/hooks网站
# mv post-commit.tmpl post-commitspa
# chmod +x post-commit
# cat post-commit
#!/bin/sh SVN=/usr/bin/svn WEB=/data/wwwroot LOG_PATH=/tmp/svn_hook.log echo "------------Start Commit -----------" >> $LOG_PATH echo "Time:"`date '+%Y-%m-%d %T'`>>$LOG_PATH export LANG='zh_CN.UTF-8' #防止乱码 for DIR in `svnlook dirs-changed /data/svn/php/` do $SVN update $WEB/$DIR done chown -R www.www /data/wwwroot
备注:因为文件太多太大,第一次作的时候SVN和WEB不在同一台机器,并且没有进行提交优化,因此SVN提交后巨卡(10秒到30秒)!
笔者在此文中写的已经是进行了两步优化后的结果,优化的内容为如下两点:
① 将SVN和WEB放到了同一台机器,比提交后触发rsync有所加快,而且不依赖网络。
② 经过“svnlook dirs-changed 网站目录”,打印出SVN更新了哪些目录,svn update只针对这些目录,节省了全局扫描浪费掉的时间!
优化后平均提交后响应时间在3秒内!