6
0
Files
Git-Management/Git 管理规范.md
2025-08-22 09:26:20 +08:00

270 lines
9.7 KiB
Markdown
Raw 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.
# 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`。所有分支名称应使用小写字母,并且使用破折号(`-`)分隔单词。
* **开发流程**:
1.`dev` 分支拉取最新代码。
2. 完成功能开发后,在本地提交代码并推送至远程仓库。
3. 创建拉取请求PR并合并到 `dev` 分支。
### 2.4 修复分支 (`bugfix/*`)
* **用途**: 用于修复 Bug修复分支可以从 `dev``main` 分支创建。
* **命名规范**: `bugfix/bug描述`,例如: `bugfix/fix-ast-error`
* **开发流程**:
1.`dev``main` 分支拉取最新代码。
2. 完成修复后,提交修改并推送至远程仓库。
3. 创建拉取请求PR并合并到相应分支。
### 2.5 发布分支 (`release/*`)
* **用途**: 当 `dev` 分支的功能开发完成且准备发布时,应创建一个 `release` 分支进行发布准备。
* **命名规范**: `release/vX.X.X`,例如: `release/v1.0.0`
* **开发流程**:
1.`dev` 分支创建 `release` 分支。
2.`release` 分支上进行版本发布的最终准备工作,如文档更新、版本号调整等。
3. 完成发布准备后,将 `release` 分支合并至 `main` 并打上版本标签,随后将变更合并回 `dev` 分支。
### 2.6 热修复分支 (`hotfix/*`)
* **用途**: 当生产环境中发现紧急问题(如 Bug 或系统崩溃等),需在 `main` 分支上进行快速修复时,应创建一个 `hotfix` 分支进行修复。
* **命名规范**: `hotfix/bug描述`,例如: `hotfix/fix-production-crash`
* **开发流程**:
1.`main` 分支创建 `hotfix` 分支,确保该分支包含生产环境中最新的稳定版本。
2.`hotfix` 分支上进行问题修复和相关调整。
3. 完成修复后,提交修改并推送至远程仓库。
4. 创建拉取请求PR`hotfix` 分支合并至 `main` 分支并打上版本标签,确保生产环境修复生效。
5. 将修复后的变更合并回 `dev` 分支,确保所有的修复和调整同步到开发分支,防止后续开发中出现同样的问题。
6. **回滚策略**: 如果热修复未能解决问题,立即回滚合并,删除 `hotfix` 分支并通知团队,确保不影响生产环境。
## 3. 提交规范
为确保提交信息清晰且易于理解,遵循以下提交规范:
### 3.1 提交信息格式
提交信息应简洁且具有描述性,格式如下:
```
[类型] 描述
详细描述(可选)
```
#### 提交类型
* `feat`: 新增功能
* `fix`: 修复 Bug
* `docs`: 文档更新
* `style`: 代码格式调整(不影响功能)
* `refactor`: 代码重构
* `test`: 增加/修改测试
* `chore`: 工具配置等其他杂项任务
* `ci`: 持续集成相关改动
* `perf`: 性能优化
#### 示例
* `feat: 添加 IR 折叠功能`
* `fix: 修复问题 Y原因: X bug解决方案: Z`
* `docs: 更新 API 文档`
* `refactor: 优化 AST 逻辑`
### 3.2 提交实践
* 提交时,请确保代码已完成并通过所有相关测试。
* 每次提交应仅包含少量且相关的变更,避免一次性提交过多内容,以便于追踪和管理。
## 4. 拉取请求PR与代码审查
### 4.1 拉取请求流程
1. 开发者在完成功能或修复后,创建 PR将其分支合并至 `dev``main` 分支。
2. 其他团队成员进行代码审查,重点检查代码质量、功能完整性及测试覆盖率。
3. 审查通过后PR 将被合并。
### 4.2 代码审查
* 所有 PR 必须经过至少一名开发者的代码审查。
* 审查时应关注以下方面:
* 代码是否符合项目的编码规范。
* 是否提供了足够的单元测试覆盖。
* 是否存在冗余代码或复杂度过高的部分。
* 功能是否按预期工作。
* 审查者应在 PR 中提供反馈,确保代码质量高,符合团队要求。
## 5. 版本发布
版本发布基于 Git 标签,发布流程如下:
### 5.1 打标签
每当版本准备发布时,应在 `main` 分支上打上版本标签:
* **版本号规则**: 采用语义化版本控制SemVer格式版本号由三部分组成: `主版本号.次版本号.修订号`(例如: `v1.0.0`)。
* **标签命令**:
```bash
git tag v1.0.0
git push origin v1.0.0
```
### 5.2 发布流程
1. 确保所有功能已合并至 `dev` 分支,并通过集成测试。
2. 从 `dev` 分支创建 `release` 分支,进行版本发布的准备工作。
3. 在 `release` 分支上完成最终修改,如文档更新和版本号调整。
4. 将 `release` 分支合并至 `main` 并打上版本标签。
5. 将 `release` 分支的变更合并回 `dev`,确保所有修复和改动在开发分支中得到同步。
### 5.3 发布后
* 发布版本后,团队成员应确保将 `main` 分支的最新代码拉取到本地,以保持代码库的同步。
* 如出现生产环境问题,应及时创建 `hotfix` 分支进行紧急修复,并尽快发布。
```mermaid
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 流程
1. **创建 Issue**
* 明确问题或需求,写清楚背景、预期结果和实际情况。
* 必要时提供截图、日志或代码片段。
2. **分配 Issue**
* 项目负责人或团队成员可将 Issue 分配给具体开发者。
* 复杂的 Issue 建议先进行评估,再拆分为子任务。
3. **处理 Issue**
* 开发者在新建分支(如 `feature/*`、`bugfix/*`、`hotfix/*`)时,应在分支说明或 PR 中关联对应的 Issue。
* 处理完成后,提交 PR 并关联 Issue。
4. **关闭 Issue**
* 当 PR 合并后,相关 Issue 自动关闭。
* 如果问题未解决,应重新打开或创建新的 Issue。
---
### 6.4 Issue 最佳实践
* **描述清晰**:避免模糊描述,如“修复报错”;应写明“修复用户登录时因 token 校验失败导致的 500 错误”。
* **一个 Issue 只包含一个问题**:避免一个 Issue 同时涉及多个 Bug 或功能需求。
* **保持更新**:在处理过程中,及时补充进展,方便团队成员了解状态。
* **结合 Milestone**:将 Issue 归档到迭代或版本里,保证任务有明确的交付目标。