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