首页 > 解决方案 > 如何在预提交挂钩中使用 git diff 的退出代码

问题描述

我有一个带有后端和前端的项目,但是由于每次更改都会执行 git pre-commit 挂钩,因此我需要检查是否在前端进行了更改。

我尝试了这个预提交钩子:

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

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

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

husky - 预提交钩子以代码 1 退出(错误)

这并没有真正的帮助。我的猜测是 git 命令返回一个错误代码,脚本就这样结束了。

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

标签: gitshellgithookspre-commit-hookhusky

解决方案


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

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

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

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

exit 0

推荐阅读