2

我目前正在使用 gitolite,并且在我的 post-receive 钩子中,如果任何传入的提交在 master 上,我将推送到(本地)镜像。

问题是,镜像仅存在,因为我想在推送到 master 时自动部署和测试:我无法获取 中的索引文件work.git,所以我推送到非裸work仓库以获取工作树,并运行完全独立的接收后挂钩。

这种方法有两个问题:

  1. 感觉很笨
  2. 如果测试失败,我会收到电子邮件通知我,而不是拒绝提交。(在频率方面实际上并不是那么大的问题,我只是不喜欢它。)

处理这个问题的标准方法是什么?

4

1 回答 1

1

这并不愚蠢。裸存储库被称为裸存储是有原因的。(我认为这就是您所说的“原始”。)

要回答你真正的问题,我认为你需要退后一步,问问你真正想要做什么。你想拒绝提交吗?提交是本地的,与推送无关,因此您必须自己运行自动化测试,无论是在预提交钩子中还是手动。您要拒绝推送吗?post -receive (或 post-update) 为时已晚,但如果你真的想要,你可以在pre-receive(或更新)挂钩。我怀疑这是一个坏主意:测试需要时间,而且我不确定你是否真的想等到你的推送挂起直到测试完成。(关于拥有单独存储库的交易并不真正相关 - 挂钩运行一些命令,无论它们是否涉及另一个存储库,它们都必须在挂钩退出之前完成。)

但也许更可持续的工作流程是:推送到 pre-master 分支,让自动化测试开始,当它们完成时,自动推送到 master 分支。如果测试失败,主分支将不会更新,您可以获取您的电子邮件并查看它。

于 2012-04-07T21:05:59.903 回答