developやmasterへのpush、commitを防ぐ(禁止する) - Hirochon/Shappar GitHub Wiki
はじめに
ブランチ名をターミナルに表示させていてもなお、pushミスをしてしまうことがあります。 リモートのdevelopへ直接pushしてしまうと開発へ影響が出るので避けたいです。
対策
対策として、developへのcommitとpushを防ぐ設定をしておくことができます。
利用する機能はGit フック
です。Git フックは、特定のアクションが発生した時にカスタムスクリプトを実行する機能です。
具体的には、commitやpushを行う際に実行することができます。
この時実行するスクリプトで、commitやpushの対象ブランチがdevelopやmasterであれば、commitやpushをしないようにして防ぎます。
参考:Git フック
設定
手順は以下の3つです。
プロジェクトルート/.git/hooks
下にpre-commit
(pre-push
)を作成- 作成した
pre-commit
(pre-push
)に下のスクリプトを書き込み pre-commit
(pre-push
)実行権限を与える
# 対象のディレクトリに移動する
$ cd ~/tmp_git_practice
# pre-pushファイルを作成する
$ cd .git/hooks
$ vim pre-push # ここにスクリプトを書く
# 実行権限「x」をつける
$ chmod +x pre-push
スクリプト
#!/bin/bash
# commitを禁止するブランチ
readonly MASTER='master'
readonly DEVELOP='develop'
branch="$(git symbolic-ref HEAD 2>/dev/null)" || \
"$(git describe --contains --all HEAD)"
if [ "${branch##refs/heads/}" = $MASTER ](/Hirochon/Shappar/wiki/-"${branch##refs/heads/}"-=-$MASTER-); then
echo "can't commit on ${MASTER} branch."
exit 1
fi
if [ "${branch##refs/heads/}" = $DEVELOP ](/Hirochon/Shappar/wiki/-"${branch##refs/heads/}"-=-$DEVELOP-); then
echo "can't commit on ${DEVELOP} branch."
exit 1
fi
※上記はcommitに対するメッセージが出ます。pushの設定ではcommitをpushに置き換えてください。 ※もっといいスクリプトお待ちしております。
参考: