是否有可能在一个简单的git仓库中获得一棵工作树?

时间:2012-04-07 20:31:41

标签: git

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

事情是,只有镜像才存在,因为我想自动部署&测试推送到掌握:我无法获取work.git中的索引文件,因此我推送到非裸work仓库以获取工作树,并运行完全独立的后期收到钩子。

这种方法有两个问题:

  1. 感到愚蠢
  2. 如果测试失败,我会收到通知我的电子邮件,而不是拒绝提交。 (实际上并不是频率方面的问题,我只是不喜欢它。)
  3. 处理这个问题的标准方法是什么?

1 个答案:

答案 0 :(得分:1)

这不是愚蠢的。由于某种原因,裸存储库被称为裸存储库。 (我认为这就是你所说的“原始”。)

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

但也许更可持续的工作流程是:推送到预主分支,让自动化测试进行,当他们完成时,自动推送到主分支。如果测试失败,主分支将不会更新,您可以收到您的电子邮件并进行检查。