b2820ec024
- 新增 problem-solving skill:固化「问题分析→工作记录→知识沉淀」9步流程与3模板 - 新建 docs/knowledge/ 经验知识库(README/INDEX/临时方案登记/坑-UE5引擎含2条迁移示例) - GIT-GUIDE 补 §2.7 临时代码 [TEMP-INVESTIGATE] 约定、§2.8 fix 提交引用 issue - CLAUDE.md 项目管理段加问题管理引用 - 配套 Gitea 标签 type:bug / type:investigation(后台已建)
9.3 KiB
9.3 KiB
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 提交示例
# 新功能
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(由引擎自动生成)
2.7 临时代码与调查脚本(验证完即删)
排查问题时往往需要写临时验证代码、测试脚本、一次性工具。约定如下(详见 problem-solving skill):
- 默认不进仓库:临时代码只在本地 / 临时分支跑,验证完删除。
- 若必须 commit(如要在 UE5 里跑):用
wip类型,message 标注[TEMP-INVESTIGATE: issue#XX],验证后git revert或删除该 commit。 - 文件标记:文件名前缀
tmp_/dev_,文件头注释// [TEMP-INVESTIGATE: issue#XX] 验证后删除。 - 清理检查:关闭 issue 前执行
grep -r "TEMP-INVESTIGATE" Source/ tools/,确认无残留。 - 保留什么:结论 + 关键代码片段以代码块形式写入 issue 评论,不保留可运行文件。
原则:删除的是 artifact,保留的是 insight。
2.8 fix 提交引用 issue
Bug 修复 / 问题排查类提交,在 body 里引用对应 Gitea issue 号,便于溯源:
git commit -m "fix(camera): 修复穿墙时摄像机卡顿问题
issue #42"
三、版本号规范
采用简化语义化版本:
v主版本.次版本.修订号
v0.1.0 ← 第一个可玩原型
v0.2.0 ← 核心玩法成型
v0.3.0 ← 内容填充阶段
...
v1.0.0 ← 正式发布
- 主版本:重大里程碑(原型、Alpha、正式版)
- 次版本:新系统/大功能完成
- 修订号:Bug 修复、小调整
四、常用命令速查
# 查看当前状态
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,推荐)
ssh-keygen -t ed25519 -C "starmen1265@163.com" -f ~/.ssh/id_ed25519 -N ""
⚠️ 优先使用 ED25519 而非 RSA。部分 Git 服务器对 RSA 密钥兼容性较差。
添加公钥到 Gitea
- 查看公钥:
cat ~/.ssh/id_ed25519.pub - 复制完整输出
- 登录 Gitea Web UI → 设置 → SSH/GPG 密钥 → 添加密钥
- 粘贴公钥内容,保存
设置远程地址
# 查看当前远程地址
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
首次连接服务器需要信任主机密钥:
ssh-keyscan -p 2223 192.168.1.22 >> ~/.ssh/known_hosts
❌ Permission denied (publickey)
排查步骤:
# 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:
git remote set-url origin ssh://sc-gitea@192.168.1.22:2223/starmen1265/ChildHood.git
🔧 SSH 使用了错误的密钥
如果服务器同时有 RSA 和 ED25519 密钥,SSH 可能优先尝试 RSA。可以指定密钥:
# 单次指定
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