我的团队有一个问题需要解决我们案例的最佳策略。
release
创建了master
分支,以准备下一个版本。下一版本中的功能将合并到此分支中。但是,正如我所说,在最后一刻,某些功能可能会脱离版本。release
分支)。我们不确定下一版本中的功能是什么。因此,我们不能使用类似develop
分支的东西(如Git Flow中所述)。我们正在考虑从release
分支为测试团队生成版本。如果一切正常,我们正在考虑将release
分支合并到master
,在master
上放置一个版本标记(如1.0),并从{{1}生成版本使用此版本标记的分支。
master中唯一不是版本提交的提交是来自DBA团队的SQL提交。因此,master
生成的版本等于release
。
但整个团队未获批准。
他们担心我们将使用哪个分支来生成EAR。 master
分支中生成的EAR文件与测试的EAR文件不完全相同,因为它是从master
(另一个分支)生成的。
我的团队的另一个担心是有人直接(或合并一个功能)直接进入release
,并且在master上生成的版本有这个意外的提交。他们肯定会在某个时候发生。
部分恐惧发生是因为DBA承诺"混乱"主历史。 master必须只是提交版本,但我不知道如何组织DBA团队中独立于版本的SQL脚本。这些SQL脚本与下一个版本一起发布是没有意义的,因为这些脚本已经在生产数据库中执行。
目前,解决方案是从master
分支生成版本,并在生产中使用release
分支中的相同EAR。之后,release
分支将合并到release
,并将创建一个新的master
分支。 DBA SQL脚本将继续在release
中提交。
我不喜欢这种方法,因为:
master
中使用仅包含版本提交的版本标记的稳定历史记录的机会。我想为此提供一个解决方案,但我不知道如何解决有关DBA SQL脚本的问题。master
分支机构的存储库中。release
上做错事的恐惧。即使有这些顾虑,我也无法摆脱恐惧,我理解他们的恐惧。我想知道是否有人对我们的问题有任何不同的解决方案。
更新
在最初的恐惧之后,我们正在从master
分支生成版本。在master
分支上进行测试后,我们将master中的release
分支合并,并从那里生成版本。因此,所有版本标记都保留在release
分支中。
如果在master
分支中检测到某些问题,我们会删除此分支并生成一个新分支,而不会出现问题。
DBA脚本与某些特定的功能无关,它们是独立执行的,现在保存在另一个存储库中。
答案 0 :(得分:1)
首先,需要有一些非常好的流程规则才能使这些工作起作用,听起来你有一个多组件应用程序,其代码库的结构确实不便于提供。
我这样做: -master分支是真实的源代码,包含所有已完成的功能,只有构建主/架构师/任何合并/樱桃选择到此 -release_x.y是代表该版本的最终产品的分支。
在开发周期开始时,将从先前版本分支
创建发布分支每个功能团队都有自己的分支,在他们开始功能工作的任何时候都是由master创建的。功能团队中的任何人都可以查看此分支。
当一项功能完成后,相应的提交将被挑选/合并/压缩为主,并删除功能分支。
由于某个版本的功能得到确认,因此这些提交会被挑选/合并/压缩到发布分支中。构建是从发布分支完成的。
如果您对先前版本有错误修复,请使用该版本的分支进行初始修复。至少,你需要挑选变化到主人,你可能必须挑选其他功能和/或发布分支,这取决于影响分析
进行功能开发的另一种方法是在给定时间点基于master创建单独的团队回购。取决于您的偏好,我喜欢单独的可以独立分支或标记的回购(例如敏捷项目中的冲刺)。它还使各个功能团队更容易在可能存在依赖关系的情况下交换正在进行的工作。在任何一种情况下,您可能需要将master的更新带入您的团队/功能仓库,但这是可行的。
但是,您可能只有一个复杂的源代码树,其中包含大量耦合,如果删除,可能会使源代码树更易于管理