git hookでcommit時にtypoを自動検知
概要
git hookでcommit時にtypoを確認し、typoが確認された場合commitを中止する機能を実装する。
動作環境
- Windows 10 Home
- git 2.32.0
- typos-cli 1.5.0
git hookとは?
git hookはgitのバージョン管理システム内でgit特有のアクションが発生した際に、予め作成していたスクリプトを実行できる機能です。
例えば、commitやpush時に特定の条件を満たしていない場合はcommitやpushを中止するなどが挙げられます。
これはデフォルトで、git initをした際に作成される.gitに対して.git/hooksの中に作成されます。
typoを検知するためtyposの準備
typoを検知するためにRust製のtyposを使用します。
https://github.com/crate-ci/typos/releasesからv1.5.0のWindows版のzipをダウンロードして展開し、typos.exeを切り取ってC:\Windowsに貼り付けます。powershellから以下のコマンドを実行することでtyposのバージョンが表示されていればtyposの設定は完了です。
typos --version
commit時に自動でtypoを検出する
workディレクトリを作成しその中でgitにようるバージョン管理を開始する。
mkdir work
cd work
git init
gitリポジトリを作成後、.git内のhooksディレクトリに移動しpre-commitファイルを作成する。
cd .git/hooks
touch pre-cmmit
pre-commitファイルの内容を以下通りに変更する。
#!/bin/sh
# 変更差分をチェックしたい場合
# git diff --cached --diff-filter=AM | typos -
# 変更ファイルをチェックしたい場合
git diff --cached --name-only --diff-filter=AM | xargs typos
# typoがある場合にコミットを防ぐ
if [[ $? -ne 0 ]]; then
exit 1
fi
ここまで出来たらディレクトリをworkに戻してcommitを実行し、typoが検知されるかを確認する。
今回はwork内でsample.txtを以下の内容で作成し、commitを実行する。
anounce
適切にsample.txt内のanounceのtypoを検知しcommitを中断することができた。
typoが検知されない場合の対処法1
pre-commitファイルの実行権限を確認してみる。
ls -l
もし、実行権限がない場合は実行権限を付与する。
chmod +x pre-commit
typoが検知されない場合の対処法2
エラーメッセージにfatal: cannot run pre-commitと表示されている場合、以下のコマンドを実行する。
git config --get core.hooksPath
このとき .git/hooks が出力されない場合は以下を実行する。
git config --global core.hooksPath ".git/hooks"
実行後、以下のコマンドでgitの設定情報を確認し core.hooksPath=.git/hooksの記載があることを確認する。
参考記事
Discussion