👀

gitで「force push」を行うときに確認を出し事故を防止する

2021/11/20に公開

概要

自分が開発中に「force push」を行い面倒さいことになったのでその対策を備忘録に残す。

方法

Git Hooksを使う

Git フック
特定のアクションが発生した時にカスタムスクリプトを叩く方法
https://git-scm.com/book/ja/v2/Git-のカスタマイズ-Git-フック

Git Hooksの関連ファイルは.git配下にあります!
今回はグローバルに適用したいので、~/.git_template配下に関連ファイルなどを作成して対応します!

# ディレクトリを作成
$ mkdir -p ~/.git_template/hooks

# pushアクション時に実行するスクリプト
$ vi ~/.git_template/hooks/pre-push

# テンプレートに指定する
$ git config --global init.templatedir '~/.git_template'

実際に使っているpre-pushは下記のようになってます。

#!/bin/sh

# 入力コマンドを取得
command=$(ps -ocommand= -p $PPID)


# ここの条件は自由にカスタマイズ可能
# 自分の場合はforceオプションが含まれていたら。
if [[  $command =~ 'force|\-f' ]] ; then

  # コマンドラインに確認文を出力
  read -rp 'force pushを実行しますか? (yes/no):' input < /dev/tty
  if [ "${input}" = "yes" ]; then
    echo "do force push"
  else
    # yes 以外であればエラーを返す
    exit 1;
  fi
fi

間違っている内容やみなさんのおすすめの設定があればコメントいただけると嬉しいです!!

参考

https://git-scm.com/book/ja/v2/Git-のカスタマイズ-Git-フック
https://dev.classmethod.jp/articles/git-hook-pre-push/

Discussion