概要
過去2回にわたってGitHooksを使った事例を紹介しました。
【Git Hooks】コミット時にコミットメッセージの自動チェックを行う。【commit-msg】
【GitHooks】mainブランチへのコミットを禁止する。【pre-commit】
これらの設定は個人のローカル環境で設定するものですが、Hooksの設定をチーム内にも共有しルール化することができます。
Git Hooksとは
Git Hooksとはgitに標準で備わっている機能の一つで、git commit
やgit push
が実行された際に、スクリプトを実行することができ、そのスクリプトの実行結果によってコマンドを通すかどうかを自動的に判断させることができます。
8.3 Git のカスタマイズ - Git フック
実行されるスクリプトファイルは以下の場所に置かれています。
$ ls .git/hooks
applypatch-msg.sample post-update.sample pre-merge-commit.sample pre-receive.sample update.sample
commit-msg.sample pre-applypatch.sample pre-push.sample prepare-commit-msg.sample
fsmonitor-watchman.sample pre-commit.sample pre-rebase.sample push-to-checkout.sample
これらのファイル名は予約されていて、gitコマンドが実行されたときに任意のタイミングでそれぞれのスクリプトが動作することになっています。
デフォルトでは全てのファイルの拡張子が.sample
となっているため、どのスクリプトファイルも動作していませんが、拡張子.sample
を取り除くと、gitコマンドのそれぞれのタイミングでファイルに記述されているスクリプトが実行されます。
(シェルスクリプトの拡張子.sh
は不要です。)
実装
共有するGitHooksの作成
-
今回はリポジトリルート(.envや.gitignoreが置かれている階層です。)に.githooksディレクトリを作成します。
$ mkdir /.githooks
-
さらに概要のところで紹介したcommit-msg, pre-pushファイルを.githooksディレクトリ内に作成します。
$ touch .githooks/commit-msg; touch .githooks/pre-push
各Hooksスクリプトの内容については概要の記事をご参照ください。 -
Hooksスクリプトファイルに実行権を付与します。
$ chmod a+x .githooks/*
GitHooks参照先の変更
GitHooksの参照先デフォルトパスは.git/hooks
となっているため、このパスを先ほど作成した.githooksディレクトリに変更することで、リポジトリ内で共有されているHooksスクリプトを使えるようになります。
GitHooksの参照先を変更するコマンドはgit config
コマンドのcore.hooksPath
で変更を行うことができます。
.githooksを参照するコマンド
$ git config --local core.hooksPath .githooks
デフォルトに戻すコマンド
$ git config --local core.hooksPath .git/hooks
現在の参照先を確認するコマンド
$ git config --local --list
...(省略)
core.hookspath=.githooks
...
上記のコマンドで設定を変更することで、チーム内で共有されたHooksスクリプトを利用できるようになります。
プロジェクトに参加するメンバーは最初に上記のコマンドを実行する必要がありますが、以後はプロジェクト内で作られGit管理されているHooksスクリプトが適用されますので、Hooksスクリプト自体のメンテナンス性も上がります。
参考
【Git Hooks】コミット時にコミットメッセージの自動チェックを行う。【commit-msg】
【GitHooks】mainブランチへのコミットを禁止する。【pre-commit】
sample-codes/githooks/ - GitHub