Git 管理规范
1. 版本控制基础
使用 Git 进行版本控制,并遵循以下基本原则:
- 所有代码更改必须通过 Git 提交,并推送至远程仓库。
- 每次提交必须包括清晰、简洁且具描述性的提交信息,确保团队成员能够轻松理解变更的目的和内容。
- 严禁直接在
main分支上进行开发。所有功能开发必须通过独立分支进行。
2. 分支管理
本项目采用以下分支策略进行代码管理:
2.1 主分支 (main)
- 用途:
main分支始终保持项目的稳定版本,且此分支的代码随时可以部署到生产环境。 - 更新规则: 仅允许经过充分测试并审查的代码合并到
main分支。每次从dev或release分支合并到main时,必须打上版本标签。
2.2 开发分支 (dev)
- 用途:
dev分支是所有开发工作的集成分支。所有的新功能开发应首先合并至dev分支,并经过集成测试后再合并到main。 - 更新规则: 所有功能开发完成后,应合并至
dev分支进行集成测试,确认没有问题后再合并到main。
2.3 功能分支 (feature/*)
-
用途: 每个新功能的开发都应从
dev分支创建一个独立的功能分支。 -
命名规范:
feature/功能描述,例如:feature/ast-folding、feature/user-cli。所有分支名称应使用小写字母,并且使用破折号(-)分隔单词。 -
开发流程:
- 从
dev分支拉取最新代码。 - 完成功能开发后,在本地提交代码并推送至远程仓库。
- 创建拉取请求(PR),并合并到
dev分支。
- 从
2.4 修复分支 (bugfix/*)
-
用途: 用于修复 Bug,修复分支可以从
dev或main分支创建。 -
命名规范:
bugfix/bug描述,例如:bugfix/fix-ast-error。 -
开发流程:
- 从
dev或main分支拉取最新代码。 - 完成修复后,提交修改并推送至远程仓库。
- 创建拉取请求(PR),并合并到相应分支。
- 从
2.5 发布分支 (release/*)
-
用途: 当
dev分支的功能开发完成且准备发布时,应创建一个release分支进行发布准备。 -
命名规范:
release/vX.X.X,例如:release/v1.0.0。 -
开发流程:
- 从
dev分支创建release分支。 - 在
release分支上进行版本发布的最终准备工作,如文档更新、版本号调整等。 - 完成发布准备后,将
release分支合并至main并打上版本标签,随后将变更合并回dev分支。
- 从
2.6 热修复分支 (hotfix/*)
-
用途: 当生产环境中发现紧急问题(如 Bug 或系统崩溃等),需在
main分支上进行快速修复时,应创建一个hotfix分支进行修复。 -
命名规范:
hotfix/bug描述,例如:hotfix/fix-production-crash。 -
开发流程:
- 从
main分支创建hotfix分支,确保该分支包含生产环境中最新的稳定版本。 - 在
hotfix分支上进行问题修复和相关调整。 - 完成修复后,提交修改并推送至远程仓库。
- 创建拉取请求(PR),将
hotfix分支合并至main分支并打上版本标签,确保生产环境修复生效。 - 将修复后的变更合并回
dev分支,确保所有的修复和调整同步到开发分支,防止后续开发中出现同样的问题。 - 回滚策略: 如果热修复未能解决问题,立即回滚合并,删除
hotfix分支并通知团队,确保不影响生产环境。
- 从
3. 提交规范
为确保提交信息清晰且易于理解,遵循以下提交规范:
3.1 提交信息格式
提交信息应简洁且具有描述性,格式如下:
[类型] 描述
详细描述(可选)
提交类型
feat: 新增功能fix: 修复 Bugdocs: 文档更新style: 代码格式调整(不影响功能)refactor: 代码重构test: 增加/修改测试chore: 工具配置等其他杂项任务ci: 持续集成相关改动perf: 性能优化
示例
feat: 添加 IR 折叠功能fix: 修复问题 Y(原因: X bug,解决方案: Z)docs: 更新 API 文档refactor: 优化 AST 逻辑
3.2 提交实践
- 提交时,请确保代码已完成并通过所有相关测试。
- 每次提交应仅包含少量且相关的变更,避免一次性提交过多内容,以便于追踪和管理。
4. 拉取请求(PR)与代码审查
4.1 拉取请求流程
- 开发者在完成功能或修复后,创建 PR,将其分支合并至
dev或main分支。 - 其他团队成员进行代码审查,重点检查代码质量、功能完整性及测试覆盖率。
- 审查通过后,PR 将被合并。
4.2 代码审查
-
所有 PR 必须经过至少一名开发者的代码审查。
-
审查时应关注以下方面:
- 代码是否符合项目的编码规范。
- 是否提供了足够的单元测试覆盖。
- 是否存在冗余代码或复杂度过高的部分。
- 功能是否按预期工作。
- 审查者应在 PR 中提供反馈,确保代码质量高,符合团队要求。
5. 版本发布
版本发布基于 Git 标签,发布流程如下:
5.1 打标签
每当版本准备发布时,应在 main 分支上打上版本标签:
-
版本号规则: 采用语义化版本控制(SemVer)格式,版本号由三部分组成:
主版本号.次版本号.修订号(例如:v1.0.0)。 -
标签命令:
git tag v1.0.0 git push origin v1.0.0
5.2 发布流程
- 确保所有功能已合并至
dev分支,并通过集成测试。 - 从
dev分支创建release分支,进行版本发布的准备工作。 - 在
release分支上完成最终修改,如文档更新和版本号调整。 - 将
release分支合并至main并打上版本标签。 - 将
release分支的变更合并回dev,确保所有修复和改动在开发分支中得到同步。
5.3 发布后
- 发布版本后,团队成员应确保将
main分支的最新代码拉取到本地,以保持代码库的同步。 - 如出现生产环境问题,应及时创建
hotfix分支进行紧急修复,并尽快发布。
flowchart LR
%% ---------- Core dev cycle ----------
subgraph CORE[Core Flow]
direction LR
F[Feature] --> D[Dev] --> R[Release] --> M[Main] --> P[Production]
R --> D
end
%% ---------- Fix streams grouped ----------
subgraph FIX[Fix Streams]
direction TB
B[Bugfix]
H[Hotfix]
end
%% Bugfix: can start from Dev or Main, merges back to both
D -. create .-> B
M -. create .-> B
B --> D
B --> M
%% Hotfix: from Main, then merge back to Main & Dev
M -. create .-> H
H --> M
H --> D
%% ---------- Styling ----------
classDef core fill:#EEF5FF,stroke:#5B8DEF,stroke-width:2px,rx:10,ry:10;
classDef branch fill:#F6F5FF,stroke:#9B87F5,rx:10,ry:10;
classDef hot fill:#FFF5F5,stroke:#F56565,stroke-width:2px,rx:10,ry:10;
classDef env fill:#E8FFF8,stroke:#2C7A7B,stroke-width:2px,rx:10,ry:10;
class D,R,M core;
class F,B branch;
class H hot;
class P env;
简要说明
- 主流程:所有开发都在
feature/或bugfix/分支,合并至dev,再经过release/到main。 - 发布:
release/分支只用于准备发布,合并后要打 Tag 并同步回dev。 - 热修复:
hotfix/从main分支拉出,紧急修复后要同时同步回main和dev。 - 所有分支 推荐通过 PR(拉取请求) 合并,需经过代码审查。
6. Issue 管理规范
6.1 Issue 基础
-
用途: Issue 用于跟踪项目中的任务、功能需求、Bug 报告以及改进建议。 每个 Issue 都应有明确的描述,方便开发者理解并处理。
-
基本要求:
- 每个功能开发、Bug 修复都应有对应的 Issue。
- 在提交 PR 时,应在描述中关联对应的 Issue(如
close #123或resolve #123)。 - Issue 状态应及时更新,避免长期挂起。
6.2 Issue 分类
为保证管理清晰,建议使用以下标签(Label)对 Issue 分类:
-
类型标签:
bug: 缺陷或错误修复feature: 新功能开发enhancement: 功能改进或优化docs: 文档相关discussion: 需要团队讨论的主题
-
优先级标签:
priority: high(高优先级,需立即处理)priority: medium(中优先级,近期处理)priority: low(低优先级,长期计划)
6.3 Issue 流程
-
创建 Issue
- 明确问题或需求,写清楚背景、预期结果和实际情况。
- 必要时提供截图、日志或代码片段。
-
分配 Issue
- 项目负责人或团队成员可将 Issue 分配给具体开发者。
- 复杂的 Issue 建议先进行评估,再拆分为子任务。
-
处理 Issue
- 开发者在新建分支(如
feature/*、bugfix/*、hotfix/*)时,应在分支说明或 PR 中关联对应的 Issue。 - 处理完成后,提交 PR 并关联 Issue。
- 开发者在新建分支(如
-
关闭 Issue
- 当 PR 合并后,相关 Issue 自动关闭。
- 如果问题未解决,应重新打开或创建新的 Issue。
6.4 Issue 最佳实践
- 描述清晰:避免模糊描述,如“修复报错”;应写明“修复用户登录时因 token 校验失败导致的 500 错误”。
- 一个 Issue 只包含一个问题:避免一个 Issue 同时涉及多个 Bug 或功能需求。
- 保持更新:在处理过程中,及时补充进展,方便团队成员了解状态。
- 结合 Milestone:将 Issue 归档到迭代或版本里,保证任务有明确的交付目标。