VSCode の GUI からコミットしようとして pre-commit で怒られた場合の対処
概要
.husky
とかでコミット前に lint とか format とかを走らせているプロジェクトも多いと思います。そのようなプロジェクトでコミットした時に、 VSCode の GUI からコミットしようとすると以下のようなエラーが出てコミットできない状況が発生しました。ターミナルからコミットする分には問題なく実施できます。
エラーの内容的は .husky で pre-commit 時に走らせているスクリプトの中で、コマンド(今回の場合はpnpm
)が見つからないというエラーです。私の環境では node.js のバージョン管理に Volta を使用しているのですが、その兼ね合いで VSCode の GUI からコミットするときに PATH が通っていないようです。
今回はそれを解消します。
TL;DR
~/.huskyrc
を作成してそこで PATH を通します。
volta を使用している場合は以下のような記述になります。
# Volta の path を通す
export VOLTA_HOME="$HOME/.volta"
export PATH="$VOLTA_HOME/bin:$PATH"
詳細
環境
バージョン
- macOS Ventura 13.2.1
- VSCode 1.80.0
- Volta 1.0.8
> code --version
1.80.0
660393deaaa6d1996740ff4880f1bad43768c814
arm64
> volta --version
1.0.8
PATH
> which volta
/opt/homebrew/bin/volta
> which node
/Users/[UserName]/.volta/bin/node
> which pnpm
/Users/[UserName]/.volta/bin/pnpm
先行研究
この問題について調べていたら、 以下の記事を発見しました。
この記事における解決方法はソースコントロール下の pre-commit に直接 PATH を通すというものでした。これはこれで有効なのですが、ソースコントロール配下のファイルにユーザー依存の設定をコミットするのは気が引けますし、コミットしないにしても差分として表示されてしまうのでだいぶ目障りです[1]。
解決策
ふと.husky
公式のトラブルシューティングを見ていたら、同様のエラーに対する解決策が提示されていました。.huskyrc
をホームディレクトリに追加して、そこに処理を記載することで任意のコマンドを走らせることができるようです。
前述の記事で VOLTA を使用している時の解決策として紹介されている以下のスニペットを .huskyrc
に追加してみたところ、無事 GUI からコミットできるようになりました。
私は Volta を使用しているので以下の記述になりますが、他のバージョン管理ツールを使用している場合は適宜読み替えて指定すればいけると思います。
export VOLTA_HOME="$HOME/.volta"
export PATH="$VOLTA_HOME/bin:$PATH"
その後
.huskyrc
の存在を知った後に調べてみると色々と記事が見つかりました。SourceTree でも同様のエラーが発生するようでそちらの記事が散見されます。
結論
公式は偉大。読もう。
-
assume-unchanged でそのファイルだけ無視する運用も可能かもしれない。僕は一瞬それで運用してたが、
git checkout .
だかやった時に吹っ飛んだのでやめた。 既に git 管理しているファイルをあえて無視したい - Qiita ↩︎
Discussion