# Git Workflow(分支模型与提交规范) 本仓库采用简化 Git Flow:`main`(生产)← `dev`(集成)← `feature/*`(功能)。 ## 分支模型 Branch Model | 分支 Branch | 用途 Purpose | 从哪拉出 From | 合入 To | 直接 push | |-------------|-------------|---------------|---------|-----------| | `main` | 生产 / 稳定,可发布 | — | — | ❌ 禁止(仅 PR) | | `dev` | 集成 / 开发主线 | `main` | `main` | ❌ 禁止(仅 PR) | | `feature/` | 单个功能 / 改动 | `dev` | `dev` | ✅(推自己的 feature) | | `hotfix/` | 线上紧急修复 | `main` | `main` + `dev` | ❌(仅 PR) | | `release/` | (可选)发布候选 | `dev` | `main` + `dev` | ❌(仅 PR) | ## 分支命名 Branch Naming - 功能:`feature/`,如 `feature/architecture-scaffold` - 修复:`fix/` 或 `hotfix/` - 发布:`release/`,如 `release/v1.0.0` ## 提交规范 Commit Convention 遵循 Conventional Commits:`(): ` - `type`:`feat` / `fix` / `docs` / `chore` / `refactor` / `test` / `build` / `perf` / `style` / `ci` - `scope`:可选,模块名(`entry` / `uikit` / `common`) - `subject`:祈使句,首字母小写,结尾不加句号 示例: ``` feat(entry): 建立 MVVM+data 分层骨架 chore(build): 注册 common/uikit 模块 docs: 新增架构设计文档 ``` ## 开发流程 Development Workflow ### 新建功能 Feature ```bash git checkout dev git pull git checkout -b feature/xxx # 开发 + 提交(conventional commits) git add -A git commit -m "feat(entry): ..." git push -u origin feature/xxx ``` 然后在 Gitea 发起 PR:`feature/xxx → dev`,评审通过后合并(推荐 **squash merge**,保持 `dev` 历史线性干净)。 合并后删除已合入的 feature 分支: ```bash git checkout dev git pull git branch -d feature/xxx git push origin --delete feature/xxx ``` ### 发布 Release 简单场景直接发 PR `dev → main`(用 **merge commit** 保留发布边界),合并后打 tag: ```bash git checkout main git pull git tag v1.0.0 git push --tags ``` 复杂场景可引入 `release/` 分支隔离发布修复: ```bash git checkout -b release/v1.0.0 dev # 修复 release 上的问题后,分别合回 main 与 dev 并打 tag ``` ### 紧急修复 Hotfix ```bash git checkout main git pull git checkout -b hotfix/xxx # 修复 + 提交 git push -u origin hotfix/xxx # PR: hotfix/xxx → main;再 PR: hotfix/xxx → dev(同步回开发主线) ``` ## 硬规则 Hard Rules 1. **禁止直接 push 到 `main` 或 `dev`**,一律走 PR(建议在 Gitea 对这两个分支开启保护)。 2. **PR 合入前过 lint + 相关测试**,见 `docs/testing.md` 的「改动后验证」。 3. **feature 合并后删除分支**,保持分支列表干净。 4. **提交信息必须走 Conventional Commits**,不合规的提交在 PR 中 squash 掉。 5. **签名信息永不入库**——`build-profile.json5` 的 `signingConfigs` 必须保持空 `[]`,已由 pre-commit 钩子兜底,见 `docs/build-deploy.md` 的「签名管理」。 ## 仓库设置 Repo Settings(一次性) - 默认分支设为 `main`(Gitea → Settings → Branches → Default Branch)。 - 建议对 `main` / `dev` 开启分支保护(禁止直接 push,仅允许 PR 合并)。