碰到一个需求,主要是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

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. Nodejs文件监控chokidar

    最近有个需求是扫描用例,用例是放在svn上,如果每次扫描都去遍历目录的话会有占用太多的io,所以想着用文件监控,有文件变化时只对该文件进行操作. Nodejs里的 chokidar 模块可以更好的对文 ...

  2. 【洛谷 P2553】 [AHOI2001]多项式乘法(FFT)

    题目链接 简单处理一下输入,\(fft\)模板题. #include <cstdio> #include <cmath> #include <algorithm> ...

  3. 【leetcode 简单】第十二题 报数

    报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作  "one 1&quo ...

  4. python-num18 - django进阶一

    一.深入django的路由系统 下面为django的请求生命周期 下面来看下整个生命周期中的路由系统: 在Django的urls中我们可以根据一个URL对应一个函数名来定义路由规则如下: " ...

  5. android内存回收顺序

    最近做项目的时候,经常会考虑到系统回收进程,释放资源等问题.特别查找了相关资料,了解下android内存回收顺序以及回收场景. 下面内容都为网络查找资料,若有错误,欢迎指出. 以下顺序,依次被回收的可 ...

  6. RTC

    RTC的英文全称是Real-Time Clock,翻译过来是实时时钟芯片. RTC是PC主板上的晶振及相关电路组成的时钟电路的生成脉冲主板上的晶振及相关电路组成的时钟电路的生成脉冲,,RTC经过825 ...

  7. 用C++写程序的一些感悟

    前言 近期使用C++有了一些心得很感悟,这里整理一下. 心得1 如果只会使用LabVIEW写程序,还想要进一步深入程序设计,一定要学习一门文本语言. 什么是会用LabVIEW 会用是个比较笼统的概念. ...

  8. Netty框架入门

    一.概述     Netty是由JBOSS提供的一个java开源框架.     Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序.   二. ...

  9. python是如何进行内存管理的?

    Python内存管理机制 Python内存管理机制主要包括以下三个方面: 引用计数机制 垃圾回收机制 内存池机制 引用计数 举个例子说明引用是什么: 1 如上为一个简单的赋值语句,1就是对象,a就是引 ...

  10. C++随笔(2)

    在牛客网上刷题,遇到的一些需要注意的题 1.这题需要注意的是strcpy复制的时候什么时候停止 2.这题是关于strlen的,它不统计‘\0',但复制的时候仍会复制. 3.这题是写strcpy函数的, ...