svn服务端hooks钩子可用于多项目自动同步
废话不多说,直接上post-commit脚本了:
日志会全部记录下来包括同步的文件
vim post-commit
#!/bin/sh REPOS="$1" # 仓库的路径 REV="$2" # 新提交的版本号 export LC_ALL="zh_CN.UTF-8" expor LANG="en_US.UTF-8" LOGFILE=/var/log/svn-hooks.log # 钩子脚本的日志 # 脚本的标准输出和标准错误输出都打印到日志文件里 exec 1>>"$LOGFILE" exec 2>&1 SVN=/usr/bin/svn SVNUSER=luoxiaoguang SVNPWD=lxg888 WEBROOT=/usr/local/nginx/html SVNLOOK=/usr/bin/svnlook TIME=$(date "+%Y-%m-%d %H:%M:%S") AUTHOR=$($SVNLOOK author -r $REV "$REPOS") #提交作者 CHANGEDDIRS=$($SVNLOOK dirs-changed $REPOS) #修改的目录集合 MESSAGE=$($SVNLOOK log -r $REV "$REPOS") #提交时的备注信息,不建议用中文 function myecho() { echo "$TIME" "$*" } myecho "**************************************************************" myecho "提交版本:$REV 作者:$AUTHOR" myecho "提交备注:$MESSAGE" myecho "修改目录:$(echo $CHANGEDDIRS | tr '\n' ' ')" MASTERDIR=$(echo "$CHANGEDDIRS" | head -1) #CHANGEDDIRS里的主目录 # 遍历提交的代码目录,同步到WEB服务器上 while [ "$CHANGEDDIRS" != "" ];do PROJECT=$(echo $MASTERDIR | awk -F / '{print $2}') myecho "当前项目:$PROJECT" # 判断项目文件夹 if [ "$PROJECT" == "ipengbei" ];then WEB=/usr/local/nginx/html/ipengbei myecho myecho "项目:$PROJECT 同步目录:$MASTERDIR" myecho "同步 $MASTERDIR 到 tyq:$WEBROOT/ipengbei" $SVN --non-interactive update $WEB --username luoxiaoguang --password lxg888 chmod -R 755 $WEB elif [ "$PROJECT" == "ipengbeiweb" ];then WEB=/usr/local/nginx/html/ipengbeiweb myecho myecho "项目:$PROJECT 同步目录:$MASTERDIR" myecho "同步 $MASTERDIR 到 ipbweb_dev:$WEBROOT/ipengbeiweb" $SVN update --non-interactive $WEB --username luoxiaoguang --password lxg888 chmod -R 755 $WEB chmod -R 777 $WEB/App/Runtime chmod -R 777 $WEB/Webconfig chmod -R 777 $WEB/UF else : fi # 在目录集合里删除已经同步好的目录 CHANGEDDIRS=$(echo "$CHANGEDDIRS" | grep -v "^$MASTERDIR") # 获取新的需要同步的主目录 MASTERDIR=$(echo "$CHANGEDDIRS" | head -1) done
朝朝暮暮.