docs(common): Git规范文档迁移至docs/common

This commit is contained in:
2026-06-16 19:01:55 +08:00
parent d7960b264e
commit f59a5e0700
3 changed files with 2 additions and 141 deletions
+312
View File
@@ -0,0 +1,312 @@
# ChildHood - Git 规范
> 本文档规定 ChildHood 项目的 Git 分支策略和提交规范。
> 适用场景:单人独立开发 + UE5.7.4
---
## 一、分支策略
采用 **develop 长期开发分支模型**,适合单人开发 + 多 AI Agent 协作场景。所有 agent 在 `develop` 上工作,迭代结束时通过 PR 合并回 `main`。
### 1.1 分支总览
```
main ──────────── 永远可玩可编译,受保护,禁止直接推送
│
│ PR (Gitea) ← 里程碑/迭代结束时,PM 发起
│
└── develop ──── 长期分支,所有 agent 的日常工作分支
│
├── 程序1 提交代码
├── 策划 提交文档
├── 程序2 提交代码
└── 迭代就绪 → PR develop→main
```
### 1.2 分支类型
| 分支 | 用途 | 生命周期 |
|---|---|---|
| `main` | 稳定可玩版本,受保护 | 永久 |
| `develop` | 日常开发,所有 agent 共用 | 永久 |
| `prototype/` | 技术验证、玩法实验 | 实验完即删 |
| `release/` | 版本发布标记,只从 main 切出 | 永久保留 |
### 1.3 工作流程
```
1. 开始工作(agent 自动执行)
bash .claude/scripts/git-workflow.sh ready
2. 开发并提交
bash .claude/scripts/git-workflow.sh commit <type> <scope> "描述"
3. 推送到远程
bash .claude/scripts/git-workflow.sh push
4. 迭代完成,PM 创建 PR
bash .claude/scripts/git-workflow.sh release "迭代名称"
5. 用户在 Gitea 合并后同步
bash .claude/scripts/git-workflow.sh post-release
```
### 1.4 核心原则
- **`main` 永远可玩**:通过 develop → main PR 合并,不直接推送
- **develop 是工作台**:所有 agent 在 develop 上并行工作
- **不同文件不冲突**:各 agent 修改不同文件,可真正并行
- **同一文件需协调**:两个 agent 修改同一文件时需顺序执行
---
## 二、提交规范
### 2.1 提交消息格式
```
<type>(<scope>): <subject>
<body>(可选,多行说明)
```
- **subject**:不超过 50 个字符,简明扼要
- **body**:每行不超过 72 个字符,解释"做了什么"和"为什么"
- 使用中文描述,技术术语保留英文
### 2.2 Type 类型标签
| Type | 含义 | 使用场景 |
|---|---|---|
| `feat` | 新功能 | 新增系统、机制、玩法 |
| `fix` | Bug 修复 | 修复已知问题 |
| `art` | 美术资源 | 模型、贴图、材质、动画导入 |
| `level` | 关卡/场景 | 关卡搭建、场景编辑 |
| `audio` | 音效/音乐 | BGM、SFX、语音导入 |
| `bp` | 蓝图逻辑 | 蓝图节点修改、逻辑调整 |
| `refactor` | 重构 | 不改变功能的结构优化 |
| `config` | 项目配置 | 引擎设置、插件配置、项目参数 |
| `docs` | 文档 | README、设计文档、注释 |
| `wip` | 进行中 | 未完成的工作进度保存 |
### 2.3 Scope 范围标签(可选)
按游戏系统或模块划分:
```
player 玩家角色
enemy 敌人/AI
combat 战斗系统
ui UI 界面
camera 摄像机
inventory 背包/物品
dialogue 对话系统
quest 任务系统
save 存档系统
audio 音频系统
animation 动画系统
ai AI 行为树/状态机
level 关卡
vfx 视觉特效
```
### 2.4 提交示例
```bash
# 新功能
git commit -m "feat(player): 实现角色跳跃和二段跳"
# 带 body 的详细提交
git commit -m "feat(combat): 实现基础连击系统
- 添加三段连击动画蒙太奇
- 实现动画通知触发伤害判定
- 连击窗口时间可配置"
# Bug 修复
git commit -m "fix(camera): 修复穿墙时摄像机卡顿问题"
# 美术资源
git commit -m "art(environment): 添加草地和树木模型"
# 蓝图修改
git commit -m "bp(enemy): 实现巡逻-追击-攻击状态机"
# 关卡搭建
git commit -m "level(chapter1): 第一章关卡白盒搭建完成"
# 进行中
git commit -m "wip(crafting): 合成系统UI初步框架"
# 项目配置
git commit -m "config: 启用Nanite和Lumen,设置画质预设"
# 重构
git commit -m "refactor(inventory): 拆分背包数据层与UI层"
```
### 2.5 提交粒度建议
| 操作 | 粒度 |
|---|---|
| 蓝图逻辑 | 按功能点提交,不要一次提交多个系统 |
| 关卡编辑 | 按区域/房间提交 |
| 美术资源导入 | 按类型/角色分批提交 |
| C++ 代码 | 按逻辑单元提交 |
| 材质/贴图 | 按材质组提交 |
### 2.6 UE5 特别注意
- **蓝图与 C++ 分开提交**:避免同一提交中混合两者,方便出问题时 revert
- **二进制文件提交**:`.uasset`、`.umap` 无法 diff,commit message 要写清楚改了什么
- **不要提交以下目录**(已被 .gitignore 排除):
- `Binaries/`、`Intermediate/`、`Saved/`、`DerivedDataCache/`
- `.vs/`、`*.sln`(由引擎自动生成)
---
## 三、版本号规范
采用简化语义化版本:
```
v主版本.次版本.修订号
v0.1.0 ← 第一个可玩原型
v0.2.0 ← 核心玩法成型
v0.3.0 ← 内容填充阶段
...
v1.0.0 ← 正式发布
```
- **主版本**:重大里程碑(原型、Alpha、正式版)
- **次版本**:新系统/大功能完成
- **修订号**:Bug 修复、小调整
---
## 四、常用命令速查
```bash
# 查看当前状态
git status
git log --oneline --graph --all
# 开始新功能
git checkout -b feature/xxx
# 暂存当前工作(需要临时切分支时)
git stash
git stash pop
# 撤销上次提交(保留修改)
git reset --soft HEAD~1
# 强制同步远程(仅限个人项目)
git fetch origin
git reset --hard origin/main
```
---
## 五、远程仓库配置
### 5.1 服务器信息
| 项目 | 值 |
|---|---|
| 平台 | Gitea(自建) |
| HTTP 地址 | `http://192.168.1.22:8418/starmen1265/ChildHood.git` |
| SSH 地址 | `ssh://sc-gitea@192.168.1.22:2223/starmen1265/ChildHood.git` |
| SSH 端口 | `2223`(非默认 22) |
| SSH 用户名 | `sc-gitea`(非默认 `git`) |
### 5.2 SSH 配置
#### 生成密钥(ED25519,推荐)
```bash
ssh-keygen -t ed25519 -C "starmen1265@163.com" -f ~/.ssh/id_ed25519 -N ""
```
> ⚠️ 优先使用 ED25519 而非 RSA。部分 Git 服务器对 RSA 密钥兼容性较差。
#### 添加公钥到 Gitea
1. 查看公钥:`cat ~/.ssh/id_ed25519.pub`
2. 复制完整输出
3. 登录 Gitea Web UI → 设置 → SSH/GPG 密钥 → 添加密钥
4. 粘贴公钥内容,保存
#### 设置远程地址
```bash
# 查看当前远程地址
git remote get-url origin
# 切换到 SSH(注意用户名是 sc-gitea,端口是 2223)
git remote set-url origin ssh://sc-gitea@192.168.1.22:2223/starmen1265/ChildHood.git
```
### 5.3 常见问题排查
#### ❌ `Host key verification failed`
首次连接服务器需要信任主机密钥:
```bash
ssh-keyscan -p 2223 192.168.1.22 >> ~/.ssh/known_hosts
```
#### ❌ `Permission denied (publickey)`
排查步骤:
```bash
# 1. 测试 SSH 连接,查看详细日志
ssh -vvv -p 2223 sc-gitea@192.168.1.22 "exit"
# 2. 检查密钥是否被 offer
# 在日志中找 "Offering public key" 行
# 确认使用了 id_ed25519 而不是 id_rsa
# 3. 对比本地和服务器的密钥指纹
ssh-keygen -lf ~/.ssh/id_ed25519.pub
# 然后到 Gitea Web UI → 设置 → SSH/GPG 密钥 查看指纹是否一致
```
常见原因:
| 原因 | 解决方法 |
|---|---|
| 远程地址用了 `git@` 而非 `sc-gitea@` | 改用正确的用户名(见 5.1) |
| SSH 端口用了默认 22 而非 2223 | URL 中指定端口 `ssh://sc-gitea@host:2223/...` |
| RSA 密钥被服务器拒绝 | 重新生成 ED25519 密钥 |
| 公钥未添加到 Gitea | Web UI → 设置 → SSH/GPG 密钥 → 添加 |
| 公钥格式不完整 | 确保从 `ssh-ed25519` 复制到字符串末尾,无截断 |
#### ❌ `Authentication failed`(HTTP 方式)
HTTP 方式需要用户名密码认证,建议切换到 SSH:
```bash
git remote set-url origin ssh://sc-gitea@192.168.1.22:2223/starmen1265/ChildHood.git
```
#### 🔧 SSH 使用了错误的密钥
如果服务器同时有 RSA 和 ED25519 密钥,SSH 可能优先尝试 RSA。可以指定密钥:
```bash
# 单次指定
git -c core.sshCommand="ssh -i ~/.ssh/id_ed25519 -p 2223" push origin main
# 或全局配置(推荐)
# 编辑 ~/.ssh/config,添加:
Host 192.168.1.22
Port 2223
User sc-gitea
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
```