首先,我想
master
分行始终保持绿色。分支策略:
master
分支和一个integration
分支。master
分支。integration
以查看它是否已破坏其他任务分支的任何工作。如果是,请修复它们。将请求从任务分支(非integration
分支)拉到master
分支。
这意味着integration
分支仅用于CI目的,它永远不会合并到master
master
。这是问题所在,假设我有以下情况:
master -*-----------------
|\
integration -+-\-------C---F---
| \ / /
ken/task#1 | A---B /
| /
bob/task#2 D---------E
在F
中,会发生两件事:
C
和F
改变了同一行some-code.js
F
打破了C
的一些测试。现在,Bob必须解决这个问题,他有两个选择:
选项1
integration
合并为bob/task#2
<{1}} G
H
integration
I
绿色提取请求
integration
但是,通过这种方法,我不能只选择master -*--------------------------
|\
integration -+-\-------C---F-----------I
| \ / / \ /
ken/task#1 | A---B / \ /
| / \ /
bob/task#2 D---------E-------G---H
包含在我的下一个版本中。
由于task#2
(bob/task#2
)已包含H
中所做的更改,因此将ken/task#1
合并到bob/task#2
表示将master
合并到ken/task#1
中在一起。
选项2
master
bob/task#2
G
并运行测试以查看测试是否为绿色integration
bob/task#2
合并到I
并运行测试
...
在integration
为绿色之前。
提取请求
integration
此方法可防止将master -*-----------------
|\
integration -+-\-------C---F---H---J--- ..........
| \ / / / /
ken/task#1 | A---B / / /
| / / /
bob/task#2 D---------E---G---I--- ..............
的更改捆绑到ken/test#1
。
然而,Bob现在需要“猜测”他需要做些什么来修复bug。然后一遍又一遍地合并到bob/task#2
以查看测试是否为绿色,因为integration
和G
现在没有在I
中添加测试。
他还需要解决相同的C
合并冲突,每次将他的工作合并到some-code.js
,这是痛苦和多余的。
鲍勃有更好的选择3吗?
感谢。
答案 0 :(得分:1)
您应该考虑遵循Git流程:
https://www.atlassian.com/git/tutorials/comparing-workflows
以下是关于如何与Git流程开发模型保持一致的想法:
当预发布分支准备好进行生产时,将预发布分支合并回主分支(这将是快进合并),同时将同一分支合并到Integration中。借此机会将提交压缩为单个提交,以便您在master上拥有更清晰的提交历史记录。
合并到集成或主分支后,清理分支:合并到集成后删除dev分支;合并到master后删除预发布分支。
使用语义版本控制策略标记生产版本。创建一个官方发布分支以支持未来的修复。
当您在发布分支上发现问题时,请按照与开发新功能相同的过程来解决问题(步骤1-5)。使主分支上的修复优先于在发布分支上修复问题。一旦修复,樱桃挑选修复分支。
热修复策略不同。对于热修复,请从master的分支中应用修复,然后将修复程序选择到Integration分支。
总结一下,我建议的主要观点是:
Git Flow非常适合中型到大型项目。但我实际上更喜欢GitHub Flow用于较小的项目,特别是如果我正在为网络开发组件库。