【git】masterブランチへのプッシュを禁止する

gitへのmasterプッシュの危険性

gitのmasterプッシュは少しばかり危険。masterとは安定に動く最新のバージョンという立ち位置であるので、こちらに修正中で動作保証されていないコードが入るのは非常に良くないことである。

ですので、gitではmasterプッシュはできないよう設定するべきだと私は思っています。(個人開発ではその限りではないかもしれませんが…)

gitへのmasterプッシュを禁止する

gitのリモートリポジトリへプッシュできないように禁止していきます。

設定を追加する

gitリポジトリにはgit_templateという機能があり、こちらではgitリポジトリをcloneした際に適用されるようになります。

gitのローカルリポジトリ以下の.git/hooks内にpre-pushというファイルを作成し、以下のような内容を記述します。

#!/bin/bash

# pushを禁止するブランチ
readonly MASTER='master'
readonly RELEASE='^.*release.*$' # 「release」文字列を含む全てのブランチ

while read local_ref local_sha1 remote_ref remote_sha1
do
if [[ "${remote_ref##refs/heads/}" = $MASTER ]]; then
	echo -e "\033[0;32mDo not push to\033[m\033[1;34m master\033[m \033[0;32mbranch\033[m"
	exit 1
fi
if [[ "${remote_ref##refs/heads/}" =~ $RELEASE ]]; then
	echo -e "\033[0;32mDo not push to\033[m\033[1;34m release\033[m \033[0;32mbranch\033[m"
	exit 1
fi
done

このファイルに実行権限を付与します。

chmod 755 .git/hooks/pre-push

これでOKです。