GitHub - 阻止协作者使用push -f

Ale*_*x G 33 git github git-push

有没有办法阻止强制推入分支或存储库?

我想阻止重要的分支机构无意中或故意重写其历史记录.人们如何在大型开发团队中处理这个问题?

理想情况下,在我看来,可以锁定每个存储库的几个分支,并防止除了存储库所有者之外的所有人强行推入它们.

Jör*_*tag 32

使用pre-receive钩子Git很容易做到这一点.当然,这要求你实际上能够安装钩子,并且由于显而易见的原因,GitHub不允许你上传任意可执行文件在他们的服务器上运行:-)

通常,使用Git或任何分布式版本控制系统的工作流程是您不允许其他人推送到您的存储库.相反,你从他们的.这需要更低的信任度.所以,这将是第1号解决方法:不要让它们推动,让它们分叉,然后从中拉出来.这样,您就可以控制存储库中的内容.

另一种解决方法是在您拥有的服务器上设置自己的登台存储库,您可以在其中安装自己的Git挂钩.你可以配置一个pre-receive拒绝推送的钩子,如果它不是快进和post-receive钩子,它会自动将所有推送转发给GitHub.当然,这意味着您首先失去了使用GitHub的许多好处.

作为第三种解决方法,您可以使用多个存储库.这是另外两种方法的组合:有一个协作者可以推送到的存储库,另一个只有你有权访问的存储库,你可以从第一个存储库中获取.

无论如何,您应该向GitHub提交功能请求(特别是如果您是付费客户!),因为这似乎是一个有用的功能.

  • 考虑到[设置一个Git repo以拒绝非快进]这是多么容易(http://git-scm.com/docs/git-config)(参见**receive.denyNonFastForwards**),你会我认为GitHub现在已经将它作为每个回购设置提供了. (8认同)
  • [GitHub支持:禁用推送提交](http://support.github.com/discussions/feature-requests/397-per-repository-option-to-disable-git-push-force-enable-receivedenynonfastforwards).这个要求似乎已经萎靡一段时间了.感谢关于git思维方式的澄清.具有少量可信"发布经理"的多个存储库可能是正确的方法. (2认同)

fnk*_*nkr 17

GitHub宣布了"受保护的分支机构"功能:

[...]一个名为Protected Branches的新功能,它使存储库管理员能够禁用对特定分支的强制推送.[...]转到存储库设置中的Branches选项卡并保护分支.

资料来源:https://github.com/blog/2051-protected-branches-and-required-status-checks

存储库>设置>分支