Igo*_*any 6 git deployment branch fabric branching-and-merging
我有一个我从git存储库管理的项目.我们使用progit分支策略(如接受的答案中所述,这里:小开发团队的Git分支策略),其中一个分支是生产分支,另一个分支是开发/测试分支.我们使用fabric部署代码.
当我们准备使用git创建新的生产版本时,我们将开发/测试分支合并到生产分支中,然后使用结构部署生产分支.问题是开发和生产之间存在代码差异 - 一些徽标更改,一些不同的数据库主机/凭据等等.我一直在保存包含差异的.patch文件,并且在部署生产环境时使用结构应用补丁,但这不能很好地工作.特别是,如果补丁周围的某些代码发生了变化,它将完全失败 - 补丁无法应用,我的部署将中止.
我一直在想我是否应该直接将所有更改应用到生产分支?这有什么缺点?
我关心的一个特殊用例是我们是否需要制作修补程序.我们目前通过从生产环境分支,进行更改,然后将该分支合并回开发和生产来实现这一目标.如果生产分支与开发分支不同,那么当修补程序合并到开发中时,这些更改是否会被拉入开发分支?
你的问题基本上归结为"如何在一个分支中进行更改,然后在我合并到另一个分支时不会传播该变化?".这相当简单.在这一点上,我假设你的生产分支基本上只是一系列的合并,无论是来自dev分支,还是来自修补程序分支.所以大概git merge production从你的开发分支做一个不会做任何改变.鉴于此,请继续对生产分支进行更改.现在提交它们.现在检查开发分支并运行git merge -s ours production.这基本上意味着"从生产中合并,但拒绝所有的变化".这将创建合并提交,但实际上不会触及您的开发分支.
一旦完成此合并,您现在可以将生产分支合并到开发(或者更确切地说,合并修补程序分支),因为您的仅生产提交现在已经"合并"到开发中(尽管代码更改本身的事实是被拒绝).因此,合并您的修补程序分支将不会引入仅限生产的代码.
一旦你完成了这个,你唯一需要返回并重新应用这个技巧的方法就是你做了更多的仅限生产的改变.如果您在开发分支上进行了与仅生产更改冲突的更改,那么在将开发合并到生产中时,您可以继续并毫无问题地接受冲突的生产方.