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

时间:2011-02-23 17:30:10

标签: git github git-push

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

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

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

2 个答案:

答案 0 :(得分:32)

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

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

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

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

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

答案 1 :(得分:17)

GitHub宣布"受保护的分支机构"特征:

  

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

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

Repository > Settings > Branches