gitでmasterブランチに直pushをできないようにする方法

技術

はじめに

こんにちは!さいけです。

本記事は、「gitでmasterブランチに直pushをできないようにする方法」について紹介します。

gitでmasterブランチに直pushをできないようにする方法

masterブランチに直pushをできないようにする方法は様々ありますが、今回はシンプルなやり方を紹介します。

結論から言うと、gitのhooks機能を利用してmasterに直pushをできないようにします。

本題に入る前に簡単にgit hooksについて説明します。

git hooksとは

git hooksとは、gitコマンド実行前もしくは実行後をトリガーとして、任意のスクリプトを実行できるようにするための仕組みです。

色々なタイミングで任意のスクリプトを実行できます。

軽く例を挙げると、push前やcommit前などです。

詳しくは.git/hooks直下を見てみてください。

サンプルスクリプトが色々あります。

git hooksを使う

さて、本題です。

masterブランチに直pushをできないようにするには、push前にmasterブランチならpushを不可能にするスクリプトを実行すれば良いです。

直pushをできないようにしたいプロジェクトで、pre-pushファイルを作ります。

作成場所は.git/hooks/pre-pushです。

また、pre-pushのコードは以下のようにすれば良いです。

echoの内容は、わかりやすいようにサンプルにしてあります。

#!/bin/bash

while read local_ref local_sha1 remote_ref remote_sha1
do
  if [[ "${remote_ref##refs/heads/}" = "master" ]]; then
    echo "masterに直pushはしないでー"
    exit 1
  fi
done

作成したら、pre-pushに実行権限を与えます。

$ chmod a+x .git/hooks/pre-push

実行権限を与えたら、ターミナルを念の為再起動します。

検証

編集したファイルをmasterブランチに直pushしてみます。

$ git push origin master
masterに直pushはしないでー
error: failed to push some refs to 'https://github.com/hogehoge/fugafuga.git'

ちゃんと怒られて、masterブランチに直pushができないようになりました。

これで寝ぼけていても安心です👍

コメント

タイトルとURLをコピーしました