DDS工作流
分支
在 DDS 仓库中,分支结构如下所示:
DDS 包含多个分支,但总体而言主要分为以下三类:
master 分支
Master分支是代码库的核心分支,也是最稳定的分支。Master分支拥有最严格的测试,并且只接受经过严格测试的rc分支合并过来的代码。
WARNING
切记,无论何时,feature/bugfix 分支都不应当直接提交或合并到 master 分支。
通常情况下,Master分支会以master_xxx的格式进行命名,例如:master_default,表示是默认的Master分支。
rc 分支
RC分支是代码库的主要功能分支之一,代表一个大的功能。RC分支拥有较为严格的测试,并且只接受来自feature/bugfix分支的经过测试的代码合并。
通常情况下,RC分支会以master_xxx_rc_yyy的格式命名,例如:master_default_rc_test,表示是master_default分支下的RC分支。
feature/bugfix 分支
Feature/bugfix分支是代码库的主要开发分支之一,代表一个独立的小功能。Feature/bugfix分支拥有测试,并且允许直接向分支推送代码。
根据功能不同,通常以feature_xxx或者bugfix_xxx的格式命名,例如:feature_tcp_mode、bugfix_connect,表示需要添加tcp_mode功能或是修复connect功能。命名规则应该简洁明了,能够清晰地表达该分支的目的。
工作流
首次开发
首次开发的时候,需要将仓库 clone 到本地
git clone git@git.minieye.tech:huangjian/dds.git
开发功能
在日常开发中,可以遵循本工作流以获得最佳开发体验
首先从 rc 分支迁出 feature 分支
# 首先切换到 rc 分支
git checkout master_xxx_rc_yyy
# 确保当前 rc 分支是最新分支
git pull
# 从当前 rc 分支迁出 feature 分支
git checkout -b feature_xxx
在此分支上开发完一个功能之后,将该分支合并到 rc 分支
# 首先 rebase 一下 rc 分支
git rebase master_xxx_rc_yyy
# 将 feature 分支推送到远程仓库
git push origin feature_xxx
然后在 gitlab 提交 mr 请求,将该分支合并到 rc 分支,此时会触发 cicd 流水线检查,如果检查不通过请修改之后重新提交
修复线上 bug
在日常开发中,偶尔会发生线上 bug 导致不得不进行热修复
RC 分支热修复
如果是 RC 分支需要热修复,直接从 rc 分支迁出 bugfix 分支,修复完成以后合并回 rc 分支即可修复
# 首先切换到 rc 分支
git checkout master_xxx_rc_yyy
# 确保当前 rc 分支是最新分支
git pull
# 从当前 rc 分支迁出 bugfix 分支
git checkout -b bugfix_xxx
# 修复bug,完成之后提交到 gitlab 仓库之后提交 mr 即可
git push origin bugix_xxx
Master 分支热修复
master 分支热修复会更加复杂些,需要创建一个临时 rc 分支,再从临时 rc 分支迁出 bugfix 分支,修复完成以后提交到 rc 分支,再合并到 master 分支
# 切换到 master 分支
git checkout master_xxx
# 更新到最新 commit
git pull
# 迁出一个新的 rc 分支
git checkout -b master_xxx_rc_bugfix_yyy
# 迁出一个新的 bugfix 分支
git checkout -b bugfix_xxx
# 热修复 bug
# 如果是多人一起操作,需要 rebase 下 rc 分支
git rebase master_xxx_rc_bugfix_yyy
# 将 bugfix 分支提交到 gitlab 仓库
# 然后创建 mr 先合并 bugfix 分支到 rc 分支
# 然后创建 mr 合并到 master 分支
git push origin bugfix_xxx
RC 分支冲突解决
由于 rc 分支在执行 cicd 的时候需要 rebase master 分支,如果 master 分支已经更新,则可能与 rc 分支存在冲突,因此为了解决冲突,需要从 rc 分支迁出 bugfix 分支,然后用bugfix分支 rebase master 分支,解决完冲突以后再提交到 rc 分支,此时冲突解决
# 首先切换到需要解决冲突的分支
git checkout master_xxx_rc_yyy
# 更新到最新的 commit
git pull
# 前出到 bugfix 分支
git checkout -b bugfix_xxx
# rebase master 分支,解决冲突
git rebase master_xxx
# 提交到 gitlab,创建 mr,合并到 rc 分支
git push origin