GUIからgitのcommit hookを動かす
自分はgitの操作をする時は基本的にCUIから行っていて、GUIツールはaddする時くらいにしか使っていないので気づかなかったが、core.hooksPath
を利用してvscodeのGUIからコミットした時に◯◯ command not found.
エラーになってしまうという相談をされたので動かす方法を調べたメモ
動作確認はすべてMacOS Sonoma 14.5で行っています
tl;dr
自分の環境だとvsocdeからはgit
のcore.hooksPath
で設定して(選択肢1のもの)特に何も設定すること無くコミット・コミットフックが動かせたため、動くのであればこれが一番良い。ただsourcetreeだとコミットフックがエラーになったためvscodeが賢いのだと思う
そのため動作しない場合は依存増えてしまうのと、jsのプロジェクトでなければNode.jsからいれる事になってしまうがhusky(選択肢3のもの)を使うのが一番簡単そう
1. 依存が増えないもの
git
のcore.hooksPath
を利用して、.githooks
などのディレクトリにフックを設定する方法
git config --local core.hooksPath .githook
これで.githooks/pre-commit
などのファイルを配置してchmod +x .githooks/pre-commit
などとして実行できるようにしておけば、git commit
時にpre-commit
フックが動いてlint-staged
などと組み合わせてフォーマットなりができる
この方法で設定してguiで動かす方法があればそれが理想だと思うが見つけられなかった。ただ自分の環境だとvscodeからなら普通にコミット可能だった
2. GUIのアプリの起動時にPATHを設定するようにする
このあたりを読むとMacOSだとlaunchctl
コマンドを利用することで、PATHを設定することができるらしい。
macOSでGUIアプリの環境変数を設定する方法探求 #launchd - Qiita
ただ再起動したりするとリセットされるのでlaunchd
としてログイン時にコマンドを実行するようにすると良いらしい
- Macの「ターミナル」でのlaunchdを使ったスクリプトの管理 - Apple サポート (日本)
- macでの定期実行はcronじゃなくてlaunchdを使う - $shibayu36->blog;
- MacOSのデーモンをマスターしよう:Launchdプロセス #MacOSX - Qiita
仕事などで使うにはgitで管理するのも難しく、launchd
を自分で管理してくださいも難易度高い気がして採用しなかった
3. huskyで実行する
自分の環境だと相談されたvscodeのgit機能からコミットしてもCommand not found
が発生しなかったため確認できていないが、sourcrtreeでコミットできなかったのがコミットできるようになったのでhuskyも調べる
動作確認用にyuzu-sandbox/commit-hook-checkも用意したので、お手元で試す際はcloneしてもらうと良い
huskyの設定をする
huskyのドキュメントを見てるとCommand not found
の時の記述があった
ドキュメントを読んだ所、以下のどちらかにinit.sh
ファイルを配置して、How To | Husky のように使用したいコマンドのパスを通すと実行できそう
$XDG_CONFIG_HOME/husky/init.sh
~/.config/husky/init.sh
自分の場合は XDG Base Directory - ArchWiki を設定しているので、$XDG_CONFIG_HOME/husky/init.sh
に以下のように記述して、husky
を利用することにした
export VOLTA_HOME="$HOME/.local/share/volta"
export PATH="$VOLTA_HOME/bin:$PATH"
node.jsの管理はVoltaを使用していて、その記述なのでhokaccha/nodebrewやnvm-sh/nvmなど他のツールを使用している人はそれに合わせて記述してください
まとめ
huskyの依存が増えたものの一応GUIでコミットフックを動かす事ができた。ただ特定のパスに$PATH
の設定を書く必要があるので地味に面倒だけど、launchd
で管理するよりはパスを通す方が簡単に思えるので、README.md
などにパスの設定して欲しいことを書いておくだけでいいことを考えるとhuskyが妥協点かもしれない
今回の動作確認で久しぶりにGUIからコミットしたけど--fixup
でどうやってコミットするのかがわからず、git add
も最近はextrawurst/gitui: Blazing 💥 fast terminal-ui for git written in rust 🦀で困ってないので、自分は大人しくteminalからコミットするかという結論になりました