bcc146584b
- 记录 Gitea 服务器信息(SSH 用户名 sc-gitea,端口 2223) - 添加 ED25519 密钥生成与配置步骤 - 记录实际遇到的认证问题及解决方案(用户名/端口/密钥格式) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
8.9 KiB
8.9 KiB
ChildHood - Git 规范
本文档规定 ChildHood 项目的 Git 分支策略和提交规范。 适用场景:单人独立开发 + UE5.7.4
一、分支策略
采用轻量级 Feature Branch 模型,避免企业级复杂流程,保持 main 分支随时可玩。
1.1 分支总览
main ──────────────────────────────────────── 稳定主线
│
├── feature/player-movement ───→ 合并后删除
├── feature/inventory-system ──→ 合并后删除
├── fix/camera-clipping ───────→ 合并后删除
├── prototype/procedural-gen ──→ 实验完即删
└── release/v0.1 ──────────────→ 永久保留
1.2 分支类型
| 分支 | 前缀 | 用途 | 合并目标 | 生命周期 |
|---|---|---|---|---|
| 主线 | main |
稳定可玩版本,每次提交都能编译运行 | — | 永久 |
| 功能 | feature/ |
新系统、新功能开发 | main |
完成后删除 |
| 修复 | fix/ |
Bug 修复 | main |
完成后删除 |
| 原型 | prototype/ |
技术验证、玩法实验 | 合并或丢弃 | 实验完即删 |
| 发布 | release/ |
版本发布标记,只从 main 切出 |
— | 永久保留 |
1.3 命名规范
格式:<类型>/<简短描述>,全小写,用连字符分隔单词。
# ✅ 好的命名
feature/player-movement
feature/inventory-system
feature/dialogue-tree
fix/camera-clipping-through-walls
fix/enemy-ai-stuck-on-navmesh
prototype/procedural-dungeon
release/v0.1
# ❌ 不好的命名
my-new-feature
fix-bug
test
feature/AddPlayerMovement
1.4 工作流程
1. 开始新功能
git checkout main
git pull
git checkout -b feature/xxx
2. 开发过程中(随时提交)
git add .
git commit -m "wip(xxx): 进度描述"
3. 功能完成,测试通过
git checkout main
git merge feature/xxx
git branch -d feature/xxx # 删除已合并分支
4. 到达里程碑
git checkout main
git tag -a v0.1.0 -m "第一个可玩原型"
git checkout -b release/v0.1
git push origin release/v0.1
1.5 核心原则
main永远可玩:坏了就留在 feature 分支继续改,不要合并进 main- 功能分支粒度:一个分支做一件事,不要在一个分支里同时做多个系统
- 原型不怕乱:
prototype/分支随便写,验证完再决定合并还是丢弃 - 定期清理:已合并的 feature/fix 分支及时删除,避免分支堆积
二、提交规范
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(由引擎自动生成)
三、版本号规范
采用简化语义化版本:
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