• 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
  • 相关阅读:
    Codeforces #250 (Div. 2) B. The Child and Set
    linux下又一次定位svn url方法
    查看hive版本号
    好947 Mybatis 配置resultMap 带參数查询Map 注意selectOne数据库返回结果一条数据库 否则会报错
    csdn加入暂时会话功能
    第二十五天 慵懒的投射在JDBC上的暖阳 —Hibernate的使用(四)
    lzma 知识点滴
    golang 登录
    docker入门
    创建和管理表(10)
  • 原文地址:https://www.cnblogs.com/wanli002/p/10260364.html
Copyright © 2020-2023  润新知