zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    C语言volatile解析
    使用中断开关实现全局变量互斥访问
    CentOS7下gogs安装总结
    iOS Xcode: linker command failed with exit code 1 (use -v to see invocation) 处理方法
    C# 10进制与62进制互转 数据大无压力 10进制与72,96进制任意转换
    Web网站的性能测试工具
    NetCore跨平台桌面框架Avalonia的OSX程序打包
    C# 类中静态变量静态构造函数执行顺序
    mac osx下虚拟主机配置
    React+ES6+Webpack深入浅出
  • 原文地址:https://www.cnblogs.com/wanli002/p/10260364.html
Copyright © 2011-2022 走看看