【发布时间】:2011-07-02 22:41:20
【问题描述】:
有没有办法防止强制推送到分支或存储库?
我想阻止重要分支的历史记录被意外或故意重写。在大型开发团队中,人们如何处理这个问题?
在我看来,理想情况下,可以锁定每个存储库的几个分支,并防止除存储库所有者之外的所有人强制推送到它们。
【问题讨论】:
有没有办法防止强制推送到分支或存储库?
我想阻止重要分支的历史记录被意外或故意重写。在大型开发团队中,人们如何处理这个问题?
在我看来,理想情况下,可以锁定每个存储库的几个分支,并防止除存储库所有者之外的所有人强制推送到它们。
【问题讨论】:
使用带有pre-receive 钩子的 Git 很容易做到这一点。当然,这要求您实际上能够安装钩子,并且出于显而易见的原因,GitHub 不允许您上传任意可执行文件以在其服务器上运行:-)
一般来说,使用 Git 或任何分布式版本控制系统的工作流程是您不允许其他人推送到您的存储库。相反,你从他们那里拉出来。这需要低得多的信任。因此,这将是第 1 种解决方法:不要让他们推动,让他们分叉然后从他们身上拉出。这样,您就可以控制进入您的存储库的内容。
另一种解决方法是在您拥有的服务器上设置自己的暂存存储库,您可以在其中安装自己的 Git 挂钩。您可以配置一个 pre-receive 钩子,如果它不是快进,则拒绝推送,以及 post-receive 钩子,它会自动将所有推送转发到 GitHub。当然,这意味着您首先会失去使用 GitHub 的许多好处。
作为第三种解决方法,您可以使用多个存储库。这是其他两种方法的组合:拥有一个您的协作者可以推送到的存储库和另一个只有您有权访问的存储库,您可以从第一个存储库中拉入。
无论如何,您都应该向 GitHub 提交功能请求(尤其是如果您是付费客户!),因为这似乎是一个有用的功能。
【讨论】:
GitHub 公布了“受保护的分支”功能:
[...] 一个名为 Protected Branches 的新功能使存储库管理员能够禁用强制推送到特定分支。 [...] 转到存储库设置中的“分支”选项卡并保护分支。
来源:https://github.com/blog/2051-protected-branches-and-required-status-checks
【讨论】: