在一个大公司工作,项目可以从一个人的团队突然扩展到20个开发人员的团队,拥有一个可管理的代码库是一种需要。大多数概念验证项目都是从一个仓库开始的,所有的修改都直接应用到主分支。当新的开发者的小规模项目突然被注意到时,将其提升到一个适当的大规模仓库是一个常见的途径。
在我这边,由于要处理几十个类似的不同项目,我想出了这个分支命名惯例。
可以把这些分支分成两类:
代码流分支 / Code Flow Branches
这些分支是我们期望在版本库中永久可用的,它们遵循代码变化的流程,从开发开始一直到生产。
- 开发 (dev - Development )
所有的新功能和错误修正都应该被带到开发分支。解决开发人员的代码冲突应该尽早在这里完成。
- QA/Test(test)
包含所有准备用于QA测试的代码。
- Staging ( Optional, 可选的,可以不用这个分支)
它包含经过测试的功能,利益相关者希望这些功能在提升到生产之前可以用来做演示或建议。在这里决定一个功能是否应该最终被带到生产代码中去。
- 主干(master)
生产分支,如果版本库被发布,这就是被展示的默认分支。
除了Hotfixes,我们希望我们的代码遵循单向合并( one-way merge)的原则,开发>测试>暂存>生产(development > test > staging > production)。
(dev-test-stage-prod)
临时分支 / Temporary Branches
顾名思义,这些是一次性的分支,可以根据开发者或部署者的需要创建和删除。
- 功能分支 / Feature
任何对新模块或用例的代码修改都应该在特性分支上完成。这个分支是在当前开发分支的基础上创建的。当所有修改都完成后,需要一个 Pull Request/Merge Request 来将所有这些修改放到开发分支上。
例子:
feature/integrate-swagger
feature/JIRA-1234
feature/JIRA-1234_support-dark-theme
建议使用所有小写字母和连字符(-)来分隔单词,除非是特定的项目名称或ID。可以用下划线(_)来分隔ID和描述。
- 错误修复 / bug fix
这个分支也是在当前开发分支的基础上创建的。当版本发布、sprint或demo演示结束后,之后任何必要的修复工作都应该在错误修复分支上完成。
例如:
bugfix/more-gray-shades
bugfix/JIRA-1444_gray-on-blur-fix
- 热修复 / Hot Fix
当需要立即处理某个问题时,比如需要修复一个必修问题blocker,做一个临时补丁,更改一个关键的框架更新或配置变化,那它应该被创建为一个Hotfix。它不遵循代码的预定整合,可以直接合并到生产分支,然后再合并到开发分支上。
例子:
hotfix/disable-endpoint-zero-day-exploit
hotfix/increase-scaling-threshold
- 实验性 / Experimental
任何不属于版本release或sprint的新功能或想法。一个用于玩耍的分支。
例如:
experimental/dark-theme-support
- 构建 / Build
一个专门用于创建特定构建组件或进行代码覆盖率运行的分支。
例子:
build/jacoco-metric
- 发布 / Release
用于标记特定发布版本的分支,虽然这个分支一般创建后就不会再修改,是一次性的,但一般为了以后项目可追溯,留着不删除比较好。
例如:
release/myapp-1.01.123
Git 也支持对仓库的特定提交历史进行标记。如果需要让代码可供签出(checkout)或使用,就可以使用发布分支。
- 合并 / Merging
一个用于解决合并冲突的临时分支,通常是在最新的开发版本和功能或 Hotfix 分支之间。如果一个功能的两个分支由多个开发者共同完成,需要合并、验证和最终确定,也可以使用这个分支。
例子:
merge/dev_lombok-refactoring
merge/combined-device-support
总结
注意分支的名字的分割,使用斜线,这样在Git的ref信息等目录结构里,会按照斜线的分隔形成一个路径,比如dev/myproj,那dev是一个文件夹,在里面有一个myproj的文件夹。
首先确认是单个项目还是项目集合,如果是单个项目的话,分支命令为:
常用的代码流管理分支:
dev
test
prod
master
临时的分支:
feature/desc
bugfix/desc
hotfix/desc
release/desc
merge/desc
tmp/desc
如果是多个项目使用一个代码仓库,那么master分支是多个项目共用,各个项目开发完会合并回master分支。
常用的代码流管理分支:
proj_name/dev
proj_name/test
proj_name/prod
master
临时分支:
proj_name/feature/desc
proj_name/bugfix/desc
proj_name/hotfix/desc
proj_name/release/desc
proj_name/merge/desc
proj_name/tmp/desc
这里的desc也可以多一级分类,第一级表示引用信息,比如issue number或jira number等依赖信息,然后才是具体描述。
比如:
feature/issue-43/create-new-button-component
参考:
A Simplified Convention for Naming Branches and Commits in Git - DEV Community 👩💻👨💻