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

  1. #比较2个版本号大小
  2. function version_compare()
  3. {
  4. v1=`echo $1 | cut -d "-" -f 2`
  5. v2=`echo $2 | cut -d "-" -f 2`
  6.  
  7. #字符串处理,版本号例如1.1.2,1.1.1
  8. num1=(${v1//./ })
  9. num2=(${v2//./ })
  10.  
  11. if [ "${num1[0]}" -gt "${num2[0]}" ];then
  12. echo $1
  13. elif [ "${num1[0]}" -lt "${num2[0]}" ];then
  14. echo $2
  15. else
  16. if [ "${num1[1]}" -gt "${num2[1]}" ];then
  17. echo $1
  18. elif [ "${num1[1]}" -lt "${num2[1]}" ];then
  19. echo $2
  20. else
  21. if [ "${num1[2]}" -ge "${num2[2]}" ];then
  22. echo $1
  23. elif [ "${num1[2]}" -lt "${num2[2]}" ];then
  24. echo $2
  25. fi
  26. fi
  27. fi
  28. }
  29.  
  30. echo "开始时间: "$(date +%Y-%m-%d\ %H:%M:%S)
  31.  
  32. project="***项目名称***"
  33. url="***svn根路径***"
  34. url_pro=${url}${project}
  35. export_path="***svn导出根路径***"${project}
  36. #用来保存本地版本号
  37. version_path="***vetsion.txt"
  38. log_path="***本地同步日志根路径"$(date +%Y-%m-%d)".log"
  39.  
  40. #数组循环,tag最新版本号
  41. c=0
  42. for file in `svn ls ${url_pro}/tags`
  43. do
  44. filelist[c]="$file"
  45. ((c++))
  46. done
  47.  
  48. max=${filelist[0]}
  49. for(( i=0;i<${#filelist[@]}-1;i++))
  50. do
  51. max=$(version_compare $max ${filelist[i+1]})
  52. done
  53. max=${max%/*}
  54.  
  55. #本地最新版本号,判断是否需要导入
  56. if [ ! -f "$version_path" ];then
  57. touch "$version_path"
  58. fi
  59.  
  60. is_export=0
  61. current=`cat ${version_path} |grep ${project}: |awk '{print $2}'`
  62.  
  63. if [ "$current" = "" ];then
  64. echo $project": "$max >> $version_path
  65. is_export=1
  66. else
  67. if [ "$max" != "$current" ];then
  68. #更新本地最大版本号
  69. sed -i "s/${current}/${max}/g" ${version_path}
  70. is_export=1
  71. fi
  72. fi
  73.  
  74. #is_export=1
  75. echo "是否更新导出:"$is_export
  76.  
  77. #更新导出begin
  78. if [ $is_export = 1 ];then
  79. url_export="${url_pro}/tags/${max}"
  80. svn export ${url_export} ${export_path} --force
  81. echo "更新导出完成时间: "$(date +%Y-%m-%d\ %H:%M:%S)
  82. chown www:www -R ${export_path}
  83.  
  84. #删除支付配置文件
  85. rm -rf ${export_path}"/app/Libraries/Pay/PayPort"
  86.  
  87. #配置文件,域名替换
  88. str1="***旧域名***"
  89. str_rep="***新域名***"
  90. sed -i "s/${str1}/${str_rep}/g" "${export_path}/config/"
  91.  
  92. echo "replace finish"
  93.  
  94. #更新写日志
  95. if [ ! -f "$log_path" ];then
  96. touch "$log_path"
  97. fi
  98. echo $(date +%Y-%m-%d\ %H:%M:%S): $project" export">>$log_path
  99. fi
  100. #更新导出end
  101. exit

svn代码同步脚本的更多相关文章

  1. 初学svn对版本进行控制 用post- commit钩子实现代码同步到web目录

    这里只是一个记录,原文摘抄svn利用钩子实现代码同步到web目录 思路: 找 到SVN Server中的仓库(Repositories)文件夹的位置,在相应的项目文件夹中找到hooks文件夹.在该文件 ...

  2. SVN与TFS自动同步脚本(很实用)

    一直都在园子里看文章,因为各种原因懒得写文章.最近稍得空闲,把这几天的工作成果分享一下. 因为工作需要,开发人员使用Qt进行系统移动端的开发,Qt的版本控制却不提供连接TFS的设置,只有使用svn.没 ...

  3. Linux服务器关联Git,通过执行更新脚本实现代码同步

    1.在Linux服务器安装Git yum install git -y   tips: 卸载Git :  yum remove git   2.在Linux生成ssh key   1)创建用户 git ...

  4. 实现本地svn目录同步时,服务器的相应目录保持自动同步

    提交一个TEST文件夹 但是服务器上并没有显示 而新检出的目录却有 这个时候需要手动去update才会显示,而不可能每次都去update,所以,就用到配置自动更新 1.创建svn目录:mkdir /v ...

  5. [linux][shell]负载均衡下多个服务器代码同步方案

    说明: 服务器是腾讯的云服务器(腾讯用的是linux container),远程登陆云服务器需要使用代理,在服务器中不能访问外网,所以当时也就没有去想做svn 需求: 1. 把同样的代码同步到不同的服 ...

  6. SVN版本号打包脚本工具

    做网页游戏开发的时候,经常会触及到对文件版本号的管理.最近由于做新项目的原因,把原来手写版本号的方法改进了一下,借由svn的版本号生成及用java写了个xml解析输出文件,把手动的东西都变成全自动. ...

  7. 自动化运维:网站svn代码上线更新(flask+saltstack)

    阶段性总结:      跌跌撞撞的用了一周左右的时间做完了网站自动升级功能,中间遇到了很多的问题,也学到了很多,在此做一个总结.   1.整体架构: 后台:nginx+uwsgi  #nginx提供w ...

  8. git-svn:通过git来管理svn代码

    简介 svn和git都是常用的版本管理软件,但是git无论在理念或是功能上都比svn更为先进.但是有的公司是以svn作为中央仓库,这时git与svn代码的同步就可以通过 git-svn这个软件进行,从 ...

  9. Linux下SVN(Subversion)自动启动脚本

    在Red Hat  Linux中自动运行程序    1.开机启动时自动运行程序    Linux加载后, 它将初始化硬件和设备驱动,然后运行第一个进程init.init根据配置文件继续引导过程,启动其 ...

随机推荐

  1. JS事件大全及兼容

    一般事件 事件 浏览器支持 描述 onClick IE3|N2|O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击 onDblClick IE4|N4|O 鼠标双击事件 onMouseDown  ...

  2. linux中execve函数的用法

    在父进程中fork一个子进程,在子进程中调用exec函数启动新的程序.exec函数一共有六个,其中execve为内核级系统调用,其他(execl,execle,execlp,execv,execvp) ...

  3. 重构改善既有代码设计--重构手法05:Introduce Explaining Variable (引入解释性变量)

      发现:你有一个复杂的表达式. 解决:将该复杂的表达式(或其中的部分)的结果放进一个临时变量,并以此变量名称来解释表达式用途. //重构前 if((platform.toUpperCase().in ...

  4. windows安装zookeeper和kafka,flume

    一.安装JDK 过程比较简单,这里不做说明. 最后打开cmd输入如下内容,表示安装成功 二.安装zooeleeper 下载安装包:http://zookeeper.apache.org/release ...

  5. Razor使用Parse()时最好指定“缓存名”

    为什么? 本文的标题,明显有一种提醒的口吻. 从18年的生活经验看,如果想提醒人要怎么办,不要怎么办. 最好说明原因.那么小编开始说明原因喽. 哦对,说原因之前,先说交代一下背景,一句话 在非mvc下 ...

  6. JavaScript 核心

    我们首先来看一下对象[Object]的概念,这也是 ECMASript 中最基本的概念. 对象 Object ECMAScript 是一门高度抽象的面向对象(object-oriented)语言,用以 ...

  7. ValueList用法

    ValueList的OverView 概述 在很多情况下,使用JDBC是很繁琐的,有很多方法可以替换JDBC,比如JDO.Hibernate等. 即使在从service中接收POJO的List的解决方 ...

  8. slave->pxc后GTID不一致

    以下两个参数在两个节点是对得上的. | wsrep_last_applied | 3363764 | | wsrep_last_committed | 3363764 但show master sta ...

  9. No manual entry for pthread_mutex_init .

    $manpthread_mutex_init No manual entryfor pthread_mutex_init 解决方案: $sudo apt-get install manpages-po ...

  10. Tutorial 6: ViewSets & Routers

    转载自:http://www.django-rest-framework.org/tutorial/6-viewsets-and-routers/ Tutorial 6: ViewSets & ...