Git设置允许强制更新某些分支

时间:2014-01-14 16:57:49

标签: git githooks

在我们的git服务器上,我们有一个

的git配置
[receive]
    denyDeletes = true
    denynonfastforwards = true

这是一个非常明智的设置,因为它可以阻止重要分支上的错误强制更新。但是,有许多分支强制更新是有用的。

有一种简单的方法可以实现此功能,而不是使用此全局设置。

我认为可以通过git预接收钩子,但是我不确定如何检查推动是否是强制非快进。

我知道通过Git托管软件(如gitolite)有完整的解决方案,但我希望在一个简单的基于ssh的服务器上实现这一点。

1 个答案:

答案 0 :(得分:2)

您可以使用更新挂钩执行此操作。对于每个使用三个参数更新的引用,它被调用一次:(1)引用名称,(2)该分支的更新前提交ID(如果您正在创建分支,则为“0”* 40),以及(3)该分支的更新后commit-id(如果删除该分支,则为'0'* 40)。如果它不是创建或销毁,那么您可以运行git merge-base old-rev new-rev。如果结果与old-rev相同,则更新是快进的。否则,更新是对前一个头部没有下降的东西的强制推动。

在我的更新挂钩中,我允许对以用户名开头的分支进行强制更新,例如,狼可以强制推送wolf/*中的任何分支,但只有白名单的用户才能更新那些没有前缀的分支,例如,master

这是一个示例更新挂钩的链接,正如SourceForge中的Allura项目中所使用的那样:https://forge-allura.apache.org/p/allura/git/ci/master/tree/scripts/git-hooks/for-the-remote-repo/update update

相关问题