【发布时间】:2021-12-05 11:15:38
【问题描述】:
我有一个带有后端和前端的项目,但是由于每次更改都会执行 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 - pre-commit 钩子以代码 1 退出(错误)
这并没有真正的帮助。我的猜测是 git 命令返回一个错误代码,脚本就这样结束了。
知道如何解决这个问题吗?
【问题讨论】:
-
git diff将在有更改时返回 1。[也将有一个退出代码(它需要,否则if无法检查退出代码)。你总是想用代码 0 退出你的脚本吗?如果是这样,true作为最后一个命令可能会有所帮助。 -
@knittl 感谢您的回答,但您能提示一下您的意思吗?我对shell脚本一无所知。我要做的就是运行 git diff 并检查其返回值是否为 1。如果是,请运行 lint 命令。但是如何防止 git 将其返回到 shell 并保存以进行比较?
-
如果您需要脚本始终成功退出,
true作为最后一个命令可能会这样做。 (我已经在我的第一条评论中写过这个;))。说明:true总是成功退出。 shell 脚本退出时使用与最后执行的命令相同的代码(或使用exit指定的代码)。所以实际上,exit 0可能比true更明确:) -
我的问题是我不知道语法。我不知道在哪里把“真实”放在哪里。
标签: git shell githooks pre-commit-hook husky