在git服务器上,我们的git配置为
[receive]
denyDeletes = true
denynonfastforwards = true这是一个非常明智的设置,因为它阻止了对重要分支的错误的强制更新。然而,有许多分支,这将是有用的强制更新。
与其拥有这个全局设置,还有一个实现此功能的简单方法。
我假设这可能是通过一个git预接收钩,但我不确定我将如何检查推是否是一个被迫的不快速前进。
我知道有一些完整的解决方案可以通过Git托管软件(如gitolite )实现,但我希望在一个简单的ssh服务器上实现这一点。
发布于 2014-01-14 17:36:30
您可以使用更新钩子来完成此操作。对每个被更新的引用都调用一次,包括三个参数:(1)参考名称;(2)该分支的预更新提交-id(如果创建分支,则为'0'*40 );(3)该分支的更新后提交-id(如果要删除该分支,则为'0'*40 )。如果它不是一个创建或销毁,那么您可以运行git merge-base old-rev new-rev。如果结果与旧-rev相同,则更新为快速转发。否则,更新是一个力量推动的东西,而不是从前一个头。
在我的更新钩子中,我允许以用户名开头的分支强制更新,例如,狼可以强制推送wolf/*中的任何分支,但是只有用户的白名单才能在没有前缀的情况下更新这些分支,例如master。
这里有一个指向这样做的示例更新钩子的链接,就像在SourceForge:https://forge-allura.apache.org/p/allura/git/ci/master/tree/scripts/git-hooks/for-the-remote-repo/update更新的Allura项目中使用的那样
https://stackoverflow.com/questions/21119293
复制相似问题