概要
件名のとおりですが、husky の pre-push が stdin is not a tty で git push に失敗します。使用しているのは Git Bash です。
環境
- Windows 10 Pro
- git version 2.37.1.windows.1
- yarn v1.22.15
- husky v8.0.1
再現環境
最小構成として以下で再現します。ちなみに yarn run foo
ではなく npm run foo
だと問題なく動きますので、どうも Yarn について回っている問題のようです。
package.json
{
"devDependencies": {
"husky": "^8.0.0"
},
"scripts": {
"foo": "echo foo"
}
}
.husky/pre-push
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
yarn run foo
対処
Yarn の問題らしいです。
husky公式リポジトリのIssueにhuskyを作ったtypicodeさんより対処方法がコメントされていました。
https://github.com/typicode/husky/issues/850#issuecomment-774231951
これを丸パクリして解決しました。圧倒的感謝っ・・・!
.husky/common.sh
command_exists () {
command -v "$1" >/dev/null 2>&1
}
# Windows 10, Git Bash and Yarn workaround
if command_exists winpty && test -t 1; then
exec < /dev/tty
fi
.husky/pre-push
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
. "$(dirname "$0")/common.sh"
yarn run foo
余談
これ、検索しても最近の例はあまりないのでなんか僕の環境の問題だったりするんですかね、もしかして。少しもやっとしますが、とりあえず直ったのでよしとします。