先に結論だけ
macOSのSourceTreeでpre-commitに関する問題が発生したら、SourceTreeの設定を内蔵GitからSystem Gitへ切り替えてください。
はじめに
この記事は、SourceTreeでのコミット時に、pre-commitフックが失敗する問題の記録、および対処方法を共有するためのものです。
対象とする環境
- macOS 12.6.1
- SourceTree v4.2.1 (248)
- git version 2.39.0
対象とする読者
- Gitを使っている
- SourceTreeを使っている
各ツールのインストールガイドなどは、それぞれの公式ドキュメントをご参照ください。
問題の詳細
Gitのpre-commitフックを設定し、SourceTreeからコミットすると、pre-commitフック内のnode.jsに関連するコマンドが実行できずに失敗します。
.git/hooks/pre-commit: line 2: npx: command not found
pre-commitフックを手動で製作しても、自動生成するツールを使ってもSourceTreeからコミットする場合同じ問題が発生します。
ターミナルからコミットする場合はこの問題が発生しません。また、VSCodeやWebStormなどのアプリケーションからコミットしても問題は発生しません。SourceTreeからコミットする場合のみ、この問題が発生します。
対処法
この問題は、SourceTreeがGitを内蔵しているために発生します。内蔵Gitからは外部コマンドのパスが通っていないため、フックの実行に失敗します。
Gitのインストール先を確認する
ターミナルを開き、以下のコマンドでインストール済みのgitのバージョンとインストール場所を確認します。
% git --version
git version 2.39.0
% which git
/usr/local/bin/git
SourceTreeの内蔵Gitから、System Gitに切り替える
SourceTreeの環境設定を開きます。
「Git」設定タブを開き「Gitのバージョン」内の「システムのGitを使用する」ボタンを押します。
which git
コマンドで確認したパスの通りに、ファイル選択ダイアログでgitを選択します。
Gitのインストール先は環境によって異なります。
- macOS内蔵のGitを使っている
- homebrewでインストールしたGitを使っている
- M1 macでhomebrewを使いインストールしたGitを使っている
これらの場合でGitのインストール先が異なります。必ずwhich git
コマンドでご自身が使用してるGitのインストール先を確認してください。
以上、ありがとうございました。
参考記事