8

我想知道创建 pre-push 钩子(在 git repo 中)的最佳方法是什么,它执行以下操作:

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

1 回答 1

2

您可以使用 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 服务器或其他质量测试进行推送后分析可能会更好。

于 2013-09-05T02:04:36.620 回答