周四要合并3个分支,第一次合。尝试写了个脚本。写法发现自己的bash shell真的超不熟练,很多东西要再查google,悲痛,所以总结此文以铭记。
脚本如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #!/bin/bash cd `dirname $0` base_dir=$(pwd) if [ $# -lt 2 ] ; then echo "USAGE: $0 oldBranch newBranch" echo " e.g.: $0 http://XXX/api_1 http://XXX/api_2 merge.log" exit 1 fi function ask_Y_N { echo -e "\e[31;40;1mCheck Again! Go Next? (Y/N) (default: N)\e[m" read dorm dorm=${dorm:=N} if [ $dorm != Y ] && [ $dorm != y ]; then echo "==>Exit." exit 0 fi } oldBranch=$1 newBranch=$2 echo -e "oldBranch is: \e[36;40;4m$oldBranch\e[m" echo -e "newBranch is: \e[36;40;4m$newBranch\e[m" echo "Meger oldBranch to the newBranch." ask_Y_N date_str=$(date +%Y-%m-%d_%H:%M:%S) #echo $date_str $base_dir $1 $2 $3 echo -e "\e[32;40;1m1. svn co newBranch.\e[m" newBranchDir=$base_dir/$(date +%s)_new svn co $newBranch $newBranchDir echo -e "\e[32;40;1m2. find the oldBranch begin version.\e[m" bengin_ver=$(svn log --stop-on-copy $oldBranch |grep 'r[0-9]* |' | tail -n 1 | awk -F"[ r|]" '{print $2}') echo "Begin version: $bengin_ver" svn log -r $bengin_ver $oldBranch echo -e "\e[32;40;1m3. svn merge --dry-run -r $bengin_ver:HEAD\e[m" svn merge --dry-run -r $bengin_ver:HEAD $oldBranch $newBranchDir echo -e "\e[32;40;1m4. svn merge --ignore-ancestry -r $bengin_ver:HEAD\e[m" ask_Y_N cd $newBranchDir svn merge --ignore-ancestry -r $bengin_ver:HEAD $oldBranch . echo -e "\e[32;40;1m==> Done. Please do 'svn commit' yourself later!\e[m" echo "cd $newBranchDir" echo "svn ci -m 'merge from $oldBranch Details:\\" |
从前到后,涉及到的几种bash语法:
- 当前shell文件名:$0。line:3
- 找shell当前目录:dirname,shell内执行shell,变量赋值。line:3-4
- 判断外部传入参数,错误则打印Usage,并退出。line:6-10
- 函数运用。直接用函数名,即调用函数。函数定义必须在函数调用之前。line:12-20,27
- shell着色。echo -e “\e[31;40; …… \e[m”,详细参见:http://corz.org/public/linux/usr/local/bin/color.sh