执行的结果
设计逻辑
通过命令行可以传值,动态的合并不同版本库中的代码;
判断组合出来的svn地址是否可用;
判断是否已经迁出代码到本地,如果没有需要先迁出;
获取主干和分支的版本号,便于今后的合并;
如果主干版本号大于等于分支版本号,则无需合并;
合并后提交主干版本号到主干;
拉取主干更新日志,查看是否已经合并成功;
代码逻辑
#!/bin/sh
if [ ! $1 ];then
echo '请输入版本库名称'
exit
else
repos_name=$1
repos_url='svn://domain.com/'$repos_name
repos_dir='/root/svn_co_code/'$repos_name
ver_no=$(svn info ${repos_url} -rHEAD | grep "最后修改的版本:" | cut -d' ' -f2)
if [ ! $ver_no ];then
echo '版本库不存在'
exit
fi
if [ ! -d $repos_dir ];then
cd /root/svn_co_code
svn co $repos_url
fi
cd $repos_dir
pwd
svn up
trunk=$repos_url'/trunk'
dev=$repos_url'/branches/dev'
trunk_ver=$(svn info ${trunk} -rHEAD | grep "最后修改的版本:" | cut -d' ' -f2)
dev_ver=$(svn info ${dev} -rHEAD | grep "最后修改的版本:" | cut -d' ' -f2)
echo '主干分支版本号(trunk):'$trunk_ver
echo '开发分支版本号(branches/dev):'$dev_ver
if [ $trunk_ver -ge $dev_ver ];then
echo '无需合并'
exit
fi
cd $repos_dir'/trunk'
svn merge -r $trunk_ver:$dev_ver $dev
svn ci -m "merge br dev@${dev_ver} to trunk"
pwd
svn log -v -l1
fi
样例
trunk:是主干分支。生产环境跑的就是这个分支下的代码。
branches/dev:是开发分支。开发人员的代码主要在这里。
测试人员会不定期的将开发分支的代码,合并到主干分支,用于测试。
假设:
版本库地址是:svn://code.domain.com/api
本地迁出代码目录存放的路径是:/root/svn_co_code/api
可以在命令行下直接执行
sh ./merge.sh api
即可完成自动化合并
#!/bin/sh
if [ ! $1 ];then
echo '请输入版本库名称'
exit
else
repos_name=$1
repos_url='svn://code.domain.com/'$repos_name
repos_dir='/root/svn_co_code/'$repos_name
ver_no=$(svn info ${repos_url} -rHEAD | grep "最后修改的版本:" | cut -d' ' -f2)
if [ ! $ver_no ];then
echo '版本库不存在'
exit
fi
if [ ! -d $repos_dir ];then
cd /root/svn_co_code
svn co $repos_url
fi
cd $repos_dir
pwd
svn up
trunk=$repos_url'/trunk'
dev=$repos_url'/branches/dev'
trunk_ver=$(svn info ${trunk} -rHEAD | grep "最后修改的版本:" | cut -d' ' -f2)
dev_ver=$(svn info ${dev} -rHEAD | grep "最后修改的版本:" | cut -d' ' -f2)
echo '主干分支版本号(trunk):'$trunk_ver
echo '开发分支版本号(branches/dev):'$dev_ver
if [ $trunk_ver -ge $dev_ver ];then
echo '无需合并'
exit
fi
cd $repos_dir'/trunk'
svn merge -r $trunk_ver:$dev_ver $dev
svn ci -m "merge br dev@${dev_ver} to trunk"
pwd
svn log -v -l1
fi