svn 同步脚本--添加在post-commit

本文提供了一个脚本实例,用于自动化更新并同步不同SVN项目的多个步骤,包括根据特定条件判断是否需要同步到指定的线上活动测试机。脚本通过解析SVN变更记录,识别需要更新的项目,并根据不同情况执行相应的同步操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/bin/bash

export LANG=zh_CN.UTF-8
for val in `svnlook changed /data0/svndata/ | awk '{print $2}' | awk -F "/" '{print $1}'| sort | uniq -c | awk '{print $2}'`
do
echo "更新时间:`date`,更新项目:$val">>/tmp/svn.log

if [ $val == "abc" ]; then 如果有特殊的项目不在同一配置目录下,可做判断

#本项目只有两台机器需要同步
su www --command "/usr/local/bin/svn up /data0/.../game"
/usr/bin/ssh www@IP "cd /data0/.../game;export LC_CTYPE=en_US.UTF-8 && svn up"
else
su www --command "/usr/local/bin/svn up /data0/htdocs/$val"
/usr/bin/ssh www@IP "cd /data0/htdocs/$val;export LC_CTYPE=en_US.UTF-8 && svn up"
fi

done


#新方案

#新方案说明;
#通过svnlook changed 来获取已经触发更新的项目路径,通过正则匹配处理无用输出,awk根据判断是否是专题活动更新,来处理输出项目路径(专题活动下有子分类,所以需要区别处理)
#得到项目路径来判断是否包含zt.xoyo.com,分别进行更新项目
#添加时间:zhaolilei--20120525

for notify in `svnlook changed /data0/svndata/ |sed 's/.*publish\///g' |awk -F "/" '{if($1=="zt.*.com"){print $1"/"$2"/"$3}else{print $1}}' |sort |uniq -c |awk '{print $2}'`
do
    echo "要更新的目录为:$notify"
    #判断变量里是否包含zt.*.com,如果不包含,说明要更新的项目不需要同步到222线上活动测试机(非专题活动测试在205上进行)
    num=`echo $notify | grep zt.*.com | grep -v "grep" | wc -l`
    if [ $num -eq 0 ]; then
       su www --command "svn up /data0/htdocs/$notify"
    else
       su www --command "svn up /data0/htdocs/$notify"
       #/usr/bin/ssh www@10.*.*.222 "cd /data0/htdocs/$notify;export LC_CTYPE=en_US.UTF-8 && svn up"
       /usr/bin/ssh www@10.*.*.222 "export LC_CTYPE=en_US.UTF-8;svn up /data0/htdocs/$notify"
    fi
done


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值