2025-08-31

1. 建立工程目录

工程名字叫做AiGame,使用下面的工程目录,先建立这样的文件夹结构

AiGame/
├── Houdini/
│   ├── backup/
│   ├── examples/
│   ├── geo/
│   ├── packages/
│   │   ├── AiGame
│   │   ├── AiGamePackage.json
│   ├── AiGame.hip
├── Resources/
│   ├── 3DModels/
│   ├── Reference/
│   ├── ScansLibrary/
│   └── Textures/
├── SourceContent/
│   └── AiGame/
│       ├── Foliage
│       ├── Landscape
│       └── Textures
├── TutorialFile/
├── Unreal/
│   ├── Config/
│   ├── Content/
│   ├── DerivedDataCache/
│   ├── Intermediate/
│   ├── Plugins/
│   ├── Saved/
│   ├── Source/
│   └── AiGame.uproject
└── README.md

这里Houdini后面用,先放着

2. Git托管项目

  • 初始化项目

目前为止,本地的项目目录就完成了,但是我们还想要

  • 版本管理
  • 远程托管和备份

考虑到游戏项目会有很多比较大的二进制文件,所以需要找一个免费容量比较大的代码托管平台,而且网络畅通。对比了几个主流的

  • Github:网络不行
  • Gitee:单仓库免费容量只有500mb
  • CNB:网络畅通,组织Git免费100GB,对象存储100GB,还有免费的CPU和GPU核时方便做CI/CD和云IDE。

综上所述,腾讯旗下的CNB - Cloud Native Build完胜。

建立云端仓库

  1. 首先我们现在cnb创建一个组织
  2. 然后在组织下面创建一个仓库,名称就可以叫做AiGame
  3. 得到地址https://cnb.cool/<组织名称>/AiGame
  4. 然后创建一个仓库令牌,记住GitUserName和Token下一步要用

初始化本地仓库

首先安装Git,可以去官网找到对应版本:Git 对应的可以安装GUI图形化界面Sourcetree | Free Git GUI for Mac and Windows 然后去到项目的根目录,右键打开git bash,输入一下命令

  1. git init . 该命令用于在当前所在的本地目录初始化一个全新的Git仓库。执行后,会在当前目录下创建一个隐藏的.git文件夹,这个文件夹存储了Git仓库的所有元数据(如版本历史、分支信息、配置等),标志着当前目录正式成为Git可管理的仓库,后续可在此目录下进行代码的提交、分支管理等Git操作。
  2. git remote add origin https://cnb.cool/<组织>/AiGame 此命令的作用是为本地初始化的Git仓库添加一个远程仓库的关联,其中“origin”是远程仓库的默认别名(后续操作中可通过该别名指代对应远程仓库,无需重复输入完整URL)
  3. git config —local user.name HartHat 该命令用于配置当前本地Git仓库(—local参数指定配置作用域为当前仓库,仅对该仓库生效)的用户名称为“HartHat”。Git在记录代码提交历史时,会将该用户名与提交操作关联,便于识别每次提交的操作者,是Git提交代码的必要配置之一。
  4. git config —local user.email “ZMiOkQCe02Ei1BYH3ARfUJ+HartHat@noreply.cnb.cool 与上一条命令类似,此命令用于配置当前本地Git仓库的用户邮箱为,同样会被记录在提交历史中,且通常用于Git平台(如该远程仓库所属平台)的身份关联、通知推送等功能,也是Git提交代码的必要配置。 这里随便配置默认给的也可以用自己真实的邮件。
  5. git config credential.helper store 该命令用于配置Git的凭证辅助工具为“store”模式。在Git与远程仓库通过HTTPS协议交互时,通常需要输入用户名和密码(或访问令牌)进行身份验证,配置此模式后,Git会将输入的凭证(用户名+密码/令牌)存储在本地(默认存储路径多为用户目录下的.git-credentials文件),后续再次与该远程仓库交互时,无需重复输入凭证,可自动读取存储的凭证完成验证,提升操作便捷性。

推送本地修改到远程仓库

  1. 接下来我们先修改一下根目录下README.md文件,写一个简单项目介绍。
  2. git add README.md 将此文件加入git stage
  3. git status 查看当前文件状态
  4. 可以看到reademe已经加入stage,等待推送,但是其他文件都还未被管理。
  5. git commit -m 初始化项目 提交第一个项目更改
  6. git log 可以看到提交树
  7. git push —set-upstream origin master 把当前master分支推送到origin并设置其为upstream
  8. 这时候会弹窗需要令牌,输入我们之前在cnb网站上申请的令牌。
  9. 完成,去到网页https://cnb.cool/<组织名称>/AiGame可以看到我们的文件已经上传了服务器
  10. 接下来我们把工程文件目录都推送到服务器,如果文件夹里面是空的,可以建立一个空的txt文本占位,方便下面进行git操作。
  11. git add . 把所有文件加入git stage
  12. git commit -m 初始化项目结构 然后git push 到远端服务(这里缺失了Unreal文件夹,是因为里面是空的, 下一步我们创建Unreal工程来填充它)

Git Tips:

  1. 永远可以建立一个分支的备份来做操作,操作错了就切换分支就好了。
  2. 详细的Git教程可以看 Pro Git(中文版)
  3. 网页版Learn Git Branching 学习

