【发布时间】:2017-10-16 23:40:36
【问题描述】:
我有一个烦人的问题。我们将 linting 作为预提交挂钩运行。问题是它正在检查工作目录而不是实际提交。这样做有两个问题:
提交错误,但 linting 通过。
如果您在修复 linting 问题后忘记暂存更改,就会发生这种情况。提交很好,但 linting 失败。
我经常有一些我不打算提交的调试代码。对这些更改进行 linting 确实没有意义,而且处理起来很烦人。
现在,问题是我如何编写一个更智能的预提交挂钩来检查实际提交而不是工作目录,最好不更改工作目录?
【问题讨论】:
-
仅对暂存差异进行 Lint。
-
听起来很奇怪。不要构建依赖于预提交钩子的进程。它们只是为了方便,可以很容易地禁用。我们使用不同的分支来代表我们产品的主要版本,并偶尔将错误修复发布到旧分支。因为我们使用的是最新版本的 eslint,所以在基于旧版本的分支上 linting 会失败。我们只是使用
--no-verify推送到服务器,但我们的构建过程更加健壮,并确保 linting(使用正确的版本)在合并到发布分支(通过 PR)之前通过 -
@JDB Jenkins 也会在提交合并到 master 之前运行 linting,因此该过程不依赖于 pre-commit 钩子。问题是 Jenkins 通常是超载的,它可能需要很长时间才能真正运行。预提交钩子很好,因为它可以提供更快的反馈并防止 Jenkins 上不必要的负载。
-
是的,这就是为什么我们有钩子......以防止不必要的构建无论如何都会失败。您是否经常遇到这个问题,或者这更具理论性?在我看来,定期推送不反映您的工作目录的提交会导致一系列问题(想到单元测试)。
标签: git eslint lint pre-commit-hook