自己用的Git快速合并&提交脚本。
使用方式
提交测试分支
git-push t
提交发布分支
git-push m
发布版本
git-push tag v1.0
脚本内容
#!/bin/bash
BR_TEST="test"
BR_RELEASE="master"
BR_DEVELOPMENT="$(git config --get user.name)/dev"
CMD=${1}
SOURCE_BR=""
TARGET_BR=""
TARGET_TAG=""
if [[ "${CMD}" == "tag" ]]; then
SOURCE_BR="${BR_RELEASE}"
TARGET_BR=""
TARGET_TAG=${2}
if [[ -z "${TARGET_TAG}" ]]; then
echo ">>>>> ERROR: The parameter <tag> not found. example: git-push tag v1.0"
exit -1;
fi
elif [[ "${CMD}" == "t" || "${CMD}" == "test" ]]; then
SOURCE_BR="${BR_DEVELOPMENT}"
TARGET_BR="${BR_TEST}"
elif [[ "${CMD}" == "m" || "${CMD}" == "master" ]]; then
SOURCE_BR="${BR_TEST}"
TARGET_BR="${BR_RELEASE}"
else
echo ">>>>> ERROR: The parameter format is incorrect. The parameter must be: [ <r or recreate>, <t or test>, <m or master>, tag <tag> ]"
exit -1;
fi
echo ">>>>> INFO: Update source branch [${SOURCE_BR}]"
git checkout ${SOURCE_BR} --quiet && git pull
if [ $? -ne 0 ]; then
echo ">>>>> ERROR: Update branch [${SOURCE_BR}] failed"
exit $?;
fi
# Add Tag SOURCE_BR => TARGET_TAG
if [[ -n "${TARGET_TAG}" ]]; then
echo ">>>>> INFO: Add tag ${SOURCE_BR}:<${TARGET_TAG}>"
git tag ${TARGET_TAG} && git push origin ${TARGET_TAG}
if [ $? -ne 0 ]; then
echo ">>>>> ERROR: Add tag ${SOURCE_BR}:<${TARGET_TAG}> failed"
exit $?;
fi
fi
# Merge SOURCE_BR => TARGET_BR
if [[ -n "${TARGET_BR}" ]]; then
echo ">>>>> INFO: Update target branch [${TARGET_BR}]"
git checkout ${TARGET_BR} --quiet || (git checkout -b ${TARGET_BR} && git branch --set-upstream-to=origin/${TARGET_BR})
if [ $? -ne 0 ]; then
echo ">>>>> ERROR: Update branch [${TARGET_BR}] failed"
exit $?;
fi
MERGE_MESSAGE="--log"
if [[ -n "${2}" ]]; then
MERGE_MESSAGE="-m '${2}'"
fi
echo ">>>>> INFO: Create merge request [${SOURCE_BR}] => [${TARGET_BR}]"
git merge ${SOURCE_BR} ${MERGE_MESSAGE} && git push origin ${TARGET_BR}
_EXITCODE_=$?
if [ $_EXITCODE_ -ne 0 ]; then
echo ">>>>> ERROR: Create merge request [${SOURCE_BR}] => [${TARGET_BR}] failed, exit code: ${_EXITCODE_}"
exit $?;
fi
fi
# Recreate devlop branch BR_DEVELOPMENT
if [[ "${TARGET_BR}" == "${BR_TEST}" && "${SOURCE_BR}" == "${BR_DEVELOPMENT}" ]]; then
echo ">>>>> INFO: Delete devlop branch [${SOURCE_BR}]"
git branch -D "${BR_DEVELOPMENT}" --quiet || echo ">>>>> WARN: local branch [${BR_DEVELOPMENT}] not exist"
git push -d origin "${BR_DEVELOPMENT}" --quiet || echo ">>>>> WARN: remote branch [${BR_DEVELOPMENT}] not exist"
echo ">>>>> INFO: Create devlop branch [${SOURCE_BR}]"
git checkout -b "${BR_DEVELOPMENT}" --quiet && git branch --set-upstream-to=origin/${BR_DEVELOPMENT} --quiet
if [ $? -ne 0 ]; then
echo ">>>>> ERROR: create branch [${BR_DEVELOPMENT}] failed"
exit $?;
fi
fi
echo ">>>>> INFO: Switch to devlop branch [${BR_DEVELOPMENT}]"
git checkout ${BR_DEVELOPMENT} --quiet
if [ $? -ne 0 ]; then
echo ">>>>> ERROR: Switch to devlop branch [${BR_DEVELOPMENT}] failed"
exit $?;
fi
echo ">>>>> INFO: Create merge request [${SOURCE_BR}] => [${TARGET_BR}] success!"
#REMOTE_BRANCH=`git branch -r`
# (for i in $REMOTE_BRANCH
# do
# if [[ $i =~ ^origin\/[a-z]+\/dev$ ]]; then
# echo ">>>>> ====================merge $i===================="
# git merge --no-edit $i
# fi
# done) &&
# git push origin ${SOURCE_BR}
# if [ $? -ne 0 ]; then
# exit $?;
# fi
# echo ">>>>> merge origin/*/dev branch and publsh code to ${SOURCE_BR} success!"