- 爲何要寫這個腳本
- 工做中常常會有合併分支的操做,一開始也不覺得然,後來發現若是更新頻繁的話,根本就停不下來,昨天上午正好有空,就完成了下面的這個第一版
- 可能存在的問題
- 通常的應用場景都是:從master分支裏面拉取出新feature,bug, release分支,若是分支完成,則須要先合併在test分支裏面,test分支測試完成後,合到master分支裏面,這時候可能並不會直接上線,還有一個preview環境,其實這裏用到的代碼和線上同樣,都是master裏面的,那麼問題來了
- 若是有兩我的共同用一個分支開發,他剛更新的代碼在測試上沒有問題,過一段時間測試完成了,通知運維人員能夠上預發佈環境了,可是這個時候該功能分支的另一個正好又提交了一個commit,這時會把最新的版本也合併了,說了半天,才說到重要,也就是每次合併以前都會有個pull --rebase操做
- 固然也能夠再建立一些函數之類的,可是這樣就失去了腳本的便利性,後面加一堆操做也不是很好,若是博友有好的建議,歡迎探討^ _^通常只須要
mb dev_xxx_fix_xxx test
就搞定了,額,這個名字是我建的一個軟鏈沒有其它的意思,only first letter of the merge branch
#!/bin/sh
# Author: zhang.wen
# Date: 2017-03-23 13:03
# VersionControlTools: git
#******************************
# $1 表示功能分支
# $2 要合併到的分支[ test|master ]
#******************************
# 退出狀態碼:
# -1表示沒有找到此分支
# -2表示代碼執行異常
MERGE_BRANCH=$1
TARGET_BRANCH=$2
function last_status()
{
if [ $? -eq 0 ]
then
return 0
else
exit -2
fi
}
function pull_latest_branch()
{
if git checkout $1 && git pull --rebase
then
last_status
fi
}
function check_branch()
{
if git branch | grep -q $1
then
return 0
else
echo "沒有找到此分支, 如今從遠程分支上拉取至本地"
pull_latest_branch
if git branch -rv | grep $1
then
git checkout -b $1 origin/$1
fi
fi
}
# $1表示要合併到的分支[目標分支],$2表示要合併的分支
function merge_branch()
{
if git checkout $1 && pull_latest_branch $1 && git merge $2
then
last_status
fi
}
# 接收一個參數,要推送的目標分支
function push_branch()
{
if git push origin $1 && git status
then
last_status
fi
}
function show_commit_id()
{
git log | head -5
}
function new_line()
{
echo
}
if [ $# -eq 0 ]
then
echo '請輸入要合併的分支名, 用法以下:'
echo "$0 src_branch dst_branch"
exit 0
fi
echo -e "\\033[0;31;1m當前摘取的分支是:\\033[0m $MERGE_BRANCH"
echo -e "\\033[0;31;1m要合併到的分支是:\033[0m $TARGET_BRANCH"
check_branch $MERGE_BRANCH
new_line
echo -e "拉取\\033[0;32;1m $MERGE_BRANCH\\033[0m 最新代碼"
pull_latest_branch $MERGE_BRANCH
new_line
echo -e "切換到\\033[0;32;1m $TARGET_BRANCH \\033[0m分支,合併\\033[0;32;1m $MERGE_BRANCH\\033[0m 最新代碼"
merge_branch $TARGET_BRANCH $MERGE_BRANCH
push_branch $TARGET_BRANCH
new_line
echo -e "\\033[0;31;1m------------------ COMMIT ID ------------------\\033[0m"
show_commit_id