我们有一个中央Git仓库,开发人员可以从中获取并推送更改。他们在默认主分支上进行更改。我们的持续集成(CI)工具从这个默认的主分支构建工件,并且是负责将我们想要测试的东西推广到“UAT”分支的实体(这实际上是由构建主人单击上的按钮完成的。将进行促销的CI工具网页)。 CI工具还负责将代码从UAT提升到“生产”分支。 UAT和Production分支的目的是捕获升级到UAT和生产的内容。 UAT分支上没有开发,生产只会以不常“热修复”的形式包含“开发”,因为我们的开发/发布迭代非常快(1周迭代)。
如果我们可以轻松地做到这一点,我们想要设置一个控件,以防止有人错误地直接对UAT和Production分支进行开发更改。一种想法是在中央服务器上设置一个钩子,确保只有CI工具用户可以对UAT和Production进行更改。我们还认为我们可以拥有一个开发人员使用的中央仓库,它只包含主分支,并有第二个包含UAT和Production分支的仓库。 CI工具将与两个repos进行通信 - 它将查看开发到repo以查看何时发生更改并使用第二个repo对UAT和Production分支进行升级。
这是人们通常做的事情(为了开发和促销而分开回购?)它会比服务器钩子方法更好吗?
答案 0 :(得分:2)
为了您订阅的目的,我会说防止未经授权的提交和通过钩子合并是要走的路。您不必专门关注您正在跟踪哪个遥控器。你也可以很容易地来回合并。
答案 1 :(得分:0)
我说克隆一个git repo既便宜又易于设置。如果CI用户/构建主机能够向UAT /生产推广某些内容,为什么不将更改推送到单独的存储库?可能类似于Linux内核开发模型。每个更改都由开发人员签入,由CI用户测试,然后授权并推送(可能已签名)到发布存储库中。
即使可以将某些区域的提交限制为某些人,我也不认为使用分布式工具是这样做的。我真的很喜欢有开放的回购,并且可能使用其他专门的存储库来进行某些用途。 Git保留了所有内容,并且您不会通过推入其他存储库来丢失信息。因此,作者始终保持作者 - 只有提交者改变。
这是一篇非常好的文章,有很多信息: What git branching models actually work