运行环境说明:
svn的执行目录: /usr/bin/svn
svn版本库目录: /usr/local/nginx/html/svnrepos/coinhello (其中svnrepos是我各个项目版本库的存放目录,coinhello是其中的一个项目版本库)
coinhello版本库账号:username(根据个人情况)
coinhello版本库密码:password (根据个人情况)
需要自动更新的网站根目录:/data/wwwroot/coinhello(即coinhello版本库对应的网站根目录,这是在coinhello版本库创建后使用命令得到: svn checkout svn://120.77.xxx.xxx/coinhello)

实现方法是:以coinhello版本库为例,用版本库下的hooks目录下的post-commit钩子完成服务器代码的自动更新。post-commit钩子会在svn commit完成后触发执行。
[root@xxx ~]# cd  /usr/local/nginx/html/svnrepos/coinhello/hooks
[root@xxx hooks]# cp  post-commit.tmpl  post-commit
[root@xxx hooks]# vim  post-commit

REPOS="$1"
REV="$2"
export LANG=en_US.utf8
WEB_PATH=/data/wwwroot/coinhello
LOG_PATH=/data/wwwlogs/coinhello_svn.log
SVN_PATH=/usr/bin/svn
SVN_USER=username
SVN_PASS=passwordecho `date "+%Y-%m-%d %H:%M:%S"` >> $LOG_PATH
echo `whoami`,$REPOS,$REV >> $LOG_PATH
$SVN_PATH update $WEB_PATH --username $SVN_USER --password $SVN_PASS --no-auth-cache >> $LOG_PATH
echo '' >> $LOG_PATH

说明:REPOS="$1" 是coinhello项目版本库的路径,REV="$2" 提交后最新的版本号,--no-auth-cache 是不保存账户的认证信息。

最后:
a. 改变post-commit文件的所属用户和所属组,groupname和username的值根据个人情况,该步骤非必须。
[root@xxx hooks]# chown  groupname:username  /usr/local/nginx/html/svnrepos/coinhello/hooks/post-commit

b. 改变post-commit文件的权限,使其可执行
[root@xxx hooks]# chmod  +x   /usr/local/nginx/html/svnrepos/coinhello/hooks/post-commit

04-14 08:45