はじめに
Visual Studio 2022内のgit機能において、
git hooksを使ってpush時にスクリプトを実行させようとしたところ、
エラーが発生して、他の記事とは逆の事象が起こっていたのでまとめます。
実行環境
Visual Stuido 2022
git 2.43.0.windows.1
問題
以下の記事を参考にgit hooksを利用した特定ブランチへのpush禁止設定を行いました。
しかし作成したpre-pushを格納してpushを行ったところ、下記エラーが発生
error: cannot spawn. git/hooks/pre-commit: #!/bin/bash
解決方法
結論
先に結論を申しますと、
pre-pushファイルの1行目を以下のように修正することで解決しました。
#!/bin/bash
→ #!/bin/sh
この1行目の意味
(#!) は、シバン(Shebang)と呼び、スクリプトの1行目に記載される特殊な文字列で、
スクリプトを実行する際にどのプログラムを使うかを指定します。
今回の例で行くと、#!/bin/bash
は Bash シェルを使って実行され#!/bin/sh
は POSIX準拠のシェル(ほとんどの場合は /bin/sh)を使用してスクリプトが実行されます。
/bin/sh はほぼすべてのUnix系システムに存在し、POSIX標準に準拠した非常に汎用的なものらしいです。
根本原因
Visual Studioのインストール時にGit for windowsがインストールされており、基本的にはbashとshの両方が実行できるようぇすが、恐らく、自環境において何かしらの理由でBashが正しく設定されておらず、実行できなかったのが問題だったと思われます。
今回のような簡単なスクリプトであればPOSIX標準のシェルで問題ないそうなので、今回はこちらの解決策を取りました。
おわりに
些細なエラーですが、馴染みのない分野の知識を少し齧ることが出来たので、
結果的に良かったかもしれないです。
参考