项目开发规范蒸馏:gitflow 分支模型与发布流程

作者 1233 阅读2 次浏览
本文目录

name: repo-gitflow-workflow description: 从 Terra-Wiki 蒸馏的通用 gitflow 工作流:三段式分支模型、两条铁律、Conventional Commits、发布与热修流程、分支保护落地

项目开发规范蒸馏:gitflow 分支模型与发布流程

适用时机

  • 有明确发布节奏(版本号 + tag + 自动构建产物)的多分支协作项目要立分支模型。
  • 团队还在"所有人都往 main 推"或 develop 长满没人认领的分支,需要一份可执行的手册。

规范条目

分支模型

  1. 长期分支只有三个角色:main(生产,每个提交对应线上可运行状态)、develop(集成,日常合并目标)、<type>/<name>(工作分支)。
  2. 工作分支按意图命名:feature/ bugfix/ chore/,流程完全一致,前缀只区分意图。
  3. 铁律一:功能分支一律从 develop 切出、合回 develop。main 上每个提交都要可发布,未经集成验证的东西混进去就破坏了这个承诺。
  4. 铁律二:只有 release/* 与 hotfix/* 能进 main,它们是发布边界的唯一入口。
  5. release/<version> 从 develop 切出,只放发布前修补(文案、依赖、迁移定稿、版本号回写),合回 develop(回灌)与 main(发布);hotfix/<version> 从 main 切出(develop 上可能有未验证功能),修完同时合回 main 与 develop——回灌漏了 develop,下个版本会把这个 bug 再带上线。
  6. 命名 <type>/<short-kebab-description>:小写短横线、不用中文;release/hotfix 后半段是版本号不带 v。
  7. 版本语义化 MAJOR.MINOR.PATCH,与 package.json 的 version 一致;tag 只打在 main,形如 v0.2.0。

日常流程

  1. 节奏:从最新 develop 切分支 → 开发自测(typecheck+test)→ 小步提交 → PR 到 develop → CI 绿 + review 通过 → --no-ff 合并 → 删源分支。
  2. main 与 develop 只接受 --no-ff 合并、保留发布边界节点;不 force push、不直接 push。
  3. 分支落后用 rebase 或 merge develop 同步,二者选一、团队内一致。

提交规范

  1. Conventional Commits:<type>(<scope>): <subject>,type ∈ feat/fix/chore/docs/test/refactor/perf/build/ci,scope 取模块名,subject 祈使句、动词开头、≤72 字符、结尾不加句号。
  2. 一次提交只做一件事,重构与功能不混——否则 review 看不出意图,revert 也切不干净。
  3. 破坏性变更在 body 写 BREAKING CHANGE: <说明>;body 写"为什么这么改",不是"改了什么"。

分支保护(GitHub 设置落地)

  1. main 与 develop 都要求:必须走 PR、指定 CI check 必须过、禁 force push、禁删除、合并后自动删源分支;main 额外要求线性历史 + ≥1 个 approve。
  2. develop 不强制线性历史——release/hotfix 的 --no-ff 回灌本来就有合并节点,规则别跟流程打架。
  3. 保护规则的 required check contexts 必须与 CI job 名一致,改 job 名要同步改,否则 PR 永远卡在"等待检查"。

陷阱与例外

  • 历史遗留旧命名分支合掉后保留不改名,新分支一律用新前缀,避免批量 rename 引发引用失效。
  • 数据库迁移不会自动回滚,发布分支要把迁移定稿当一类"发布前修补"对待。
  • hotfix 不引入新功能或依赖升级,只修那一个 bug,必要时补回归测试。

项目特有约定(不可迁移)

  • scope 列表、操作手册文档分工、镜像发布方式(CI 出镜像 + 服务器 pull)是本仓库私有约定。

验证方式

  • gh api repos/:owner/:repo/branches/main/protection 确认保护规则生效。
  • 抽查 git log:main 只有 release/hotfix 合并节点;develop 的合并都是 --no-ff。

2 次浏览