使用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/bash

REPOS="$1"
REV="$2"
LOG=/var/svnroot/logs/post-commit.log
APP_ROOT=/opt/webApp

CHANGE=$(svnlook changed -r $REV $REPOS |awk {'print $2'})
DST=${CHANGE/\/src/} #替换掉路径中src/字符串,部署路径没有这个的

svn export file://$REPOS/$CHANGE $APP_ROOT/$DST --force >>$LOG 2>&1

if [ $? == 0 ]; then
    echo [`date +"%Y-%m-%d %H:%M:%S"`] $CHANGE" ==> "$APP_ROOT/$DST ---OK >>$LOG
else
    echo [`date +"%Y-%m-%d %H:%M:%S"`] $CHANGE" ==> "$APP_ROOT/$DST ---fail >>$LOG
fi

猜你喜欢

转载自ruijf.iteye.com/blog/1146888