概要
目標のリポジトリのパスで git コマンドを叩いて、
そこからブランチ名をチェックする bash スクリプトのサンプルです。
目的
ソースコードを自動的にデプロイしたりコミットするときの事故防止のブランチ名チェックや
諸事情で GitHub で main や master をロックできないけど自衛したい場合などに。
サンプルコード1は単純にチェックする部分のみ、
サンプルコード2はローカルでのgitコマンドの実行時に割り込んでセーフティとして使う場合の扱い方です。
使い方
スクリプト中の REPOSITORY_PATH と CHECK_BRANCH_NAMEを書き換えて、
サーバーの任意の場所に設置し、実行可能パーミッション( 755 など)にし、
実行してください。
他のシェルスクリプトに組み込む場合などはお好みで書き換えてください。
サンプルコード その1
checkBranchName.sh
#!/bin/bash
# config
REPOSITORY_PATH="${HOME}/hoge"
DENY_BRANCH_NAMES=("master" "main" "release" "staging")
cd "${REPOSITORY_PATH}" || exit 1
branch=$(git rev-parse --abbrev-ref HEAD) || exit 1
for deny_branch in "${DENY_BRANCH_NAMES[@]}"; do
if [[ "$branch" == "$deny_branch" ]]; then
echo "[NG] current branch \"$branch\" is in deny list"
exit 1
fi
done
echo "[OK] current branch \"$branch\" is not in deny list"
# 実行したいコマンドをここに書く
# ./deploy.sh などサンプルコード その2(実用版)
これをローカル環境などで使う場合に、git commit や git pushを抑制したい場合は、次のようにします。
まず、ラッパースクリプトとして、
~/bin/gitに次の内容のスクリプトを作成します。
#!/bin/bash
# deny-check
REPOSITORY_PATH=$(git rev-parse --show-toplevel 2>/dev/null)
DENY_BRANCH_NAMES=("master" "main" "release" "staging")
DENY_COMMANDS=("commit" "push")
GIT_EXEC_PATH="/usr/bin/git"
# get sub command from first argument
GIT_SUBCOMMAND="$1"
# allow if command is not exists in deny list
should_check=false
for cmd in "${DENY_COMMANDS[@]}"; do
if [[ "$GIT_SUBCOMMAND" == "$cmd" ]]; then
should_check=true
break
fi
done
if ! $should_check; then
exec "$GIT_EXEC_PATH" "$@"
fi
if [[ -d "$REPOSITORY_PATH" ]]; then
cd "$REPOSITORY_PATH" || exit 1
branch=$(git rev-parse --abbrev-ref HEAD) || exit 1
for deny_branch in "${DENY_BRANCH_NAMES[@]}"; do
if [[ "$branch" == "$deny_branch" ]]; then
echo "[NG] current branch \"$branch\" is in deny list"
exit 1
fi
done
fi
# exec git with arguments
exec "$GIT_EXEC_PATH" "$@"次に、gitコマンドの在り処を調べます。
which gitこの出力が、GIT_EXEC_PATH のところのパスと一致しているならば、そのままにしておき、異なる場合は書き換えましょう。
スクリプトの準備ができたら、実行パスをシェルに登録する必要があるため、次を実行します。
export PATH="$HOME/bin:$PATH"そして、sourceコマンドでシェルに設定を反映します。
※ もしくは ~/.zshrc
source ~/.bashrc 参考
ライセンスについて
- サンプルスクリプトについて、ライセンスの表記など無しに、商用や非商用問わず、どなたでも無償で無制限に扱っていただいて構いません。
- 作者または著作権者は使用や流用に関しての責任を一切負いません。