Github是否允许使用pre-receive hooks?

45

Github是否允许使用pre-receive或update hooks?

我想要实现的是防止主分支(如master、hotfix和develop)被推送,而要求通过GitHub拉取请求进行合并。由于这是一个私有仓库,因此GitHub风格的分叉不是一个选项。

如何实现这一点的任何建议都将非常有帮助。


4
请注意,GH允许用户fork私有仓库使其保持私有。据我所知,对于fork的数量有一定限制。请查阅您的付费计划信息。 - Alexander Gladysh
3个回答

19
只有你列为“协作者”的人才能将代码推送到Github托管的仓库中。请查看该仓库的“管理员”页面以添加协作者。其他所有人都需要提交“拉取请求”来获得仓库管理员接受他们的修改。请参阅Github 访问权限。(没有分支级别的访问权限。)因此,为了实现您的目标,您不需要挂钩;所需的功能已经内置。
两个注意事项: 1.私有 Github 仓库可以有多个贡献者。 2.Github 支持 pre-receive hooks(或任何其他服务器挂钩)是不寻常的,因为挂钩包含任意代码。

3
太好了,但这是一个有合作者的私有代码库,预接收钩子是Git核心功能,我想知道GitHub是否有实现它们的方法。 - Jason Waldrip
查看编辑 - 服务器钩子在服务器上运行任意代码;无法想象Github会允许这样做。 - GoZoner
虽然 GitHub 似乎不允许 pre-receive 钩子,但它确实允许 post-receive 钩子:https://help.github.com/articles/post-receive-hooks - Alexander Gladysh
1
@AlexanderGladysh 这个钩子将简单地向指定的URL POST一个JSON,它仍然不允许任意代码。实际上,您唯一可以指定的是URL,而不是钩子本身。 - Shagglez

16

虽然 GitHub 本身不允许使用 pre-receive 钩子,但是 GitHub Enterprise 版本 2.6 包括了 pre-receive hook 支持。有关此内容的更多信息可以在此处找到:https://help.github.com/enterprise/admin/guides/developer-workflow/using-pre-receive-hooks-to-enforce-policy/。这些是实例范围内的 pre-receive 钩子,以防止将任何信息推送到任何存储库中。

我要做的是防止主要分支被推送(即 master、hotfix、develop),并要求它们通过 GitHub pull request 进行合并。

但是,迄今为止,您可以配置 GitHub 或 GitHub Enterprise 存储库来保护分支。这样做可以防止分支被删除或强制推送,只有特定人员或团队可以合并,或需要状态检查才能进行合并。请参见https://help.github.com/articles/about-protected-branches/了解更多信息!


7
如果你正在与信任的团队合作(我假设你是因为这是一个私有仓库),并且你想要实现这一点只是为了防止人们出于纯粹的习惯性行为而不小心违反你的标准操作程序,那么最好的方法就是分发一个自定义的pre-push钩子脚本供每个人安装到他们的.git/hooks目录中。(我最近做了类似的事情,坚持让每个人运行git config branch.autosetuprebase always,这会隐式地将git pull更改为git pull --rebase,以消除本地未推送提交存在时不必要的合并。)
如果由于某种原因这样做行不通,我发现在事后威胁失去提交者权限通常是保持人们诚实的有效机制。

一旦人们从Github UI合并PR,这种方法就不起作用了。在大型团队中,这是非常普遍的情况。 - JAR.JAR.beans
当我发表评论时,情况不是这样的,但现在已经变了。感谢你指出来,因为这无疑降低了它的实用性。 - Jay Allen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接