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つです。

  1. プロジェクトルート/.git/hooks下にpre-commitpre-push)を作成
  2. 作成したpre-commitpre-push)に下のスクリプトを書き込み
  3. pre-commitpre-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に置き換えてください。 ※もっといいスクリプトお待ちしております。

参考: