Files
aibis-dream/COMMIT_CONVENTION.md
2026-02-28 15:55:44 +08:00

251 lines
7.9 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.
# Git 提交规范
本文档定义 AIBIS Dream 项目的 Git 提交消息格式、分支命名规范与最佳实践。
---
## 提交消息格式
采用 [Conventional Commits](https://www.conventionalcommits.org/) 规范,结构如下:
```
<type>(<scope>): <subject>
[body]
[footer]
```
### 各部分说明
| 部分 | 是否必填 | 说明 |
|------|---------|------|
| type | 必填 | 提交类型,英文小写关键词 |
| scope | 可选 | 影响的模块/系统,用括号包裹 |
| subject | 必填 | 简要描述,中文,不超过 50 字,不加句号 |
| body | 可选 | 详细说明变更原因、背景和影响 |
| footer | 可选 | 关联 issue 编号或标注 BREAKING CHANGE |
### 格式要求
- `type``scope` 之间无空格
- `:` 后面加一个空格再写 `subject`
- `subject` 使用中文,动词开头(添加、修复、优化、重构、更新……)
- `body``subject` 之间空一行
- 每行不超过 72 个字符
---
## Type 类型定义
针对游戏开发场景扩展了标准 Conventional Commits 类型:
| type | 说明 | 示例 |
|------|------|------|
| feat | 新功能或功能增强 | 添加线索收藏功能 |
| fix | Bug 修复 | 修复对话跳过时崩溃的问题 |
| art | 美术资源变更(贴图、模型、动画、Spine 等) | 替换火山头部模型和贴图 |
| audio | 音频资源变更(音效、音乐、FMOD bank 等) | 添加酒吧环境音效 |
| scene | 场景配置变更(灯光、Timeline、Prefab 布局、Cinemachine 等) | 调整 D1S 酒吧场景灯光参数 |
| yarn | Yarn 对话剧本变更 | 更新佩佩 Day2 对话分支 |
| perf | 性能优化 | 减少语言粒子系统 DrawCall |
| refactor | 代码重构(不改变外部行为) | 将状态机逻辑从 Update 迁移到协程 |
| style | 代码格式调整(空格、缩进、命名等,不影响逻辑) | 统一 MiniGame 目录下命名风格 |
| docs | 文档变更 | 补充 TimelineKit 使用说明 |
| build | 构建/打包/CI 相关 | 更新 WebGL 构建配置 |
| chore | 杂项(依赖更新、配置调整、.gitignore 等) | 升级 DOTween 到 1.2.7 |
| test | 测试相关 | 添加对象池单元测试 |
### 选择 type 的原则
- 一次提交只做一件事,选最能体现主要变更的 type
- 如果同时涉及代码和美术,按主要变更选择(如功能开发附带占位美术 → `feat`
- `fix` 仅用于修复已有 Bug,功能调整用 `feat`
- 纯资源替换/更新用 `art` / `audio`,伴随代码改动的用 `feat``fix`
---
## Scope 作用域定义
Scope 标注本次提交影响的模块,帮助团队快速定位变更范围。
### 核心系统
| scope | 对应目录 | 说明 |
|-------|---------|------|
| dialog | Scripts/Dialog System/ | 对话系统(Yarn Spinner 集成) |
| clue | Scripts/Clue/ | 线索/证据收集系统 |
| ui | Scripts/UI/ | 用户界面(Panel、DialogUI、Form |
| scene-mgmt | Scripts/SceneManagement/ | 场景管理与切换 |
| fix-system | Scripts/FixSystem/ | 修复/拼图交互系统 |
### 小游戏
| scope | 对应目录 | 说明 |
|-------|---------|------|
| huoshan | Scripts/MiniGame/HuoShan/ | 火山系统(语言粒子、波形、情绪迷宫、分析模式) |
| blockpuzzle | Scripts/MiniGame/BlockPuzzle/ | 方块拼图 |
| peipei | Scripts/MiniGame/Peipei/ | 佩佩角色相关小游戏 |
| gear | Scripts/MiniGame/Gear/ | 齿轮系统 |
### 框架
| scope | 对应目录 | 说明 |
|-------|---------|------|
| action-kit | Scripts/Framework/ActionKit/ | 动作序列/命令模式 |
| audio-kit | Scripts/Framework/AudioKit/ | 音频管理 |
| pool-kit | Scripts/Framework/PoolKit/ | 对象池 |
| event-kit | Scripts/Framework/EventSystemKit/ | 事件系统 |
| timeline-kit | Scripts/Framework/TimelineKit/ | Timeline 管理 |
| state-machine | Scripts/Framework/StateMachineKit/ | 状态机 |
| resource-kit | Scripts/Framework/ResourceKit/ | 资源加载 |
| singleton-kit | Scripts/Framework/SingletonKit/ | 单例基类 |
### 其他
| scope | 说明 |
|-------|------|
| prototype | Web 原型(prototype/、web-prototype/ |
| config | 游戏配置、ProjectSettings |
| localization | 本地化/多语言 |
| save | 存档系统 |
**注意**:如果变更涉及多个模块或全局性改动,可以省略 scope。
---
## 分支命名规范
```
<type>/<简短英文描述>
```
### 分支类型
| 前缀 | 用途 | 示例 |
|------|------|------|
| feature/ | 新功能开发 | feature/block-puzzle-rotation |
| bugfix/ | Bug 修复 | bugfix/dialog-skip-crash |
| art/ | 美术资源批量更新 | art/huoshan-head-replace |
| hotfix/ | 紧急线上修复 | hotfix/save-data-corruption |
| release/ | 版本发布 | release/v0.3.0 |
| build/ | 打包/构建专用 | build/webgl-optimization |
| experiment/ | 实验性探索 | experiment/new-particle-system |
### 分支命名要求
- 使用英文小写 + 短横线(kebab-case
- 简洁明确,2-5 个单词
- 避免使用中文(防止编码问题和跨平台兼容性问题)
- 避免使用日期作为分支名(如 ~~火山制作8.7~~
### 长期分支
| 分支 | 用途 |
|------|------|
| master | 稳定发布版本 |
| develop | 开发主线,所有 feature 分支的合入目标 |
| playtest | 测试/试玩版本 |
---
## 完整示例
### 基本提交
```
feat(blockpuzzle): 添加方块旋转功能
```
### 带 body 的提交
```
fix(huoshan): 修复语言粒子碰撞后不消失的问题
粒子在碰撞检测回调中未正确归还对象池,
导致粒子数量持续增长引发帧率下降。
```
### 带 footer 的提交
```
feat(dialog): 支持对话中插入表情动画
在 Yarn 指令中新增 <<expression>> 命令,
可在对话气泡旁播放角色表情动画。
Closes #42
```
### 美术资源提交
```
art(huoshan): 替换火山头部高清模型和贴图
```
### 场景配置提交
```
scene(huoshan): 调整 HuoShanFixScene 灯光和后处理参数
```
### 多模块/全局变更(省略 scope)
```
chore: 升级 Unity 到 2022.3.20f1
```
### WIP 提交(临时保存,合并前需 squash)
```
chore: WIP 火山情绪模块原型开发中
```
---
## 对照改进表
以下是项目历史提交的改写示例,便于理解规范的实际效果:
| 原始提交 | 规范写法 |
|---------|---------|
| 提交 | feat(huoshan): 添加石头维修交互逻辑 |
| bugfix | fix(dialog): 修复对话跳过时崩溃的问题 |
| 美术资源替换 | art(huoshan): 替换火山头部模型和贴图 |
| 细碎的完善 | fix(ui): 修复设置面板滑块响应区域偏移 |
| 临时提交一下 | chore: WIP 火山情绪模块原型 |
| 更新 | feat(clue): 添加线索收藏功能 |
| 石头手感调整 | feat(huoshan): 优化石头拖拽手感和物理反馈 |
| 问题修复 | fix(scene-mgmt): 修复场景切换时音频未停止的问题 |
| 短按改长按 | feat(ui): 将确认按钮交互从短按改为长按 |
| text adj | yarn(dialog): 调整 D1S 对话文本措辞 |
---
## 常见问题
### Q: subject 用中文还是英文?
用**中文**。本项目团队以中文为主要工作语言,中文 subject 可以更准确、更快地传达变更内容。`type``scope` 保持英文以兼容工具链。
### Q: 提交粒度怎么把握?
- 一次提交只做一件事(One commit, one purpose
- 避免在一个提交中混合功能开发、Bug 修复和资源替换
- 如果改动过大,考虑拆分为多个提交
### Q: 什么时候可以用 WIP 提交?
- 仅在需要临时保存进度时使用
- 合并到 develop 之前,必须用 `git rebase -i` 将 WIP 提交 squash 为有意义的提交
### Q: Merge Commit 消息怎么写?
使用默认的 merge commit 消息即可(如 `Merge branch 'feature/xxx' into 'develop'`),无需修改。
### Q: Unity 场景文件(.unity)和 Prefab 变更归哪个 type
- 纯场景配置调整(灯光、摄像机、布局) → `scene`
- 添加新 Prefab / 新功能对象到场景 → `feat`
- 替换场景中的美术资源 → `art`