总结
Git 工作流彼此之间并没有太大区别,大多数工作流都是建立在其他工作流的基础上的。与其将某种工作流视为一种教条,更重要的是遵循“快速失败”和“向前推进”的原则。所有的工作流实际上只是最佳实践的集合,你应该根据需要选择适合的部分。
重要的是你更改的大小以及你将它们合并回主分支的频率。
始终遵循以下规则:
-
始终从主分支(基于 trunk)创建你的主题分支。
-
如果你在处理复杂的功能,确保每天至少提交一次(使用功能标志)。
-
如果你的更改很简单,只需要更改几行代码,你可以让 PR 保持开放较长时间。但要检查是否有太多的开放 PR。
按照这些规则,你实际上使用的工作流并不那么重要。挑选那些适合你的方法。
在本章中,你了解了 TBD(基于 trunk 的开发)的好处,以及如何结合 Git 工作流来提高工程效率。
在下一章,我将解释如何通过 shift-left 测试来提高质量,并更有信心地进行发布。
案例研究
通过自动化发布流程,两个试点团队已经注意到生产力的大幅提升。交付时间和部署频率的指标显著增加。
第一个团队在迁移到 GitHub 之前曾使用 Git,按照 Gitflow 分支工作流进行开发。由于他们的 Web 应用可以通过分阶段部署流程持续发布,因此他们转向了基于 trunk 的工作流,使用 PR 和私有分支,并在合并到 main 分支后通过 CI/CD 流程(MyFlow)进行部署。为了更频繁地进行集成,他们决定使用功能标志。由于公司需要在云端和本地都能管理功能标志,他们选择了 Unleash。该团队可以立即使用 SaaS 服务,而无需等待本地部署解决方案。
第二个团队原本使用 Team Foundation Server(TFS),习惯了复杂的分支工作流,包括长期存在的发布分支、服务包、热修复分支和一个集成所有功能的开发分支。由于软件安装在硬件产品上,多个版本会并行稳定,并且需要长期维护,这意味着无法进行持续发布。该团队选择了 release flow 来管理发布和热修复。对于开发,他们也采用了私有分支和 PR,且依然使用基于 trunk 的方法。由于产品无法连接到互联网,该团队依赖其配置系统来进行功能标志管理。这项技术以前就用于在硬件上测试新功能,团队现在将其扩展到更频繁地集成更改。
这两个团队的情况似乎都已经取得了很好的进展。如果有任何具体问题或挑战需要进一步解决,欢迎随时沟通!
进一步阅读
你可以通过以下参考资料,获取本章所涉及主题的更多信息:
-
Forsgren N., Humble, J., 和 Kim, G.(2018)。《加速:精益软件和DevOps的科学:构建和扩展高效能技术组织》(第1版)[电子书]。IT Revolution Press。
-
基于Trunk的开发: https://trunkbaseddevelopment.com
-
Gitflow:Vincent Driessen (2010),《成功的Git分支模型》: https://nvie.com/posts/a-successful-git-branching-model/
-
GitLab Flow: https://docs.gitlab.com/ee/topics/gitlab_flow.html
-
Edward Thomson(2018)。《发布流程:我们如何在VSTS团队中做分支管理》: https://devblogs.microsoft.com/devops/release-flow-how-we-do-branching-on-the-vsts-team/
-
Aman Gupta(2015)。《将分支部署到GitHub.com》: https://github.blog/2015-06-02-deploying-branches-to-github-com/
-
GitHub Flow: https://docs.github.com/en/get-started/quickstart/github-flow
-
GitHub CLI: https://cli.github.com/