svn代码同步脚本

  碰到一个需求,主要是2个项目需要用到同一份代码,主要是域名和配置信息不一样,而且要把svn更新的代码同步过去。本来考虑提交时用钩子同步过去,但考虑到同步过去的代码还需要测试,而且另一边代码的时效性不强,所以主要用定时脚本来处理。

#比较2个版本号大小
function version_compare()
{
        v1=`echo $1 | cut -d "-" -f 2`
        v2=`echo $2 | cut -d "-" -f 2`

        #字符串处理,版本号例如1.1.2,1.1.1
        num1=(${v1//./ })
        num2=(${v2//./ })

        if [ "${num1[0]}" -gt "${num2[0]}" ];then
                echo $1
        elif [ "${num1[0]}" -lt "${num2[0]}" ];then
                echo $2
        else
                if [ "${num1[1]}" -gt "${num2[1]}" ];then
                        echo $1
                elif [ "${num1[1]}" -lt "${num2[1]}" ];then
                        echo $2
                else
                        if [ "${num1[2]}" -ge "${num2[2]}" ];then
                                echo $1
                        elif [ "${num1[2]}" -lt "${num2[2]}" ];then
                                echo $2
                        fi
                fi
        fi
}

echo "开始时间: "$(date +%Y-%m-%d %H:%M:%S)

project="***项目名称***"
url="***svn根路径***"
url_pro=${url}${project}
export_path="***svn导出根路径***"${project}
#用来保存本地版本号
version_path="***vetsion.txt"
log_path="***本地同步日志根路径"$(date +%Y-%m-%d)".log"

#数组循环,tag最新版本号
c=0
for file in `svn ls ${url_pro}/tags`
do
        filelist[c]="$file"
        ((c++))
done

max=${filelist[0]}
for(( i=0;i<${#filelist[@]}-1;i++))
do 
        max=$(version_compare $max ${filelist[i+1]})
done
max=${max%/*}

#本地最新版本号,判断是否需要导入
if [ ! -f "$version_path" ];then
        touch "$version_path"
fi

is_export=0
current=`cat ${version_path} |grep ${project}: |awk '{print $2}'`

if [ "$current" = "" ];then
        echo $project": "$max >> $version_path
        is_export=1
else
        if [ "$max" != "$current" ];then
                #更新本地最大版本号
                sed -i "s/${current}/${max}/g" ${version_path}
                is_export=1
        fi
fi

#is_export=1
echo "是否更新导出:"$is_export

#更新导出begin
if [ $is_export = 1 ];then
url_export="${url_pro}/tags/${max}"
svn export ${url_export} ${export_path} --force
echo "更新导出完成时间: "$(date +%Y-%m-%d %H:%M:%S)
chown www:www -R ${export_path}

#删除支付配置文件
rm -rf ${export_path}"/app/Libraries/Pay/PayPort"

#配置文件,域名替换
str1="***旧域名***"
str_rep="***新域名***"
sed -i "s/${str1}/${str_rep}/g" "${export_path}/config/"

echo "replace finish"

#更新写日志
if [ ! -f "$log_path" ];then
        touch "$log_path"
fi
echo $(date +%Y-%m-%d %H:%M:%S): $project" export">>$log_path
fi
#更新导出end
exit
原文地址:https://www.cnblogs.com/wanli002/p/10260364.html