快速建立分支Shell指令碼

weixin_34321977發表於2017-05-11

背景

目前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到本地。效率得到了很大的提升。

相關文章