将Git回购与已发布回购分开的良好实践?

将Git回购与已发布回购分开的良好实践?,git,Git,我们有一个中央Git repo,开发人员可以从中获取和推送更改。它们对默认主分支进行更改。我们的持续集成(CI)工具基于此默认主分支构建工件,并且是负责将我们想要测试的东西升级到“UAT”分支的实体(这实际上是由构建主控人员单击CI工具网页上的按钮来完成的,该按钮将执行升级)。CI工具还负责将代码从UAT推广到“生产”分支。UAT和生产分支机构的目的是获取推广到UAT和生产的内容。UAT分支上没有开发,生产将只包含不常见的“热修复”形式的“开发”,因为我们的开发/发布迭代非常快(1周迭代) 如果

我们有一个中央Git repo,开发人员可以从中获取和推送更改。它们对默认主分支进行更改。我们的持续集成(CI)工具基于此默认主分支构建工件,并且是负责将我们想要测试的东西升级到“UAT”分支的实体(这实际上是由构建主控人员单击CI工具网页上的按钮来完成的,该按钮将执行升级)。CI工具还负责将代码从UAT推广到“生产”分支。UAT和生产分支机构的目的是获取推广到UAT和生产的内容。UAT分支上没有开发,生产将只包含不常见的“热修复”形式的“开发”,因为我们的开发/发布迭代非常快(1周迭代)

如果我们可以很容易地做到这一点,我们希望引入一种控制,以防止有人错误地直接对UAT和生产分支进行开发更改。一个想法是在中央服务器上有一个钩子,确保只有CI工具用户可以对UAT和生产进行更改。我们还认为我们可以有一个开发人员使用的只包含主分支的中央回购,还有一个包含UAT和生产分支的第二个回购。CI工具将与两个回购协议进行沟通——它将查看回购协议的发展情况,以了解何时有变化,并使用第二个回购协议向UAT和生产分支机构进行推广


这是人们通常做的事情吗(为了开发和推广而分别进行回购?)这会比服务器钩子方法好吗?

为了订阅的目的,我想说防止通过钩子进行未经授权的提交和合并是一条路要走。您不必特别注意要跟踪的远程设备。你也可以很容易地在任何时候前后合并。

我认为克隆git回购协议既便宜又容易设置。如果CI用户/构建主机能够将某些内容升级到UAT/生产,为什么不将更改推送到单独的存储库?可能类似于linux内核开发模型。每个更改都已由开发人员签入,由CI用户测试,然后授权并推送到(可能已签名)版本存储库中

即使有可能将某些领域的提交限制在某些人身上,我也不认为这是使用分布式工具实现的方法。我真的很喜欢开放式回购,并且可能会使用其他专门的存储库进行某些用途。Git保存了所有信息,您不会因为推送其他回购协议而丢失信息。因此,作者始终是作者——只有提交者会改变

这是一篇关于它的非常好的文章,其中包含大量信息:

+1,这可以通过以下工具轻松完成