git - 创建预推 Hook 以进行 lint/测试

标签 git hook

我想知道创建预推钩子(Hook)(在 git 仓库中)的最佳方法是什么,它执行以下操作:

  • 运行 JSHint/JSLint
  • 运行单元和功能测试
  • 如果一切正常则接受更新
  • 否则拒绝更新

最佳答案

您可以使用 Git 预提交 Hook 来执行此操作。我已经设置了预提交 Hook 来检查调试语句等。

像这样的客户端 Hook 属于 .git/hooks 文件夹。但是由于您无法将 .git 存储库中的任何内容提交到版本控制中,您有点卡住了。

然后你需要做的是保留你的 shell 命令来检查你的 git 仓库中某个文件夹的正确性,比如顶级 tools 目录。

然后“只是”告诉人们通过以下方式安装它:

chmod u+x tools/precommit-checks.sh

ln -s $PWD/tools/precommit-checks.sh .git/hooks/pre-commit

并且,假设每个人都安装了它,您可以按照您的要求进行检查。

可能更好的方法是只捕获这个服务器端:让某种持续集成服务器从您的 Github 存储库中提取最新的提交并检查代码库。

不,它不会为您提供您想要的“拒绝推送”功能。

假设您要自己托管 git 存储库,还有另一个问题:我认为服务器上的预接收 Hook 会在 Hook 需要时挂起客户端。 (这 被记录为对于 post-recieve Hook 是正确的,所以我猜这里也是如此)。因此,如果 CI 测试需要 2 分钟,一些开发人员正在键入 git push 并等待 2 分钟让他们的控制台再次执行任何操作。

因此,使用 CI 服务器或其他质量测试进行推送后分析可能更好。

关于git - 创建预推 Hook 以进行 lint/测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18617472/

相关文章:

c++ - winapi - 获取和/或更改我的钩子(Hook)的顺序和优先级

windows - 为什么 Windows Hook 不会收到某些消息?

git - 有没有办法从git下载一个子目录?

WordPress Hook 在发送之前修改电子邮件正文

git - 服务器端 .git/hooks 文件夹的位置

git - 我可以告诉 git pull 覆盖而不是 merge 吗?

WordPress 基本路径 Hook ?

java - 是否可以 Hook 线程创建?

java - 通过 bash 和 Java 的 ProcessBuilder api 运行相同的命令会得到不同的输出

git - github网站是如何工作的(架构)?