Files
cps-develop-docs/05 - Collaboration & Delivery/5.1 版本控制与代码提交规范.md
2026-03-24 16:13:32 +08:00

106 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# **5.1 版本控制与代码提交规范**
优秀的版本控制应当像一本条理清晰的编年史,任何人在任何时候接手代码,都能通过 Git 历史精准还原业务的演进过程。本规范旨在建立清晰、可追溯、自动化的代码流转体系。
### **5.1.1 分支管理模型 (Branching Model)**
为了兼顾敏捷交付与生产环境的极度稳定,团队统一采用 **简化的 GitFlow / 环境变量流 (Environment Flow)**
#### **1\. 核心常驻分支 (Protected Branches)**
这三个核心分支与部署环境严格绑定,**绝对禁止**任何开发人员直接使用 git push 推送代码,必须通过 PR/MR 流程合并:
* **main (或 master) \- 生产环境分支**
* 对应线上生产环境 (Production)。
* 这里的代码必须是随时可发布、经过全面测试的绝对稳定版本。
* **test (或 release) \- 测试/预发环境分支**
* 对应 QA 测试环境或预发布环境 (Staging)。
* 用于产品经理验收和测试工程师进行系统级回归测试。
* **dev (或 develop) \- 开发集成环境分支**
* 对应日常开发联调环境。
* 汇总所有开发人员最新的 Feature 代码,允许存在一定的 Break Change但必须保证编译和基础启动不报错。
#### **2\. 临时工作分支 (Temporary Branches)**
开发人员日常编码都在临时分支上进行,命名必须遵循以下前缀规范,并在开发完成后删除:
* **feat/xxx**:新功能开发分支(从 dev 检出,合并回 dev
* *示例feat/user-login-wechat*
* **fix/xxx**:常规 Bug 修复分支(从 dev 或 test 检出)。
* *示例fix/order-amount-calc-error*
* **hotfix/xxx**:线上紧急漏洞修复分支(**直接从 main 检出**)。
* *红线:紧急修复测试通过后,必须同时双向合并到 main 和 dev 分支,防止代码覆盖丢失!*
### **5.1.2 Commit Message 格式规范 (Conventional Commits)**
**核心理念:让机器能读懂提交历史,以便自动生成 Release Notes。**
团队强制遵循 Angular 提交规范。推荐在项目中引入 commitlint 配合 Git Hooks如 pre-commit进行强制拦截。
#### **1\. 标准格式**
\<type\>(\<scope\>): \<subject\>
\<空行\>
\<body\>
#### **2\. Type (提交类型 \- 必填)**
* feat: ✨ 新增功能 (Feature)
* fix: 🐛 修复缺陷 (Bug)
* docs: 📝 文档更新 (Documentation)
* style: 🎨 代码格式修改(不影响逻辑,如空格、缩进、格式化工具输出)
* refactor: ♻️ 代码重构(既不是新增功能,也不是修复 bug 的代码更改)
* perf: ⚡️ 性能优化 (Performance)
* test: ✅ 新增或修改测试用例
* chore: 🔧 构建过程、CI/CD 脚本、辅助工具库的更改
#### **3\. Scope (影响范围 \- 可选)**
用于说明本次提交影响的模块,如 (user), (order-service), (ci)。
#### **4\. Subject (简短描述 \- 必填)**
* 必须使用祈使句(如:“添加用户登录”,而不是“添加了用户登录”)。
* 结尾**不要**加句号。
* 如果关联了特定的任务卡片或 Issue 编号强烈建议带上feat(auth): 支持微信扫码登录 (\#ISSUE-102))。
#### **4\. 反面教材与正确示范**
* ❌ 错误update 代码
* ❌ 错误fix bug
* ✅ 正确fix(payment): 修复并发退款时状态一致性问题 (\#bug-882)
* ✅ 正确feat(externals): 增加 Dify 代理网关接口
### **5.1.3 Tag 与版本号命名规则 (Semantic Versioning)**
**红线:严禁人肉编造随意字符串作为版本号。** 所有对外发布、打包上线的制品(如 Docker 镜像、NPM 包、Maven 依赖)必须严格遵循 **语义化版本 (SemVer 2.0.0)** 规范。
#### **1\. 版本号格式v\<MAJOR\>.\<MINOR\>.\<PATCH\>**
* **MAJOR (主版本号)**:当你做了**不兼容的 API 修改**或系统进行了史诗级重构时。
* **MINOR (次版本号)**:当你做了**向下兼容的新功能新增**时。
* **PATCH (修订号)**:当你做了**向下兼容的缺陷修复 (Bugfix)** 时。
*示例v1.0.0 \-\> v1.1.0 (加了新功能) \-\> v1.1.1 (修了新功能的 Bug) \-\> v2.0.0 (接口大重构,老版本客户端不可用)。*
#### **2\. 预发布版本后缀**
在正式 Tag 之前,如果是处于测试阶段的里程碑,应当追加连字符与标识:
* Alpha (内测版): v2.0.0-alpha.1
* Beta (公测版): v2.0.0-beta.1
* RC (Release Candidate 候选发布版): v2.0.0-rc.1
### **5.1.4 提交与合并纪律 (Commit & Merge Discipline)**
为配合 4.2 代码审查规范 与 CI/CD 质量门禁,特设立以下代码流转纪律:
1. **防门禁失败兜底 (Pre-commit)**
* 所有代码在 git commit 时,必须触发本地钩子验证。如项目存在特定的门禁脚本(如 GTCO\_AI 项目下的 scripts/ci/quality\_gate.sh必须在本地保证执行通过。
2. **禁止强推 (No Force Push)**
* 绝对禁止对 dev, test, main 等公共分支执行 git push \-f。此行为将直接导致团队其他成员的版本库断裂。
3. **主张 Squash Merge (压缩合并)**
* 开发者在自己的 feat/xxx 分支上为了备份,可能会产生大量零碎的 commit如 fix typo, update again
* 在通过 PR 合并到主干分支(如 dev**强烈建议使用 Squash and Merge**,将无数琐碎的 commit 压缩成一个整洁的业务 Commit 记录进入主干。
4. **及时变基 (Rebase / Sync)**
* 开发周期较长的 Feature 分支,必须每天从目标主干分支拉取最新代码(建议使用 git pull \--rebase origin dev提前解决冲突严禁等到提 PR 那天才去处理几千行的灾难性冲突。