Trunk Based Development(TBD)即通常所说的主干开发。其实与其说TBD是一种分支模型,不如说是在Git诞生前受工具限制所不得不采取的开发模式。TBD模型早就已经存在,trunk为英文中树干的意思,是代码库的主要开发线,在之前的CVS和SVN时代大部分的软件研发都是这种模型,CVS中的Trunk目录的名字就是主干的意思。所以Trunk Based Development泛指在单一主干分支上协同开发的实践。在 Git 社区中这个分支通常被称为“main”,之前通常称为“master”,但由于“master”这一术语可能带来的不良联想,现在推荐使用“main”。
分支模型
-
主分支 (main)
-
功能:存放最新通过单测版本的代码。用于团队人员的协同开发
-
数量:1(常驻)
-
生命周期:初始化代码库时
-
提交:只读分支不允许提交
-
同步:不涉及
-
标记:正式版本号
-
质量:高质量要求,通过严格的测试和代码审查
-
-
特性分支 (feature/xxx)
-
功能:在大规模团队用于开发新特性或功能
-
数量:多个(短期)
-
生命周期:从main分支创建。合回main分支,不带提交历史
-
提交:允许
-
同步:根据需要从main分支同步最新代码变更(可选)
-
标记:不涉及
-
质量:包括代码审查、自动化测试、后合入者需要解决冲突并针对冲突功能进行回归
-
流程模型
基于主干的开发既是持续集成、持续交付的关键推动者,又需要在前面两个方向进行持续的投入和建设,需要团队中的个人每天多次向主干提交更改以满足持续集成的核心要求,即所有团队成员至少每 24 小时向主干提交一次,以确保代码库始终可按需发布,实现持续交付。小团队基于主干的开发和大规模基于主干的开发之间的分界线取决于团队规模和提交率考虑。开发团队不再“小”而转变为“规模化”的确切时刻存在着从业者的争论。无论如何,团队在提交/推送给其他人(或机器人)查看之前,会在其开发工作站上执行完整的“预集成”构建(编译、单元测试、集成测试)。