P4管理Unreal Engine 代码
准备引擎开发环境
下载代码
unreal engine代码库在github上,要下载github上的源代码,需要具有github账号和虚幻引擎的订阅账号,并且将二者相关联。步骤如下。
1. 登陆www.github.com
2. 使用虚幻引擎订阅账号登陆unrealengine.com
3. 点击CONNECTIONS菜单-> ACCOUNTS->GITHUB

4. 一路按照提示操作,最终会收到一个github的通知邮件,邀请参加EpicGames Organization。点击链接,就可以看到源码页面。详情参见附录2
5. 虚幻引擎的代码地址在https://github.com/EpicGames/UnrealEngine,可以使用 github Desktop工具克隆下来。以Release分支为例,仓库大小约为12G,分支文件约为1.39G,文件个数约12万左右。若网络状况不佳,可能需要尝试几次才能下载下来。
安装开发工具
1. 虚幻引擎可以使用Visual Studio 2017,Visual Studio 2019。可以使用社区版,安装时注意需要勾选以下几个选项:
Game Development with C++
Unreal Engine Installer
Nuget Package Manager
2. 点击Setup.bat。脚本会自动去下载一些二进制文件依赖项,目前大约有4G左右
3. 点击GenerateProjectFiles.bat文件生成项目文件。这个脚本需要去查找机器上安装的Visual Studio版本。默认会查找最新的Visual Studio版本,如果希望指定版本,可以修改Engine\Build\BatchFiles\ 路径下的两个批处理文件,指定正确的路径。
GetMSBuildPath.bat
GenerateProjectFiles.ba
说明:Visual Studio 2017还需要安装.netframwork 4.6.2,否则此步骤可能报错。
将代码提交到p4
p4ignore设置
因运行了1.2节的配置脚本后,引擎占用空间会膨胀到30GB左右,所以若全部提交到仓库里,会造成无谓的浪费。从github Clone下来的仓库会自带一个.gitignore文件,参照这个配置文件,略作修改,即可作为p4ignore配置。
如下图右侧是p4ignore.txt需要做的对应改动:
!*/ 这一行注释掉,因为这个写法在p4中含义与git的不同
增加*.xcodeproj/ 代表忽略包含.xcodeproj字样的目录
[Dd]esktop.ini 显示展开为两行
增加.git 忽略.git 相关文件

将p4ignore.txt放到.gitignore所在目录,并在客户端执行p4 set P4IGNORE=p4ignore.txt后,则增加文件到p4时会自动加载p4ignore.txt文件中的忽略配置项。p4 ignores命令可以用来检查忽略配置的效果,例如:
-v 选项可以查看忽略文件展开后的效果
F:\GitHub\UnrealEngine>p4 ignores -v
…
#LINE 245:/Engine/Binaries/ThirdParty/USD/**
…
-v -i搭配可以查看一个文件为什么被忽略,或者为什么未被忽略
F:\GitHub\UnrealEngine>p4 ignores -v -i ./p4ignore.txt
f:\GitHub\UnrealEngine\p4ignore.txt not ignored by f:\GitHub\UnrealEngine\p4ignore.txt:68:!*.txt
提交文件到p4
1. 因为文件大约有12万个,为了加速提交,可以在服务器端打开并行提交配置。
any: net.autotune = 1
any: net.parallel.max = 10
any: net.parallel.submit.threads = 5
any: net.parallel.threads = 5
p4v侧也确认允许并行提交
2. 在p4上创建一个mainline 类型的stream用来管理引擎代码。
3. 创建一个工作区,根目录指向第1章节里下载好的代码。


注意:工作区选项里请勾选Allwrite,以便后续从github更新内容,否则p4会将本地的文件置为只读,后续更新依赖项时可能会报错。
4. 在p4v里,或者使用命令行,将引擎代码标记为add,在进行这一步之前,请确保参照2.1节内容,正确配置了p4ignore,否则会加入很多不需要的文件。
在引擎代码根目录下执行p4 add命令,为了加入名字带有特殊符号的文件,需要添加-f选项。
在p4v里点击add增加文件时,如遇提示文件被忽略,或者文件名带有特殊符号,点击确认继续添加即可。
5. 点击submit按钮或者在命令行上执行p4 submit -d “descripton”, 即可提交成功。默认使用5线程提交,若服务器性能较好,网络带宽充裕,也可以启用更多线程提交。
使用引擎代码
1. 分支策略
为了方便后续更新引擎代码到p4,不直接在原始分支上进行修改,可以新创建一个分支用于代码修改,例如:新建一个ue_edited分支用于代码开发。

其他用户下载代码时,无需再次从Github上下载巨大的repo库(超过10G),仅需直接从p4上下载ue_edited分支(约1.3G)即可。开启多线程sync后,一两分钟即可下载完成,比直接从Github下载速度有很大提高。
2. 更新github上的修改
在章节1.1下载github代码的机器上,将github上相应分支的最新修改获取(fetch或者pull)下来。确保2.1中提到到p4ignore.txt文件存在,并妥善设置了P4IGNORE。在p4v中点击“reconcile offline work…”, 或者在命令行上执行reconcile命令,可以将更新的文件自动识别出来。
识别之后,可以提交到p4仓库的ue分支里。
说明:提交p4后,如果本地有大量文件的修改日期发生变化,则reconcile操作不得不对所有发生变化的文件进行hash计算,这个操作可能非常耗时。所以不要在章节1.1下载github的机器上进行分支切换等操作。
3. 将ue分支的更新merge到ue_edited分支。
附录:
https://docs.unrealengine.com/4.27/zhCN/ProgrammingAndScripting/ProgrammingWithCPP/DownloadingSourceCode/
https://www.unrealengine.com/en-US/ue4-on-github?sessionInvalidated=true