自动打git tag

原文:http://alblue.cn/articles/2020/09/29/1601373714646.html

Makefile

#默认小版本
t = 3
m = ""
branch=`git branch | grep \* | cut -d ' ' -f2`


tag:
    #自动打版本并提交,tag类型支持1、2、3,代表大版本,中版本,小版本:
    #Usage: make tag m="更新XX" t=3
    @sh ./auto_tag.sh $(t) $(m) $(branch)

shell

#!/bin/bash

#获取git版本
tag=$(git describe --tags `git rev-list --tags --max-count=1`)
echo "更新前版本" $tag
echo "更新备注" $2
#去掉头部的v
noVTag=${tag:1}
#按.分割字符串,变成3段
array=(${noVTag//./ })
arrayLen=${#array[*]}
if [[ $arrayLen != 3 ]];then
  echo "版本号长度不对,必须为 v1.x.x的格式"
  exit
elif [[ $1 -le 1 ]]||[[ $1 -gt 3 ]]; then
  echo "参数必须在1-3之间"
  exit
elif [[ $2 == "" ]]; then
   echo "tag备注必填"
  exit
fi

newVersion="v"
for (( i = 0; i < $arrayLen; i++ )); do
    v=${array[i]}
    if [[ $v == 1 ]];then
      #非大版本都是10-正无穷
      if [[ $i != 0 ]]; then
        v=(expr $v \* 10)
      fi
    fi

    if [[ $1 == 1 ]]&&[[ $i == 0 ]];then
      v=$(echo $v+1 | bc)
      echo "大版本更新后:" $v
    elif [[ $1 == 2 ]]&&[[ $i == 1 ]];then
      v=$(echo $v+1 | bc)
      echo "中版本更新后:" $v
    elif [[ $1 == 3 ]]&&[[ $i == 2 ]];then
      v=$(echo $v+1 | bc)
      echo "小版本更新后:" $v
    fi
    newVersion+=$v"."
done
newVersion=${newVersion%?}
echo "新版本:"$newVersion

git tag -a $newVersion -m $3_$2
git push origin $newVersion

你可能感兴趣的:(自动打git tag)