如何防止 git commit --no-verify 命令?

alb*_*ert 9 git github gitlab

我想为所有 git repos 设置一个预提交钩子,以使用 jshint 和 phplint 验证语法错误。但问题是 git 有一个功能,可以通过使用 --no-verify 标志跳过预提交钩子的发生。但我不需要使用那个选项。我可以阻止 git 的 --no-verify 标志吗?请提出一种方法。

can*_*ndu 16

首先:您无法明确阻止某人通过该--no-verify选项。也就是说,使用pre-commit钩子进行 linting 是一个好习惯,并且避免--no-verify无故传递选项是一个好习惯。

但是,如果您想让传递--no-verify选项变得更麻烦,您可以:

  1. 生成验证令牌并将其附加到提交消息中pre-commit
  2. pre-receive如果此令牌丢失或无效,则以非零退出代码退出。(你可以在 pre-receive hooks 中做的事情的例子:https : //github.com/github/platform-samples/tree/master/pre-receive-hooks

决定避免通过的人--no-verify可以手动执行第 1 步,这就是为什么这不是 100% 有效的原因。我不建议在专业环境中设置它,但我完全支持人们使用他们可以使用的工具为自己灌输良好的习惯,同时更多地了解 git hooks。

  • “除非你运行我的中间件,否则你不应该保存你的代码”多好的主意 (10认同)
  • 这是对一个永远不应该解决的问题的极好的答案。 (9认同)
  • @timotgl 好吧,当然;你所能做的就是让它任意烦人地避开钩子。不过,这是一个很好的观点,我已经编辑了我的答案以使其更清楚。FWIW,我同意我们不应该对开发人员进行监管,但*强烈*不同意 linting 应该留在合并/CI 之前,尤其是在团队合作时。代码风格指南尽可能接近代码编辑——或者,更好的是,使用 Prettier 之类的工具自动化——耗时更少,更有用,因此更有可能受到尊重。 (2认同)