41

GitHub 是否允许预接收或更新挂钩?

我想做的是防止主要分支被推送到(即主分支、修补程序、开发),并要求它们通过 GitHub 拉取请求合并。这是一个私人仓库,所以 GitHub 风格的分叉不是一个选项。

任何关于如何实现这一点的建议都会有很大帮助。

4

3 回答 3

18

只有您列出“合作者”的人才能推送到 Github 托管的存储库。请参阅存储库的“管理”页面以添加协作者。其他所有人都需要提交“拉取请求”以使存储库管理员接受他们的添加。请参阅Github 访问权限。(没有每个分支的访问权限。)因此,为了实现您的目标,您不需要钩子;你需要的东西已经内置了。

两个注意事项:

  1. 私有 Github 存储库可以有多个贡献者
  2. 鉴于挂钩包含任意代码,Github 支持预接收挂钩(或任何其他服务器挂钩)是不寻常的。
于 2012-06-02T19:51:34.663 回答
14

尽管 GitHub 本身不允许预接收挂钩,但 GitHub Enterprise 2.6 版确实包含预接收挂钩支持。关于它的更多信息可以在这里找到:https ://help.github.com/enterprise/admin/guides/developer-workflow/using-pre-receive-hooks-to-enforce-policy/ 。这些是实例范围的预接收挂钩,可防止将任何信息推送到任何存储库中。

我想做的是防止主要分支被推送到(即主分支、修补程序、开发),并要求它们通过 GitHub 拉取请求合并。

但是,到目前为止,您可以使用受保护的分支配置 GitHub 或 GitHub Enterprise 存储库。这样做是为了防止分支被删除、强制推送、只有某些人或团队可以合并,或者在允许合并之前需要通过状态检查。请参阅https://help.github.com/articles/about-protected-branches/了解更多信息!

于 2016-04-27T17:06:08.747 回答
6

如果你正在与一个值得信赖的团队合作(我假设你是这样,因为它是一个私人仓库)并且你想实现这个只是为了防止人们出于纯粹的习惯而意外违反你的标准操作程序,最好的办法是分发pre-push每个人都可以安装到他们的.git/hooks目录中的自定义钩子脚本。(我最近做了类似的事情,坚持让每个人都运行git config branch.autosetuprebase always隐式更改git pullgit pull --rebase在存在本地未推送提交时消除不必要的合并)

如果由于某种原因不起作用,我发现事后失去提交者权利的威胁通常是保持人们诚实的有效机制。

于 2015-12-05T14:38:09.537 回答