避免在主分支上进行强制推送的优雅解决方案

56

我正在寻找一种好的方法来防止开发人员使用Git强制推送主分支。我们使用GitHub托管远程存储库,所以pre-receive钩子不是一个选项。还有其他解决方案可以轻松地为开发团队实施吗?

顺便说一下,我不想完全禁用强制推送。有时它是必要的恶。但是,不能在主分支上进行强制推送。


2
相关问题:github - 防止协作者使用 push -f - user456814
2
可以通过联系GitHub支持来禁用整个仓库的强制推送。 - Keith Smiley
7个回答

72

更新

Github引入了受保护分支的概念。它可以在“设置”→“分支”→“受保护分支”下找到。

这种“保护”可以为任何分支启用,并适用于任何用户,包括管理员。

更多详细信息请参见此处 - https://help.github.com/articles/defining-the-mergeability-of-pull-requests/

您无法在Github中防止这种情况发生。

您可以在本地建立一个中间仓库,在其中运行预接收挂钩以防止强制推送,并从此中间仓库向Github推送并阻止直接向Github推送的访问。是的,这并不优雅,并且您会失去许多Github的功能,但我没有看到其他方法。

编辑:刚刚看到这个答案,它说了同样的话并给出了另一种解决方法:GitHub-防止合作者使用push -f


2
GitHub企业版可以实现此功能:https://enterprise.github.com/help/articles/blocking-force-pushes-for-a-user-account - Vladislav Rastrusny
2
Github最近添加了一个功能!(https://github.com/blog/2051-protected-branches-and-required-status-checks) - Jostein
一旦分支被这样保护,管理员如何强制推送内容? - Vadorequest
2
目前,“受保护的分支”仅适用于专业版、团队版和企业版用户。 - Lukasz Dynowski
我需要回答的跟进问题是:如何防止对GitHub Wiki存储库进行强制推送? - Gabriel Staples
显示剩余2条评论

14

GitHub推出了名为“Protected Branches”的新功能,以防止强制推送。 您可以在 仓库设置 > 分支 中进行配置。

github protected branches


9
我并不是Github的专家,但我相信如果你使用Github 组织,你可以实现这个目标。
你需要为那些不被允许推送到主分支的开发人员创建一个“只拉取”的团队。他们无需在主repo上工作,而是应当fork你的主repo,并将本地repo与其fork repo同步。任何时候,他们想要将代码推送到主repo,都必须先将代码推送到自己的fork repo上,并提交pull request
这就是你需要为具有审查和批准pull request权限的开发人员创建另一个“推送和拉取”的团队的地方。这个团队可以审核和批准pull request,并将它们合并到你的主repo中。
基本上,每个开发人员都只能向自己的fork repo推送,除了拥有Push/Pull权限的团队,没有人能够直接向主repo推送。对于主repo的任何推送,都必须通过fork repo上的pull request来完成。

5

您的链接:“已移至https://enterprise.github.com/help/articles/disable-force-pushes”。https://enterprise.github.com/help/articles/disable-force-pushes: “糟糕,看起来该页面不存在。” - Ben Regenspan

2

对于GitHub而言,可以阻止强制推送,但你自己无法进行更改。你需要联系支持团队(support@github.com, https://github.com/contact)来在指定的存储库上进行更改。


1
如果您不想更改分支保护,或者您可能有一些允许推送到主分支的git组,我认为最好提供有关如何使用此命令在团队成员的机器上配置github的文档,并告诉他们命令的目的。假设他们已经fork了存储库,请添加主存储库远程+禁止推送到主分支。
git remote add upstream git@github.com:username/project.git
git remote set-url --push upstream no_push

"

是一种简单而好的方式来防止它

"

0

让我用最简单的方式定义这些步骤:

  1. 进入您的存储库并单击设置

enter image description here

  1. 接下来,进入分支部分,点击添加按钮:

enter image description here

  • 好的,很好,我们现在进入了最后一步。您需要执行以下操作:

    • 将分支名称填写为master
      注意:在这里,您可以设置任何要保护的分支名称。例如,如果您想保护develop分支,请写develop
    • 勾选两个选项“锁定分支”和“不允许绕过上述设置”。
  • enter image description here

    1. 现在进行测试:
    git push origin main --force
    

    你应该得到以下消息 ➪

    enter image description here


    请查看官方文档此处,了解有关分支保护策略的更多信息。


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