Git別名調用自定義操作

1、cat ~/.gitconfig

[alias]
    st = status
    ci = commit
    df = diff
    co = checkout
    br = branch
    diffall = git-diffall
    dev = git-dev
    reg = git-reg
2、which git-dev

3、cat git-dev    cat git-reg

#!/bin/bash
`dirname "$0"`/tag.sh  dev


#!/bin/bash
`dirname "$0"`/tag.sh  reg

4、cat tag.sh

#!/bin/bash
echo "git pull"
git pull
echo "git push"
git push
echo ""
echo -e "\033[31m \033[05m 如果更新代碼分支有衝突,請先解決衝突! \033[0m"
echo ""


check_tag(){
RSLT='OK'
release_file_name=`pwd`'/release/'$1'.txt'
#echo "檢查移交文件是否存在......"
if [ -e "$release_file_name" ] ; then
#echo `ls $release_file_name`
echo -n ""
else
echo "移交文件${release_file_name} 不存在"
RSLT='NOT_OK'
fi


if [ "$RSLT" = "OK" ]
then
RSLT=0
else
RSLT=1
fi


return $RSLT
}


reg_tag() {
#檢查約束,默認不檢查
return 0
}


rel_tag() {
#檢查約束,默認不檢查
return 0
}


parse_git_branch() {
  echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/^* //'` 
}


#dev和reg tag號
parse_target_tag_version() {
target="$1_$2"
if [ $1 = "rel" ]
then
target="$1_$2"
else
version=`git tag | grep $1_$2| wc -l`
let version="$version+1"
if [ $version -lt 1 ] 
then
  target=${target}"_0"${version}
else
##取最大編號然後進行加1操作,防止tag中間跳號導致打Tag失敗
version=`git tag | grep $1_$2 | awk -F "_" '{print $3}' | awk '{print int($0)}' | sort -nr | head -n1`
let version="$version+1"
if [ $version -lt 10 ] 
then
target=${target}"_0"${version}
else
target=${target}"_"${version}
fi
fi


fi
echo $target
}




test_git_master() {
echo "master"
}


do_tag(){
    read -p "確定將 $1 推送到服務器[YES]: " tag_confirm
    tag_confirm=${tag_confirm:-YES}


    if [ "$tag_confirm" = "YES" ]
    then
echo "git tag $1"
git tag $1
    echo "git push origin $1"
    git push origin $1
    else
    echo "取消成功!"
    exit 2
    fi
}


undo_tag(){
echo "git tag -d $1"
git tag -d $1
}


set_release_date() {
#設置時間
while [ -z "$pdate" ]
do
read -p "請輸入發佈日期[20140116]: " pdate
        date=`echo $pdate | sed -n "/^[0-9]\+$/p"`


if [  "$date" = "" ]
  then
   pdate=""
fi


done
echo "你輸入的發佈日期爲: $pdate"
}










TAG_TYPE_TARGET=$1


run_rs=0




master=`parse_git_branch`


echo "當前分支爲:"$master


if [ "$TAG_TYPE_TARGET" = "dev" ]; then


if [ "$master" = "master" ]; then
echo "請在開發分支上打dev"
run_rs=1
else
#set_release_date
pdate=`echo $master | cut  -f 2 -d '_'`




echo "./release.sh"
./release.sh

if [ "$?" = "0" ]; then
echo "執行移交檢查成功"
check_tag $pdate
run_rs=$?
else
echo "執行移交檢查失敗,請按照錯誤消息進行檢查"
run_rs=1
fi


fi
fi


if [ "$TAG_TYPE_TARGET" = "reg" ]; then


echo ""
    echo -e "\033[31m \033[05m 請確保將master分支merge到開發分支,然後將開發分支merge到master! \033[0m"
    echo ""


if [ "$master" = "master" ]; then


set_release_date
echo ""
echo "./release.sh"
echo ""
./release.sh

if [ "$?" = "0" ]; then
echo "執行移交檢查成功"
reg_tag
run_rs=$?
else
echo "執行移交檢查失敗,請按照錯誤消息進行檢查"
run_rs=1
fi


else
echo "請在master分支上打reg"
run_rs=1
fi

fi


##quick-tag
if [ "$TAG_TYPE_TARGET" = "hot" ] || [ "$TAG_TYPE_TARGET" = "quick" ] || [ "$TAG_TYPE_TARGET" = "emp" ]; then


echo ""
    echo -e "\033[31m \033[05m 請確保將hot/quick/emp分支是從生產環境的tag中拉出的!且不能在master上打hot/quick/emp類型的TAG,發佈完成後,合併回master並通知其他進行的reg項目合併master代碼 \033[0m"
    echo ""


if [ "$master" = "master" ]; then
echo "不能在master上打hot/quick/emp類型TAG"
run_rs=1
else


pdate=`echo $master | cut  -f 2 -d '_'`


echo ""
echo "./release.sh"
echo ""
./release.sh

if [ "$?" = "0" ]; then
echo "執行移交檢查成功"
check_tag $pdate
run_rs=$?
else
echo "執行移交檢查失敗,請按照錯誤消息進行檢查"
run_rs=1
fi
fi

fi


if [ "$TAG_TYPE_TARGET" = "rel" ]; then


#if [ "$master" = "master" ]; then


echo ""
echo -e "\033[31m \033[05m 完成後請通知其他其他人合併master分支! \033[0m"
echo ""


set_release_date
rel_tag
run_rs=$?
#else
# echo "請在master分支上打rel"
# run_rs=1
#fi
fi


#echo $run_rs
if [ "$run_rs" != "0" ]; then
echo "任務執行失敗"
exit 1
else
tag_version=`parse_target_tag_version $TAG_TYPE_TARGET  $pdate`
echo "目標TAG爲:"$tag_version
if [ "$tag_version"x != ""x ]; then


do_tag $tag_version


if [ "$?" = "0" ]; then
            echo "任務執行成功"
        else
            undo_tag $tag_version
            echo "任務執行失敗"
            exit 1
        fi


else
echo "任務執行失敗"
exit 1
fi

fi


exit 0

5、cat release.sh

#!/bin/sh
echo "package the war"
gradle clean war
mkdir -p build/deploy/config/
cp build/libs/*.war build/deploy/
cp src/main/resources/*.properties build/deploy/config/


發佈了27 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章