分支管理策略
本文引用的文件
- README.md
- .github/workflows/vhttpd-binaries.yml
- .github/workflows/sync-vphp-package.yml
- docs/MVP_1_0_PR_READY.md
- docs/MVP_1_0_RUNBOOK.md
目录
引言
本文件定义 VHTTPD 项目的分支管理策略,覆盖主分支、开发分支、功能分支、修复分支与发布分支的命名规范、创建时机、合并策略与生命周期管理;并给出分支保护规则、权限控制与自动化流程配置建议。同时提供最佳实践与常见场景处理方案,确保团队在持续集成与交付过程中保持一致性与可追溯性。
项目结构
仓库采用“源码 + 文档 + 示例 + 工作流”的组织方式: - 源码位于 src/ 与 dbsrc/,构建脚本与依赖说明集中在 README.md 与 Makefile - 文档集中于 docs/,包含运行手册与验收清单 - GitHub Actions 工作流位于 .github/workflows/,负责二进制构建与子模块同步 - 示例与配置文件位于 examples/ 与 config/
graph TB
A["仓库根目录"] --> B["src/ 源码"]
A --> C["dbsrc/ 数据库相关源码"]
A --> D["docs/ 文档与计划"]
A --> E[".github/workflows/ CI 工作流"]
A --> F["examples/ 示例应用与配置"]
A --> G["config/ 运行时配置示例"]
A --> H["Makefile / README.md 构建与说明"]
[本节为概念性概述,不直接分析具体文件,故无章节来源]
核心组件
围绕分支管理的核心要素包括: - 分支模型与命名规范 - 触发条件与生命周期 - 合并策略与质量门禁 - 保护规则与权限控制 - 自动化流水线(CI/CD)
结合仓库现有工作流与文档,当前已具备以下能力: - main 分支推送或 PR 时触发多平台二进制构建与打包 - 对 php/package 变更进行自动同步到独立仓库 - 通过标签触发 Release 资产生成(见 README 中发布说明)
章节来源 - README.md:414-426 - .github/workflows/vhttpd-binaries.yml:1-21 - .github/workflows/sync-vphp-package.yml:1-48
架构总览
下图展示基于 GitFlow 的分支模型与关键自动化节点。该图映射了仓库中的实际工作流触发点与产物路径。
flowchart TD
subgraph "分支"
MAIN["main生产基线"]
DEV["develop日常集成"]
FEAT["feature/*新功能"]
FIX["fix/*缺陷修复"]
REL["release/*版本准备"]
end
subgraph "CI/CD"
BIN["构建多平台二进制<br/>vhttpd-binaries.yml"]
SYNC["同步 vphp-package<br/>sync-vphp-package.yml"]
TAG["打标签触发 Release 资产"]
end
FEAT --> |PR 合并| DEV
FIX --> |PR 合并| DEV
DEV --> |PR 合并| MAIN
DEV --> |创建| REL
REL --> |PR 合并| MAIN
REL --> |打标签| TAG
MAIN --> |推送| BIN
REL --> |推送| BIN
DEV --> |推送| BIN
FEAT --> |推送| BIN
FIX --> |推送| BIN
REL --> |推送| BIN
SYNC --> |仅 main 上 php/package 变更| BIN
图表来源 - .github/workflows/vhttpd-binaries.yml:1-21 - .github/workflows/sync-vphp-package.yml:1-48 - README.md:414-426
详细组件分析
分支模型与命名规范
- 主分支 main
- 用途:生产环境发布基线,稳定可用
- 命名:main
- 创建时机:初始化仓库即存在
- 合并策略:仅接受来自 release/* 的合并;禁止直接推送
- 生命周期:长期存在
- 开发分支 develop
- 用途:日常开发与集成测试
- 命名:develop
- 创建时机:从 main 首次切出后建立
- 合并策略:接受来自 feature/ 与 fix/ 的合并
- 生命周期:长期存在
- 功能分支 feature/*
- 用途:实现新特性或增量改进
- 命名:feature/<描述>(例如 feature/add-mcp-streaming)
- 创建时机:从 develop 切出
- 合并策略:完成自测与评审后合入 develop
- 生命周期:短期,完成后删除
- 修复分支 fix/*
- 用途:修复缺陷或紧急问题
- 命名:fix/<问题编号或简述>(例如 fix/crash-on-upstream-timeout)
- 创建时机:从 develop 切出;若需热修可直接从 main 切出并走 hotfix 流程(见下文)
- 合并策略:合入 develop;必要时再合入 main 并打标签
- 生命周期:短期,完成后删除
- 发布分支 release/*
- 用途:版本发布准备、回归验证、补丁累积
- 命名:release/vX.Y.Z(例如 release/v1.2.0)
- 创建时机:从 develop 切出,进入冻结期
- 合并策略:验证通过后合入 main 与 develop,随后删除
- 生命周期:短中期,发布完成后删除
[本节为通用策略说明,未直接分析具体文件,故无章节来源]
分支保护规则与权限控制
- 受保护分支
- main:禁止直接推送;必须通过 Pull Request 合并;至少一名维护者审批;要求 CI 全部通过
- develop:建议开启保护,限制直接推送;PR 合并需通过 CI
- release/*:仅允许维护者操作;合并前需完成回归检查
- 权限建议
- 维护者:拥有 main/release 的合并权与标签权
- 开发者:可创建 feature/ 与 fix/,提交 PR 至 develop/main
- 机器人账号:用于自动化任务(如子模块同步),使用最小必要权限
- 强制检查项
- 代码风格与静态检查
- 单元测试与快速端到端冒烟测试
- 多平台构建成功(Linux/macOS)
- 二进制可用性校验(--help、错误参数返回非零等)
[本节为通用策略说明,未直接分析具体文件,故无章节来源]
自动化流程配置与触发点
- 二进制构建与打包(多平台)
- 触发:push 到 main、develop、feature/、fix/、release/*;以及 PR 事件
- 行为:安装依赖、编译、运行快速测试、打包产物、上传工件
- 参考:.github/workflows/vhttpd-binaries.yml
- 子模块同步
- 触发:push 到 main 且变更路径包含 php/package/** 或脚本与工作流文件
- 行为:将 php/package 同步到独立仓库 vphp-package,支持可选 release_tag
- 参考:.github/workflows/sync-vphp-package.yml
- 标签驱动发布
- 触发:推送标签(例如 vhttpd-0.1.0)
- 行为:自动生成 Release 资产与说明
- 参考:README.md 中“Release options”段落
sequenceDiagram
participant Dev as "开发者"
participant GH as "GitHub"
participant CI as "Actions 构建"
participant Art as "制品归档"
Dev->>GH : 推送 feature/* 或 fix/* 分支
GH->>CI : 触发 vhttpd-binaries.yml
CI->>CI : 安装依赖/编译/测试
CI->>Art : 上传构建产物
Dev->>GH : 提交 PR 至 develop/main
GH->>CI : PR 触发构建与检查
CI-->>GH : 检查结果通过/失败
Dev->>GH : 合并 PR满足保护规则
GH->>CI : 再次触发构建可选
图表来源 - .github/workflows/vhttpd-binaries.yml:1-21 - .github/workflows/vhttpd-binaries.yml:127-171
章节来源 - .github/workflows/vhttpd-binaries.yml:1-21 - .github/workflows/vhttpd-binaries.yml:127-171 - .github/workflows/sync-vphp-package.yml:1-48 - README.md:414-426
合并策略与质量门禁
- 合并目标
- feature/* → develop
- fix/* → develop(紧急修复可从 main 切出,先合入 main 再合入 develop)
- release/* → main 与 develop
- 质量门禁
- 构建通过:多平台产物生成成功
- 冒烟测试通过:二进制 --help 正常、错误参数返回非零
- 文档与清单:MVP 验收清单逐项验证
- 回滚策略
- 通过标签与制品归档定位历史版本
- 优先回滚制品而非代码;必要时回退提交并重新发布
flowchart TD
Start(["开始"]) --> Check["检查 PR 状态与 CI 结果"]
Check --> |通过| Merge["按策略合并到目标分支"]
Check --> |失败| Fix["修复问题并重跑 CI"]
Merge --> Verify["执行冒烟与基准测试"]
Verify --> |通过| Tag{"是否发布版本?"}
Verify --> |失败| Rollback["回滚合并并记录问题"]
Tag --> |是| Publish["打标签并发布制品"]
Tag --> |否| End(["结束"])
Publish --> End
Rollback --> End
图表来源 - docs/MVP_1_0_PR_READY.md:1-104 - .github/workflows/vhttpd-binaries.yml:127-171
章节来源 - docs/MVP_1_0_PR_READY.md:1-104 - docs/MVP_1_0_RUNBOOK.md:1-143
生命周期管理与清理
- 分支存活期
- feature/、fix/:合并后立即删除本地与远端分支
- release/*:发布完成后立即删除
- 清理建议
- 定期清理 stale 分支
- 保留 main 与 develop 作为长期分支
- 标签用于永久版本标识
[本节为通用策略说明,未直接分析具体文件,故无章节来源]
常见场景与处理方案
- 新增功能
- 从 develop 切出 feature/*,提交 PR 至 develop,CI 通过后合并
- 紧急修复
- 从 main 切出 fix/hotfix-*,先在 main 合并并打标签,再合入 develop
- 版本发布
- 从 develop 切出 release/vX.Y.Z,冻结变更,回归通过后合入 main 与 develop,打标签并生成制品
- 子模块同步
- 修改 php/package 后推送到 main,自动同步到 vphp-package 仓库
章节来源 - .github/workflows/sync-vphp-package.yml:1-48 - README.md:414-426
依赖分析
- 外部依赖
- GitHub Actions:构建、测试、打包、上传制品
- 独立仓库 vphp-package:由工作流自动同步
- 内部依赖
- 工作流与 README 发布说明共同构成“标签→制品”的发布链路
- MVP 验收清单与运行手册为质量门禁与回归验证依据
graph LR
A["vhttpd 仓库"] --> B[".github/workflows/vhttpd-binaries.yml"]
A --> C[".github/workflows/sync-vphp-package.yml"]
A --> D["README.md 发布说明"]
A --> E["docs/MVP_1_0_PR_READY.md"]
A --> F["docs/MVP_1_0_RUNBOOK.md"]
B --> G["制品归档"]
C --> H["vphp-package 仓库"]
D --> I["标签驱动发布"]
E --> J["质量门禁"]
F --> K["运行与回归验证"]
图表来源 - .github/workflows/vhttpd-binaries.yml:1-21 - .github/workflows/sync-vphp-package.yml:1-48 - README.md:414-426 - docs/MVP_1_0_PR_READY.md:1-104 - docs/MVP_1_0_RUNBOOK.md:1-143
章节来源 - .github/workflows/vhttpd-binaries.yml:1-21 - .github/workflows/sync-vphp-package.yml:1-48 - README.md:414-426 - docs/MVP_1_0_PR_READY.md:1-104 - docs/MVP_1_0_RUNBOOK.md:1-143
性能考虑
- 构建并行矩阵:多平台并行构建提升产出效率
- 缓存与依赖预装:在 CI 中预装系统依赖与工具链,减少冷启动时间
- 制品体积优化:仅打包必要脚本与库,避免冗余
[本节为通用指导,未直接分析具体文件,故无章节来源]
故障排查指南
- 构建失败
- 检查依赖安装步骤与 pkg-config 配置
- 确认 QuickJS 源与 vjsx 模块链接正确
- 查看构建日志与错误输出
- 冒烟测试失败
- 验证二进制 --help 输出与错误参数返回码
- 检查环境变量与路径配置
- 子模块同步失败
- 确认 secrets 配置与令牌权限
- 检查目标仓库地址与分支名
章节来源 - .github/workflows/vhttpd-binaries.yml:47-82 - .github/workflows/vhttpd-binaries.yml:139-149 - .github/workflows/sync-vphp-package.yml:30-48
结论
本策略以 GitFlow 为基础,结合仓库现有的 CI 工作流与发布说明,明确了各分支的职责、命名、合并与生命周期管理,并通过保护规则与自动化流程保障质量与一致性。建议在团队内推广该策略,并在后续迭代中逐步完善保护规则与门禁项,以提升交付稳定性与可追溯性。
[本节为总结性内容,未直接分析具体文件,故无章节来源]
附录
- 术语
- 制品:构建产出的可执行包与脚本集合
- 冒烟测试:快速验证基本功能的测试用例
- 质量门禁:合并前的自动化检查与人工审核要求
- 参考
- 构建与分发说明:README.md
- 二进制构建工作流:.github/workflows/vhttpd-binaries.yml
- 子模块同步工作流:.github/workflows/sync-vphp-package.yml
- MVP 验收清单:docs/MVP_1_0_PR_READY.md
- MVP 运行手册:docs/MVP_1_0_RUNBOOK.md
章节来源 - README.md:414-426 - .github/workflows/vhttpd-binaries.yml:1-21 - .github/workflows/sync-vphp-package.yml:1-48 - docs/MVP_1_0_PR_READY.md:1-104 - docs/MVP_1_0_RUNBOOK.md:1-143