33

有没有办法防止强制推送到分支或存储库?

我想阻止重要分支的历史被意外或故意重写。人们如何在更大的开发团队中处理这个问题?

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

4

2 回答 2

32

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

一般来说,使用 Git 或任何分布式版本控制系统的工作流程是您不允许其他人推送到您的存储库。相反,你从他们那里拉出来。这需要低得多的信任。因此,这将是第 1 种解决方法:不要让他们推动,让他们分叉然后从他们身上拉出。这样,您可以控制进入存储库的内容。

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

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

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

于 2011-02-23T17:47:05.980 回答
17

GitHub 宣布了“受保护的分支”功能:

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

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

存储库 > 设置 > 分支

于 2015-06-08T07:21:37.037 回答