如何在预提交挂钩中使用 git diff 的退出代码

How to use exit code of git diff in pre-commit hook

我有一个包含后端和前端的项目,但是由于 git 预提交挂钩会针对每个更改执行,我需要检查是否在前端进行了更改。

我试过这个预提交挂钩:

#!/bin/sh
. "$(dirname "[=11=]")/_/husky.sh"

git diff --cached --name-only --quiet frontend
if [ $? -eq 1 ]; then
  cd frontend && npm run lint
fi

但由于某些原因,当 运行 git 命令时它失败了——这在我的终端上运行良好。我得到的错误是:

husky - pre-commit hook exited with code 1 (error)

这并没有什么帮助。我的猜测是 git 命令 returns 一个错误代码,脚本因此结束。

知道如何解决这个问题吗?

shell 脚本总是以最后执行的命令的退出代码或以 exit 内置命令指定的代码退出。

如果您需要脚本始终以特定的退出代码退出(例如始终成功,0),请确保您明确指定退出代码:

#!/bin/sh
. "$(dirname "[=10=]")/_/husky.sh"

git diff --cached --name-only --quiet frontend
if [ $? -eq 1 ]; then
  cd frontend && npm run lint
fi

exit 0