svn钩子(post-commit)区分根目录上传的一级文件夹
该功能主要实现的是客户端提交的数据到svn,然后将会触发svn钩子(post-commit);根据svn根目录(svn检出一级目录定位根目录)下的每一个目录进行相对应的shell脚本触发;该功能主要作用于一个svn下根据提交不同的项目来触发不同的shell脚本,实现项目代码同步功能。
#!/bin/bash export LANG="en_US.UTF-8" EPOS="$1" REV="$2" SVNLOOK=/usr/bin/svnlook SVN_PATH=$($SVNLOOK dirs-changed $EPOS) #分割目录 INDEX_DIRECTORY=(${SVN_PATH//// }) #定义项目目录 DIRECTORY=('webProject' 'formalWebProject') #定义服务器同步目录 LINUX_DIRECOTRY=('backup' 'formal') #定义脚本前缀名 SHELL_PREFIX=('test' 'formal') #获取数组长度 LENGTH=${#DIRECTORY[@]} #获取当前项目目录名 INDEX_WEB=${INDEX_DIRECTORY[1]//./_} #svn路径 SVN_URL=svn://192.168.8.240/WebCenter/ #SVN用户名密码 USERNAME= PASSWORD= #日志路径 LOGPATH=/var/log/hooks_log.log for (( i = 0; i < ${LENGTH}; ++i )) do if [[ ${INDEX_DIRECTORY[0]} = ${DIRECTORY[$i]} ]];then TARGET_PATH=/home/${LINUX_DIRECOTRY[$i]}/${INDEX_WEB}/ /usr/bin/svn update ${SVN_URL}${DIRECTORY[$i]}/ ${TARGET_PATH} --username=${USERNAME} --password=${PASSWORD} --no-auth-cache if [[ $? -eq 0 ]] then chown -R www:www ${TARGET_PATH} /bin/bash /home/shell/${SHELL_PREFIX[$i]}_${INDEX_WEB}_rsync.sh >> ${LOGPATH} 2>&1 fi fi done
如有不对的地方或更好的方法,欢迎下方留言指出,谢谢!