概要

誤ってmasterへpushする事故が発生したので、masterへのpushを禁止する方法を調べた時のメモ

やり方

git の pre-push hook を使う

  • プロジェクトリポジトリに移動する
  • ファイル .git/hooks/pre-push を作成
  • 実行権限を付与する

ファイルを以下のように編集

#!/bin/bash

while read local_ref local_sha1 remote_ref remote_sha1
do
  if [[ "${remote_ref##refs/heads/}" = "master" ]]; then
    echo "Do not push to master branch!!!"
    exit 1
  fi
done

これでこのプロジェクトはmasterにpushできなくなった

各プロジェクトに適応する

全プロジェクトに上記の作業を適応するのは手間なため、cloneした時にテンプレートがコピーされるようにしたい

下記ディレクトリにpre-pushスクリプトを配置する

~/.git_template/hooks/pre-push

.gitconfigに下記の内容を追加する

[init]
  templatedir = $HOME/.git_template

これでclone時にpre-pushスクリプトが自動で配置される

参考URL