3. 初始化Unreal项目文件

  • 安装visual studio
  • 创建一个第三人称项目
  • 使用Git配合LFS来完成项目托管服务。(需要一个在线服务器能够支持我的文件托管
  • LFS管理

编程环境

先安装一个编程环境和ide:

  1. 下载visual studio 2022: 免费的开发人员软件和服务 - Visual Studio
  2. 如何配置VS:为虚幻引擎C++项目设置Visual Studio开发环境 | 虚幻引擎 5.6 文档 | Epic Developer Community
  3. VS中Unreal使用技巧:虚幻引擎Visual Studio使用技巧 | 虚幻引擎 5.6 文档 | Epic Developer Community
  4. VS中介绍UnrealEngine:在 Visual Studio 中打开 Unreal Engine 项目 | Microsoft Learn

创建UE项目

UE创建一个项目, 本地运行一下就ok。为了方便起见,就用新版本5.6

  1. 去官网下载EpicLuncher启动器:最强大的实时3D创作工具 - Unreal Engine
  2. 找到引擎,下载Unreal最新版本的引擎,并且启动
  3. 选择第三人称模板,C++项目,位置是选择一个临时位置,不要选择项目文件夹,名称是AiGame
  4. 确定后编辑器和vs都会打开
  5. 点击Play,可以看到简单的第三人称游戏就开始了
  6. 然后我们把临时文件夹里面的所有内容拷贝到项目下面Unreal文件夹下:(拷贝后可以再运行一遍AiGame.uproject确保一切正确)
AiGame/
├── Unreal/
│   ├── Config/
│   ├── Content/
│   ├── DerivedDataCache/
│   ├── Intermediate/
│   ├── Plugins/
│   ├── Saved/
│   ├── Source/
│   └── AiGame.uproject

关于更多UnrealEngine的文档和帮助可以见 入门指南 | 虚幻引擎 5.6 文档 | Epic Developer Community

更新文件到Git

我们打开SourceTree,可以看到多了一千多个文件在Unreal目录下,其中有些我们并不想进行版本管理和上传服务器,他们可能是一些缓存和编辑器本地文件。

  1. 此时,需要配置一个gitignore文件来告诉git那些符合哪些规则的文件不被管理。
  2. 可以去网上搜索一个模板比如GitHub - Cowland-Game-Studios/Unreal-Git-Ignore-and-Attributes-Template.,或者github官方gitignore/UnrealEngine.gitignore at main · github/gitignore · GitHub。我们把仓库里面gitignore文件和gitattributes文件拷贝到本地根目录。
  3. 此时git 追踪的unstage的文件数量减少到800多个。
  4. 这里提到LFS,是的,我们除了屏蔽文件,我们还需要用gitattributes文件标识LFS管理的二进制文件。比如图片声音Uasset这些文件可能很大,不适合进行git管理。关于LFS介绍可以看Git LFS 操作指南 - Gitee.com
  5. git lfs install 首先初始化一下lfs。(这个操作是全局的,如果本地电脑已经配置过LFS 就不需要每个项目都执行)
  6. git add . 确保所有通过筛选的文件都正确加入stage
  7. git lfs ls-files 查看当前正在被追踪的lfs文件
    1. 没有add到stage的新文件是看不到的
    2. 如果有文件已经commit了,后来才想转为lfs,那么要更新git lfs track再用git lfs migrate import --include-ref=master --include="*.<文件后缀>" 然后强制推送 git push origin master --force
  8. 可以看到非lfs文件是正常的,lfs文件是一个hash值
  9. git commit -m 加入Unreal项目 这样我们就完成了一个基本unreal项目的git管理
  10. git push 推送到远端

我们可以看到gitbash里面推送的详情: 本地master分支就推送到远端master分支 我们也可以在web查看

控制lfs历史长度:虽然lfs在git里面只有一个小文本的指针用来指向实际文件,但是我们还是关心如果大文件版本数量过多,会不会爆仓,如何定期减少一些历史记录呢。

本地:

# 1.列出所有 LFS 对象(确认要删除的版本) 
git lfs ls-files --all 
# 2.删除特定文件的旧版本(需 LFS 服务器权限) 
git lfs prune --verbose --verify-remote --force \ --older-than="2 years" # 保留近2年版本

远程: 仓库会自动 GC 清除那些“真的”可以清除的,不存在任何历史提交里面的 lfs 文件。所以可以清除不用的lfs文件提交一次,然后合并所有历史提交。之后等cnb自动GC。

#这样合并历史提交
git reset --hard HEAD~总提交数-1
git merge --squash HEAD@{1}
git commit -m "Update"
git push --force

Warning

  • 对于包含LFS的Commit,最好保证每个都是将来可能会回滚有用的,否则就合并Commit。减少不必要的存储。
  • 最好每个功能和修改都单独拉一个分支出来操作,确认当前小版本可运行后再合入主分支

4. 测试从UE直接进行版本管理

  • 从unreal editor修改文件并且直接提交

使用git进行代码的文件管理我们都很熟悉了,对于二进制文件我们使用了lfs,那么直接用unreal的git版本控制可以方便的进行文件管理吗。这里进行一个测试。

首先我们在ue编辑器右下可以找到版本控制,开启unreal内的git版本控制: 这时候我们可以直接在UE里面对资产进行Git控制 测试一下 首先找到场景中绿色物体的材质实例 把他修改成紫色的。保存。

使用git没有changelist的概念,目前ue客户端也不支持git控制下的changelist。使用p4可以用不同的changelist来保存不同的文件修改。

所以我们修改了文件后直接点击submit 然后提交看看 sourcetree可以看到提交commit。

可以看到Unreal对Git的支持聊胜于无。还是不如直接用Git软件来操作把。如果我们想要回退,记得首先关闭Unreal编辑器,操作完再打开即可回退到上一版本。

Tips: 对于个人来说,目前用git+git lfs 足够做一个版本控制和云端备份了。对于团队来说,二进制文件还是建议用Perforce来管理。

其他

拓展阅读: