【Git】チェックアウト時に任意の処理を実行する

Gitでチェックアウト時にセットアップ用のコマンドを自動実行したいケースがありました。
この時、Gitフックという仕組みを使って実現することができたため、やり方について紹介します。

Gitフックとは

Gitフックは、特定のGitイベント(コミットやプッシュなど)が発生したときに自動的に実行されるスクリプトのことです。
これにより、コミット前のコードチェックや、プッシュ後のデプロイなどのカスタム処理を自動化できます。
ローカルフックとサーバーサイドフックがあり、それぞれ開発環境とリポジトリサーバー上で動作します。

設定ファイルを作成する

今回は設定内容をリポジトリにコミットし、他の人と共有できる方法を紹介します。
手順は以下の通りです。

  1. リポジトリルートに.githooksディレクトリを作成する
    $ mkdir /.githooks
  2. .githooksディレクトリ内にファイルを作成
    チェックアウト時に処理を行いたい場合はpost-checkoutというファイルを作成します
    ※対応したいイベントによってファイル名が変わります
    $ touch .githooks/post-checkout
  3. Hooksスクリプトファイルに実行権を付与します
    $ chmod +x .githooks/*
  4. 作成したファイルを編集し行いたい処理を記載する
#!/bin/bash # ※post-checkoutの例です。 # ここに実行したい処理を記載する。(以下はsampledirディレクトリを作成する例) mkdir sampledir

GitHooksファイルの参照先を変更する

設定ファイルのデフォルト参照先は.git/hooksになっているため、リポジトリ内で共有できるよう、コミット対象となる.githooksディレクトリに変更します。

  • $ git config --local core.hooksPath .githooks

設定できるイベントタイミング

チェックアウトした時の例として、post-checkoutを紹介しましたが、他にも多数イベントがあります。
そのうち代表的なものをいくつか紹介します。

  1. pre-commit
    コミットが実行される前にトリガーされます。コミット前のコード検査や、リント、自動フォーマットに有効です
  2. repare-commit-msg
    コミットメッセージが生成される前にトリガーされます。デフォルトのメッセージに対してカスタムメッセージを追加するなどに利用されます
  3. pre-push
    git push コマンドが実行される前にトリガーされます。プッシュ前にテストを実行したり、条件をチェックするのに使用されます
  4. pre-rebase
    リベースが開始される前にトリガーされます。リベースの条件をチェックしたり、設定を変更するのに使用されます
  5. post-commit
    コミットが完了した後にトリガーされます。ログの記録や通知、追加の操作を行うために使用されます

終わりに

今回はクライアントサイドのgithooksを説明しましたが、サーバサイド側に設定を行い、特定のイベントをトリガーに処理を行う(例えばリモートリポジトリに変更があったらデプロイ処理を起動するなど)を行うこともできます。

うまく設定できれば、開発者の環境構築の手間を減らすといった工夫もできるため、gitを用いた管理を行うプロジェクトでは、とても有用な手段の一つだと思います。

参考情報

コメント

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