使用svn钩子自动干净地更新文件
使用svn的钩子post-commit做更新时,传参只有REPOS和REV,一个是库名,一个版本号。通常的情况是使用svn update代码,这种情况会产生很多的.svn版本控制文件。
看了下svn的帮助,发现2个命令可以解决以上的问题
1.svnlook changed -r $REV $REPOS
这个命令是检查本次版本中发生改变的文件,返回文件的在库中的相对路径
2.svn export file:///$REPOS/文件 目标地
导出干净的文件到目标地,不带.svn版本控制文件
于是又查了下shell脚本语法,得出以下脚本post-commit:
#!/bin/bashREPOS="$1"REV="$2"LOG=/var/svnroot/logs/post-commit.logAPP_ROOT=/opt/webAppCHANGE=$(svnlook changed -r $REV $REPOS |awk {'print $2'})DST=${CHANGE/\/src/} #替换掉路径中src/字符串,部署路径没有这个的svn export file://$REPOS/$CHANGE $APP_ROOT/$DST --force >>$LOG 2>&1if [ $? == 0 ]; then echo [`date +"%Y-%m-%d %H:%M:%S"`] $CHANGE" ==> "$APP_ROOT/$DST ---OK >>$LOGelse echo [`date +"%Y-%m-%d %H:%M:%S"`] $CHANGE" ==> "$APP_ROOT/$DST ---fail >>$LOGfi
?
?
?