2011-02-23 26 views
32

有没有办法阻止强制推入分支或存储库?GitHub - 阻止合作者使用push -f

我想从有他们的历史改写无论是有意或无意停止重要分支。人们在大型开发团队中如何处理这个问题?

理想的情况下,在我看来,就可以锁定每个仓库几枝,防止大家,比库所有者其他从做力推放进去。

回答

32

这是很容易做到使用Git用pre-receive挂钩。当然,这需要你实际上是能够安装挂钩,原因很明显,GitHub上不允许您上传任意可执行文件到他们的服务器上:-)

一般来说,工作流程运行Git或真正的任何分布式版本控制系统,是你不允许其他人推送到你的仓库。相反,你拉他们的。这需要低得多的信任。所以,这将是解决方法1:不要让他们推,让他们叉,然后从他们拉。这样,您可以控制进入您的存储库的内容。

另一种解决办法是建立自己的分期库您有自己的服务器,在那里你可以安装自己的Git挂钩。您可以配置一个pre-receive挂钩,如果它不是快进,则会拒绝推送,而post-receive挂钩会自动将所有推送转发给GitHub。当然,这意味着你首先会失去使用GitHub的许多好处。

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

在任何情况下,你应该,因为这似乎是一个非常有用的功能文件,GitHub的(特别是如果你是一个付费客户!)功能要求。

+2

[GitHub的支持:禁用推提交](http://support.github.com/discussions/feature-requests/397-per-repository-option-对禁用-混帐推力 - 启用 - receivedenynonfastforwards)。这一要求似乎已经有一段时间了。感谢您对git思路的澄清。很少有可靠的'发布经理'的多个版本库可能是正确的做法。 – 2011-02-23 19:04:48

+8

考虑到[设置Git回购以拒绝非快速转发](http://git-scm.com/docs/git-config)(请参阅** receive.denyNonFastForwards **)是多么容易,您会认为GitHub现在会提供它作为每个回购设置。 – 2013-06-07 21:24:26