Git工作流程+预生产

5
需要一些关于分支和工作流的组织方面的帮助。
前提条件:10名使用git的开发人员,0单元测试覆盖率,10^5行代码。
我们的存储库中有作为生产环境的master分支。 每个功能都在不同的分支上开发,这也会创建一个新域(branch.qa.com)。
当完成后,QA团队会在branch.qa.com上查看更改,然后将其合并到master并自动推送到生产服务器。
问题是: 分支A可能具有css更改。 它被上传到A.qa.com并进行检查。 同时,开发人员从主分支B分叉,并在其上工作,修改相同的CSS。
这两个更改似乎对他们的分支来说都是合法的,但是可能会发生变化B实际上破坏了A上的某些内容。
将A合并到master将没问题。 然后将B合并到master将对A所做的更改产生不良影响。
如何排除这种情况? 如何引入预生产环境?

最近转换到了git rebase工作流,在工作中似乎表现良好,因为它确保主分支只会快进,值得一试。 - Nathan Kot
出于好奇,你是如何管理“每个功能都在不同的分支上开发,这也会创建一个新的域”? - kursus
1
@kursus,虽然这是一段时间以前的事情了,但在git服务器上有一个钩子,在提交时会运行一个脚本,如果之前没有添加,则在nginx配置中添加一个虚拟主机,将代码拉到某个地方并将服务器指向它。 - Alex
2个回答

5
如果您遵循git-flow工作流程,您需要有一个单独的develop分支,在其中所有新功能都是从中派生并在完成后合并回来的。然后,您需要从develop分支创建临时的release分支,对其进行测试(必要时进行修补),然后将其合并到您的master/production分支中。
因此,develop分支实际上最终成为一种预生产分支。如果在将功能合并回develop之前让QA部门处理检查,并且在所有过渡到releasemaster之前进行检查,那么我想您最终会得到您当前部门结构所需的结果。
这里有图示:http://nvie.com/posts/a-successful-git-branching-model/ 另外,我们目前正在实施git-flow,结合通过gerrit进行代码审查,这将为我们提供一个处理所有这些内容的平台。尽管在我们的情况下,开发人员和QA团队是同一批人(但是具有带有自动化测试的Jenkins CI服务器)。

谢谢回复。您如何建议将更改从“develop”移动到“master”?QA已经完成了对“branch.qa.com”的检查,然后去找开发人员要求将其合并到“develop”中。然后他们在“develop.qa.com”上进行另一个qa周期。当他们确认后,再次打扰开发人员将“develop”合并到“master”中。 难以自动化 - Alex
我可以想象使用Gerrit来允许QA在将功能合并到“develop”之前进行审核和验证,然后在将“release”分支合并到“master”之前进行最终测试。这应该至少在一定程度上自动化了该过程。 - sonicwave

1
你可以查看这个链接 http://nxvl.blogspot.com/2012/07/a-continous-delivery-git-branching-model.html
我认为在你们的组织中,“develop”分支缺失。
预生产阶段可以使用“develop”分支,生产阶段可以使用“master”分支。
由于可能存在分支之间的冲突(这里的冲突不仅仅是“git冲突”,还包括算法冲突),你不能直接将内容合并到“master”分支中,需要进行进一步的测试。

是的,那正是我的问题。所以您建议进行两个QA会话。第一个会话是在单独的独立功能分支上进行,第二个会话是在合并后的develop分支上进行? - Alex
需要进行两个QA会议。第一个是针对您的分支,以确保一切都“正常”,第二个是在“develop”分支中合并所有内容后,以确保您的分支之间没有任何交互。 - X-Blaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接