【问题标题】:does github support precommithooks?github 支持 precommithooks 吗?
【发布时间】:2012-01-21 16:58:07
【问题描述】:

目前我们使用的是 SVN。 我想开始使用 GitHub,但一个绝对的要求是我们需要像我们目前拥有的那样对代码进行预提交(premerge)验证。 GitHub 是否支持 precommithooks(premergehooks)?

我们是一个由 5 名开发人员组成的团队。我们达成协议,所有代码(JavaScript)都应该通过类似 JSLint 的验证。自愿验证已被证明是行不通的,因为它很容易被遗忘。我们如何确保其他人可以使用的代码可以保证通过 JSLint(或类似)进行验证?

【问题讨论】:

  • 我知道这一点,我知道 git 支持 precommithooks。所以迁移到 git 不会成为问题,但除非我们可以使用 github,否则我们不会这样做。
  • git 中的 precommit 钩子将在您的机器上运行,如果它们停止提交,则没有机会将未经验证的代码推送到 github
  • 这对我来说似乎很奇怪。肯定是 github 服务器也需要进行验证,否则总有办法绕过 precommithook
  • // , 你相信你的开发者不会故意绕过 pre-commit 钩子吗?
  • 一种解决方案可能是向获取提交信息的侦听器发送一个 webhook 帖子,对其进行验证,如果它失败,则从 github 中删除提交......然后让提交者感到羞耻:D

标签: github pre-commit-hook


【解决方案1】:

我正在寻找的概念是prereceive hook

【讨论】:

    【解决方案2】:

    我不相信 github 支持 pre-commit 钩子。但是,git 核心可以。您可以在本地设置预提交挂钩,或者在将分支合并到主 github 之前将它们用作测试。

    【讨论】:

    • 对我们来说,一个要求是你不能在没有验证你的代码的情况下提交,所以不幸的是,在合并之前进行测试不是一个解决方案
    • 也许你应该离开 github。搭建一个简单的 git server 并不难,然后你就可以按照你想要的方式设置 hooks 了。
    • git 的全部意义在于让提交变得容易——事实上,提交是在你的本地机器上发生的事情;远程服务器上的任何钩子都无法阻止您在本地提交废话。也许您应该将“提交”的定义更改为“合并”?或者,如果您信任您的用户,请在每个客户端工作副本上放置一个挂钩副本。
    • 也许我确实用错了词。我有一个 SVN 的背景,这个词就是 commit。我应该寻找“pre-merge-hook”吗?
    • 在 git 中,提交发生在本地机器上,然后你“推送”到服务器。您可以将钩子应用于此推送,这是一种合并(“快进”合并)。但是,Github 不支持此特定功能。
    【解决方案3】:

    我认为你缺少一些关于 git 的基本知识。它不是一个集中式模型(好吧,它可以,但如果你要以这种方式使用它,那么 github 可能是错误的方法)。如果你使用的是 github,那么正确的做法是:

    1. 托管您的主存储库
    2. 让您的开发人员各自创建自己的分叉
    3. 让他们愉快地离开,承诺并努力满足他们的内心需求
    4. 当他们认为某个功能已准备就绪时,他们会向您(维护者)发送一个拉取请求,您自己在一边验证该请求以确保稳定性。然后你将他们的更改合并/变基到主仓库中。

    自然有很多方法可以给猫剥皮。但是当你谈论“真正的 git”(开源社区使用的那种)时,集中式的“检查它并且它该死的更好的工作”模型有点困难,尤其是当涉及到更大的项目时。

    【讨论】:

    • 我确实可能。我应该看看我完全错过的“拉取请求”原则。
    • 如果您正在进行持续部署,那么在测试失败时阻止用户推送到您部署的存储库是完全合理的。
    • @kranzky 感谢您的反对,尽管您有点错过了这个答案的全部要点。
    • @Chris 我只是做了通常的“谷歌寻找答案,点击第一个结果,意识到答案是说教的,对我没有用,使用反馈机制为其他人更新页面可能会发现自己在同一条船上”。我确实按照建议添加了评论。我错过了什么?我是否滥用了反对票?
    • 此答案中的工作流程没有内置的安全性或保证。 git 中的钩子可以提供不变量和保证。这被普遍认为是一件好事。
    【解决方案4】:

    我认为这篇文章描述了一个非常好的工作流程,可以作为自动化的基础:

    http://scottchacon.com/2011/08/31/github-flow.html

    主要思想是你使用上面提到的拉取请求,但你也可以有一个服务,可以使用 github api 获取或拉取发出请求的分支,合并,测试,验证然后推送到目标分支.

    【讨论】:

      【解决方案5】:

      不,GitHub 不支持预提交挂钩。那怎么行?提交发生在您的计算机上,您真的要允许 GitHub 在您的计算机上运行任意代码吗?

      【讨论】:

      • 只要你在本地工作就可以合并,但是当你与主存储库合并时,代码应该是经过验证的。我可以想象这可以通过 webhook 来完成。
      • // ,也许您可​​以解释一下如何使问题更容易理解?考虑到很多遇到这个问题的人都会有 SVN 的背景。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多