原理:在svn服务端编写post-commit钩子,当svn客户端更新svn时,服务端会自动执行钩子脚本,在web目录自动执行svnup命令同步最新文件。
方式一:
利用svn update命令------svn update svn://192.168.1.1 /data/www/htdocs
编写钩子脚本vim /data/svn/repositories/hooks/post-commit
#!/bin/sh export LANG=en_US.UTF-8 REPOS="$1" REV="$2" SVN_PATH=/usr/bin/ WEB_PATH=/data/www/xingame SVN_USER=test SVN_PASS=ptest WEB_USER=www LOG_PATH=/data/log/svn/svn.log echo `date "+%Y-%m-%d %H:%M:%S"` >> $LOG_PATH echo `whoami`,$REPOS,$REV >> $LOG_PATH $SVN_PATH/svn update svn://192.168.1.69:3690/xingame $WEB_PATH --force --username $SVN_USER --password $SVN_PASS --no-auth-cache >> $LOG_PATH chown $WEB_USER.$WEB_USER -R $WEB_PATH #同步多台服务器 cd /data/www/htdocs/ /usr/bin/rsync --timeout=30 -Ravz --exclude-from=/data/svn/repositories/exclude/htdocs.list ./* 192.168.1.2::htdocs /usr/bin/rsync --timeout=30 -Ravz --exclude-from=/data/svn/repositories/exclude/htdocs.list ./* 192.168.1.3::htdocs chown -R apache:apache /data/www/htdocs/ chmod -R 755 /data/www/htdocs/ #htdocs.list是存放不被同步的文件,包括子目录下出现此类文件都不会被同步 #往htdocs.list加入.svn这样只要包含.svn的目录都不会被同步