# Git 提交规范 本文档定义 AIBIS Dream 项目的 Git 提交消息格式、分支命名规范与最佳实践。 --- ## 提交消息格式 采用 [Conventional Commits](https://www.conventionalcommits.org/) 规范,结构如下: ``` (): [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。 --- ## 分支命名规范 ``` /<简短英文描述> ``` ### 分支类型 | 前缀 | 用途 | 示例 | |------|------|------| | 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 指令中新增 <> 命令, 可在对话气泡旁播放角色表情动画。 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`