zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Git - branch name

Git name Branch
2023-09-11 14:22:08 时间

在一个大公司工作,项目可以从一个人的团队突然扩展到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 👩‍💻👨‍💻

Git Branch Naming Convention - DEV Community 👩‍💻👨‍💻