背景
目前iOS开发团队使用模块化开发方案进行,一个项目大抵包含了一二十个子模块。代码用SVN进行管理,每个子模块都是独立的存在,有自己的Trunk、Branches以及Tag。每一次版本迭代,当有需要给多个子模块打新的分支的时候,使用客户端进行操作相对较为繁琐,为了提升这一环节的效率。便想着写个脚本来快速创建分支并且能将代码直接Check out下来。
由于自己对脚本不熟悉,只会几个简单的语法,协调了一下运维同事协助,后面的事情就很顺利了
脚本内容
#!/bin/bash
# Mac创建新的分支及Chekout到本地
echo -e "\033[31m 提醒:如交互过程中输入错误,请按住Ctrl键不放,然后按删除键;或者Crlt+c终止脚本。\033[0m"
#所有模块项目的仓库列表
List=(`svn list https://domain/svn/ios/C-Home/`)
PS3="你所需要查看的仓库的序号(选择EXIT的序号为退出):"
select Var in ${List[@]} EXIT
do
if [ $Var == "" ];then
echo -e "参数不能为空。\n"
continue
fi
if [ $Var == "EXIT" ];then
echo "你选择了退出。"
break
fi
Var1=`echo "$Var"|awk -F'/' '{print $1}'`
echo "你选择了"$Var",该仓库当前的历史版本号为:"
svn list https://domain/svn/ios/C-Home/$Var1/branches/
read -p "请输入你要在哪个版本号上创建分支:" Old_Version
read -p "请输入你需要创建的版本号:" New_Version
svn cp https://domain/svn/ios/C-Home/$Var1/branches/${Var1}_V${Old_Version} https://domain/svn/ios/C-Home/$Var1/branches/${Var1}_V${New_Version} -m "Create ${Var1}_V${New_Version}"
if [ $? -ne 0 ];then
echo "创建分支失败,请检查原因,正在退出..."
exit 0
fi
while true
do
read -p "请问是否需要Chekout到本地(输入Y/y或者N/n):" Key
case $Key in
Y|y)
echo "请稍等,正在执行Chekout..."
sleep 1
svn checkout https://domain/svn/ios/C-Home/$Var1/branches/${Var1}_V${New_Version} > /dev/null 2>&1
[ $? -eq 0 ]&&{
echo "执行完成"
}||echo "执行失败,请检查..."
break
;;
N|n)
echo "请继续..."
break
;;
*)
echo "请输入Y/y或者N/n!!!"
continue
;;
esac
done
done
输出
Last login: Thu May 11 15:55:34 on ttys001
YD-Koson-iMac:~ Koson$ cd /Users/Koson/Desktop
YD-Koson-iMac:Desktop Koson$ ./AutoBranch
1) Assets/ 13) JJSLibrary/
2) JJSAnalytics/ 14) JJSLogin/
3) JJSAppointment/ 15) JJSMapFind/
4) JJSCommunity/ 16) JJSMemberCenter/
5) JJSCommunity_Category/ 17) JJSMessage/
6) JJSDiscover/ 18) JJSNetworking/
7) JJSEventAspect/ 19) JJSProgressHUD/
8) JJSFoundation/ 20) JJSShare/
9) JJSHome/ 21) JJSTrading/
10) JJSHouse/ 22) Mediator/
11) JJSHouse_Category/ 23) EXIT
12) JJSKit/
你所需要查看的仓库的序号(选择EXIT的序号为退出):1
你选择了Assets/,该仓库当前的历史版本号为:
Assets_V5.2.0/
Assets_V5.3.1/
Assets_V5.4.0/
Assets_V5.4.1/
Assets_V5.4.2/
Assets_V5.4.3/
Assets_V5.4.4/
Assets_V5.6.0/
请输入你要在哪个版本号上创建分支:5.6.0
请输入你需要创建的版本号:5.7.0
Committing transaction...
Committed revision 13295.
请问是否需要Chekout到本地(输入Y/y或者N/n):y
请稍等,正在执行Chekout...
执行完成
你所需要查看的仓库的序号(选择EXIT的序号为退出):23
你选择了退出。
YD-Koson-iMac:~ Koson$
最后,分支就打好了,结合一键Check out到本地。效率得到了很大的提升。