はじめに
リリースに伴うGitのタグ張り替えのシェルスクリプトです。
今回は、リポジトリには含めずに、git clone
を実行するディレクトリにファイルを置くことを想定しています。
また、コミット管理用のタグとリリース作業時の切り戻し用のタグを扱う事を想定しています。
スクリプト
update_tags.sh
#!/bin/sh
REPOSITORY=[リポジトリ名]
TODAY=`date '+%Y%m%d'`
ENV_TYPE=[環境(dev, stg, prod)]
SYSTEM_NAME=[システム名]
BRANCH=${SYSTEM_NAME}-${ENV_TYPE} # ブランチの命名規則に従います
cd ${REPOSITORY}
TAG_NUM=$(printf "%02d" "`expr $(git tag -l "${TODAY}*${BRANCH}" | wc -l | awk '{print $1}') + 1`")
# リリースしたコミットの管理用タグ
RELEASE_TAG=${TODAY}-${TAG_NUM}-${BRANCH} # タグの命名規則に従います (YYYYMMDD-{採番}-ブランチ名)
# リリース作業の切り戻し用タグ
SWITCH_BACK_TAG=switch-back-${BRANCH}
# ローカルタグをリモートタグに強制的に上書きする
git pull -f origin ${BRANCH} --tag
## リリースしたコミット管理用のタグを追加
# ローカルタグ追加
git tag -a ${RELEASE_TAG} -m '' HEAD
# リモートタグ追加
git push origin ${RELEASE_TAG}
## 切り戻しタグの張り替え
# ローカルタグ削除
git tag -d ${SWITCH_BACK_TAG}
# リモートタグ削除
git push origin :refs/tags/${SWITCH_BACK_TAG}
# ローカルタグ追加
git tag -a ${SWITCH_BACK_TAG} -m '' HEAD
# リモートタグ追加
git push origin ${SWITCH_BACK_TAG}
cd ..