我可以禁用某些分支的强制推送吗?

时间:2015-02-17 18:58:14

标签: git

我很想知道是否可以为所有开发人员使用的某些主分支禁用force pushing(例如:devmaster)。开发人员可以强行推动他们的私人分支机构。

1 个答案:

答案 0 :(得分:3)

是的,如果您有权访问托管您正在推送的仓库的服务器(请记住,您可以在技术上推送到任何地方;由于Git的分布式特性,无法普遍禁用推送。)

在您要拒绝推送的仓库中,您只需从预推钩中返回0。有关预推钩的示例,请参阅Git安装提供的示例:

https://github.com/git/git/blob/master/templates/hooks--pre-push.sample

另一种技术是要求您的用户使用强制执行本地策略的自定义包装器;实际上有很多推荐这种技术,因为它允许您以更灵活的方式实施其他本地策略。当然,缺点是它很容易绕过。

您采取的方法当然取决于您的要求。如果你试图防止潜在的滥用(故意破坏或未经授权的使用),包装将不会有任何好处。然而,大多数人不在那个位置(通常是授权用户是可信的),并且包装器是一种有吸引力的替代方案。我们使用本地包装器限制的事物的一个示例是将大图像或视频添加到Web存储库:我们为这些存储器提供了CDN复制机制。但是很容易忘记,并添加一个图像用于测试目的,不久之后,repos变得庞大而笨重。

作为一个写过(并从中获得价值)Git包装的人,我的建议是不要试图“改进”Git界面。大多数用户都希望像往常一样使用Git(不是Git的一些“风味”)。为此,包装器通常只提供额外的限制,禁止某些类型的提交,推送等。但是接口与常规Git接口保持不变。