LoginSignup
1
0

More than 5 years have passed since last update.

Git Hookについて - コミットワークフロー編

Last updated at Posted at 2018-11-11

結論

  1. git commitコマンドを実行しようとする
  2. pre-commitが実行される
  3. prepare-commit-msgが実行される
  4. コミットメッセージ入力ができるようになる
  5. commit-msgが実行される
  6. コミットが実行される
  7. post-commitが実行される

はじめに

背景

Git Hookという便利な機能があるのに使いこなせなかった新卒情弱エンジニアはGit Hookを使ってみようと思った。
思いの外いろいろなところで処理を行うことができるのでここでまとめる。Gitの用語や使い方は猿でもわかるレベルでまとめられているのでその知識があると仮定してこの記事を書く。

そもそもGit Hookとは

Gitのアクションごとにクライアントサイドやサーバサイドでスクリプトを実行することができる。その機能のこと。

この記事の目的

Git Hook未経験者がどのタイミングでフックを実行できるのか知ることができる。

事前準備

以降の内容を実際に実行するため、新規に任意名のフォルダを作成し、その中でgit initコマンドを実行する。すると任意名フォルダ/.git/hooksが生成されているはずなので確認する(.gitフォルダは隠しフォルダのためls -aで確認できる)

コミットワークフローフック

コミットワークフローフックには以下の4種類がある。

  • pre-commit
  • prepare-commit-msg
  • commit-msg
  • post-commit

echoコマンドを用いてどのようなタイミングで発生しているのか確かめてみる。
まず、git addgit commitしてメッセージを入力する際に:shしてターミナルに戻った時の出力。

スクリーンショット_2018-11-11_15_48_19.png

すでにprepare-commit-msgまで進んでいることがわかる。次に、メッセージを入力してコミットした時の出力。

スクリーンショット_2018-11-11_15_56_18.png

post-commitまで進んでいる。では、実際のコミットはどの時点で行われているのだろうか。commit-msgファイルの末尾にexit 1を追記して再度検証してみる。test.txtをステージングに追加し、コミットメッセージを入力した後、git statusで状態を確認したものがこれ。

スクリーンショット 2018-11-11 16.05.53.png

commit-msgは行なっているにも関わらず、そこで1が返された結果コミットはされていないことがわかる。
最後にcommit-msgファイルの代わりにpost-commitファイルの末尾にexit 1を追記(commit-msg内のexit 1は消去)してコミットした結果は以下。

スクリーンショット 2018-11-11 17.09.43.png

きちんとコミットされていることがわかる。よってコミットの流れと各フックのタイミングは以下。

  1. git commitコマンドを実行しようとする
  2. pre-commitが実行される
  3. prepare-commit-msgが実行される
  4. コミットメッセージ入力ができるようになる
  5. commit-msgが実行される
  6. コミットが実行される
  7. post-commitが実行される
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0