pre-commitとは?
Gitフックの一種で特定のGit操作のタイミングでスクリプトを実行することができる機能です。
タイミング
コミットをトリガーにできる。
ディレクトリ
gitディレクトリには以下のファイルがあるので、sampleという拡張子を除去すればコミット時の動作を指定することができます。
1 |
.git/hooks/pre-commit.sample |
やりたいことをシェルスクリプトとして記述します。
デメリット
gitの管理ディレクトリにあるのでgit管理することができないことです。なのでチームメンバー内で共有することが難しくなります。
対策
設定スクリプトの中で自動的に.gitディレクトリ配下にスクリプトをコピーするスクリプトを作成する。
ユースケース
pre-commitは以下のような用途で使われることが多いです。
- masterやdevelopブランチへのコミットを禁止する。
- コンフリクト未解消のソースがあったらコミットさせない。
- linterを実行してエラーがあったらコミットさせない。
注意点
かなりの回数実行されることになるので重い処理は避けること。(ネットワークを経由させるような処理など)
インストール
1 |
brew install pre-commit |
設定ファイル生成
1 2 3 |
pre-commit sample-config > .pre-commit-config.yaml // 設定ファイルをリポジトリに読み込ませる。 pre-commit install |
試す。
これでpre-commitが動きます。
1 2 |
git add -A git commit -m "あああ" |
デフォルトでは以下のような項目が動きます。
項目 | 説明 |
trailing-whitespace | 行末の半角スペースを削除する。 |
end-of-file-fixer | ファイルがからであるか1つの改行であるかチェック |
check-yaml | ファイルが解析可能な構文であるかチェックする。 |
check-added-large-files | 巨大なファイルがコミットされないようにする。 |
Husky
JavaScriptならHuskyというパッケージを使うことでシェルスクリプトなどを書かなくてもpre-commitを簡単に実装できます。
インストール
1 2 |
yarn add --dev husky yarn husky install |
設定
1 2 3 4 5 |
{ "scripts": { "prepare": "husky install" } } |
この記事へのコメントはありません。