引言
在深入探讨使用 Git 的传统发布流程之前,了解一些关键概念至关重要。这些概念包括主分支、发布分支、功能分支、拉取请求等。本文将详细介绍这些概念,并通过 NextGen Networks 公司的实际案例来展示如何在传统模型中应用这些概念。
正文
1. 关键概念
1.1 Master/Main Branch(主分支)
主分支包含交付给用户的生产就绪版本代码。它是所有其他分支的基础,确保最终发布的代码是稳定且经过充分测试的。
1.2 Release Branch(发布分支)
发布分支从主分支分出,用于整合各个功能分支上的修改。当所有开发者在发布分支上集成他们的贡献后,发布分支会被合并到主分支并部署到生产环境。发布分支通常只有一个,而每个特定功能可能有多个功能分支。
1.3 Feature Branch(功能分支)
功能分支从发布分支生成,专门用于开发特定功能的修改。一旦开发者完成修改,功能分支会被合并到发布分支。例如,如果团队正在开发一个新的用户界面功能,他们可能会创建一个名为 feature/UI-update
的功能分支。
1.4 Pull Request(拉取请求)
拉取请求是在合并两个分支之前的一个审批过程。它允许团队成员在合并前审查代码并提供反馈。例如,当开发者完成功能分支的工作后,他们会发起一个拉取请求,邀请同事进行代码审查。
2. 实际操作示例:NextGen Networks 公司的发布流程
假设公司遵循传统的发布模型,制定有一个新的发布计划,且开发团队已经准备好开始工作。
2.1 创建发布分支
团队的第一步是从主分支生成一个新的发布分支。这为即将进行的功能开发提供了一个独立的工作空间。
master / main branch
|
v
release branch
2.2 创建功能分支
Debbie 是公司的一名开发者,她从发布分支创建了一个本地功能分支,并开始提交她的工作。例如,她可能创建了一个名为 feature/user-profile
的分支来开发用户资料功能。
master / main branch
|
v
release branch
|
v
Debbie's feature branch
2.3 提交拉取请求
完成功能开发后,Debbie 创建了一个针对发布分支的拉取请求,以便她的团队成员可以审查她的工作。
master / main branch
|
v
release branch
|
v
Debbie's feature branch (Pull Request)
2.4 合并功能分支
在同事们批准了拉取请求并检查没有冲突后,Debbie 将功能分支合并到发布分支,推动更改。
深色版本
master / main branch
|
v
release branch (Merge)
|
v
Debbie's feature branch
2.5 多个开发者协作
新加入的开发者 Dave 负责其他发布需求,他从发布分支创建了另一个功能分支进行本地开发。他的本地副本已经包含了 Debbie 的提交。
master / main branch
|
v
release branch
|
v
Debbie's feature branch
|
v
Dave's feature branch
2.6 提交和验证
Dave 提交了他的更改,并针对发布分支进行了拉取请求,以验证功能分支的内容是否可合并。
master / main branch
|
v
release branch
|
v
Debbie's feature branch
|
v
Dave's feature branch (Pull Request)
2.7 合并功能分支
拉取请求获得团队批准后,Dave 可以将他的功能分支合并到发布分支。
master / main branch
|
v
release branch (Merge)
|
v
Debbie's feature branch
|
v
Dave's feature branch
3. 发布前的调整
发布日期临近时,业务负责人要求团队移除一些最初计划作为此次发布的新功能。此时,团队需要找到与这些功能相关的所有提交,并手动从发布分支中移除它们。
如果公司没有建立命名约定,识别属于特定功能的提交会变得更加困难。例如,如果某个功能包含数十或数百个提交,团队必须仔细筛选并移除相关提交。
USERPROFILE-123 更新用户头像显示
USERPROFILE-456 修复用户资料加载问题
USERPROFILE-789 添加用户个人简介字段
在完成这些步骤后,团队还需要解决发布分支与主分支之间的冲突,确保在发布截止日期前回滚不必要的提交。
结论
通过本文的介绍,你应该对使用 Git 进行传统发布流程的关键概念和实际操作有了更深入的理解。这些知识将帮助你在实际工作中更好地管理代码变更,实现高效的协作和持续交付。无论你是初学者还是经验丰富的开发者,都可以从这些实践中受益,推动你的项目取得成功。