优雅的解决方案,以防止强制推动主人

时间:2011-09-14 15:51:02

标签: git github git-push

我正试图找出一种防止开发人员用Git推动大师的好方法。我们使用GitHub来托管我们的远程存储库,因此pre-receive挂钩不是一个选项。是否可以轻松地为开发团队实施任何其他解决方案?

作为旁注,我一般不想禁用推力。有时它是必要的邪恶。但是说,推动大师的力量不可能发生。

6 个答案:

答案 0 :(得分:49)

更新

Github后来引入了受保护分支的概念。它可以在Settings - >下找到Branches - > Protected Branches

可以为任何分支机构以及任何用户(包括管理员)启用此“保护”。

此处有更多详情 - https://help.github.com/articles/defining-the-mergeability-of-pull-requests/

<击> 你不能在Github中阻止这种情况。

你可以做的是在你身边有一个中间回购,运行一个预接收挂钩,以防止强制推送和从这个中间回购推送到github并阻止访问直接推送到github。是的,这不优雅,你失去了Github的许多功能,但我没有看到任何其他方式。

编辑:刚刚发现了这个答案,该答案也是如此,并提供了另一种解决方法:GitHub - prevent collaborators from using push -f

答案 1 :(得分:11)

GitHub推出了一项名为&#34; Protected Branches&#34;防止推力。您可以在存储库设置&gt;中配置它。分支。

github protected branches

答案 2 :(得分:9)

我不是github专家,但如果您使用github Organizations,我相信您可以这样做。

您需要为不允许掌握的开发人员创建一个组织“Pull Only”团队。他们不会在主要仓库上工作,而是将主仓库分叉,并将其本地仓库设置为与其仓库同步。无论何时他们想将代码推送到主仓库,他们都必须将代码推送到他们的分支上并提交Pull Request代替。

在这里,您可以为开发人员创建另一个组织“推送和拉动”团队,该团队可以审核和批准拉取请求,并将它们合并到您的主仓库中。

基本上每个开发人员都只是推动他们自己的分支,没有人可以直接推送到主仓库(除了具有推/拉访问权限的团队)。为了在主回购上发生推动,它必须始终通过fork repo的拉取请求。

答案 3 :(得分:4)

[更新] Github现在提供"protected branches"功能,仅用于此目的。

Easy-peasy:安装Github“Enterprise”,然后按照以下说明操作:https://help.github.com/enterprise/2.1/admin/articles/blocking-force-pushes-to-a-repository/

免责声明:这是一个狡猾的答案。在https://github.com/contact放一条线,也许Github民众会听到我们并为群众启用此选项。

答案 4 :(得分:2)

在GitHub的情况下,可以阻止强制推送,但是不可能自行进行此更改。您必须联系支持部门(support@github.com,https://github.com/contact)对您指定的存储库进行更改。

答案 5 :(得分:0)

好吧,如果您不想更改分支保护,或者您可能在git中有一些允许推送控制的组,那么我认为最好有一个文档,说明如何将github配置为您的Team成员。他们的机器使用此命令,并告诉他们命令的用途。

假设他们已经分叉了仓库,则添加主仓库远程+不允许推送到主仓库。

git remote add upstream git@github.com:username/project.git
git remote set-url --push upstream no_push

是防止这种情况的简便好方法