我想知道创建 pre-push 钩子(在 git repo 中)的最佳方法是什么,它执行以下操作:
- 运行 JSHint / JSLint
- 运行单元和功能测试
- 如果一切正常,则接受更新
- 否则拒绝更新
您可以使用 Git 预提交挂钩来执行此操作。我已经设置了预提交挂钩来检查调试语句等。
像这样的客户端钩子属于 .git/hooks 文件夹。但是由于您无法将 .git 存储库中的任何内容提交到版本控制中,因此您有点卡住了。
然后你需要做的是将检查正确性的 shell 命令保存在你的 git repo 中的某个文件夹中,比如顶级tools
目录。
然后“只是”告诉人们通过以下方式安装它:
chmod u+x tools/precommit-checks.sh
ln -s $PWD/tools/precommit-checks.sh .git/hooks/pre-commit
并且,假设每个人都安装它,您可以按照您的要求进行检查。
可能更好的方法是抓住这个服务器端:让某种持续集成服务器从您的 Github 存储库中提取最新提交并检查代码库。
不,它不会为您提供您想要的“拒绝推送”功能。
假设你自己托管你的 git repo,还有另一个问题:我认为服务器上的 pre-receive 钩子会挂起客户端,只要钩子需要。(这被证明对于 post-receive 挂钩是正确的,所以我猜这里也是如此)。因此,如果 CI 测试需要 2 分钟,一些开发人员正在输入git push
并等待 2 分钟让他们的控制台再次执行任何操作。
因此,使用 CI 服务器或其他质量测试进行推送后分析可能会更好。