Unreal Editor 中提供的 Source Control 可以通过 Git 实现蓝图项目的 版本提交 / 版本比对 / 撤销修改 等一些基本功能,远远比不上 Git Bash 强大,但是 BluePrint 间的 Diff 还是很好用的。
在执行 UE 中的 Git 版本控制之前最好先在 Git Bash
中进行一些 Git 全局的初始化操作。
1 | $ git config --global user.name "Your Name" |
生成 SSH Key(邮件地址换成你自己的邮件地址):
1 | $ ssh-keygen -t rsa -C "[email protected]" |
然后一路 Enter(或者你自己设置密码),执行完毕后会在 C:\Users\${userName}\
(linux 则是在~/ 下) 下创建一个 .ssh
目录,其中有 id_rsa
和id_rsa.pub
两个文件。
id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人(保存到 Github/GitLab 的 SSH Key 中)。
更多的 Git Bash
下的一些操作可以看这篇文章——Git 快速上手指南。
打开 UE 项目,在虚幻编辑器中点击Source Control
选中connect to Source Contorl
在弹出的窗口中 Provider
选项中选择 Git
并在 Git Path
中填入系统中 git.exe
的绝对路径。
选中 Add a .gitignore file
,然后点击initialize project with Git
,最后点击Accept Settings
完成初始化。
现在,可以看到 Source Control
上出现了绿色的圆圈上有上下两个箭头。
这时我们需要 commit
的一次我们的工程 (同时也是对所有的文件改动进行提交。在这里因为是初始化,所以需要提交一次所有的文件)。点击Source Control
选中Submit to Source Control
。
在弹出的窗口中填入提交信息 (等同于 git 中的add
与commit
),然后点 OK。
Source Control
初始化完成,现在我们可以测试一下。
新建一个蓝图类 EmptyActor,只是测试我们写入一个节点。
然后在 Content Browser
中右键点击该蓝图类,Source Control
->Check In
对该蓝图类做一次 初始化提交
。
在弹出的窗口中填入相关的信息(commit),然后点 OK。
现在我们可以再次编辑 EmptyActor 这个蓝图类,但是我们不提交(don’t check in)。
可以通过 diff
来检测我们此次相较于上次提交的版本做了哪些修改:在该蓝图类上右键 Source Control
->Diff Against Depot
,会弹出diff
窗口。我们可以看到我们在该蓝图类中修改了哪些东西。
在蓝图类上右键 ->Source Control
下共有以下几个选项:Check In
/Refresh
/History
/Diff Against Depot
/Revert
,其中 Check In
和Diff Against Depot
的用途上面已经说过了。
Check In提交当前文件。
Refresh刷新当前文件 (蓝图类) 状态(status)。
History查看提交 (Check In) 的历史,也可以提供当前未提交改动与某一提交版本的区别。
Diff Against Depot查看当前未提交 (Check In) 改动与上次提交版本的区别。
Revert丢弃当前未提交 (Check In) 改动 (就是回滚到上一次 Check In 时的状态)。注意:Revert 之后需要重启引擎才会生效,这应该是 UE(4.12.5) 的一个 BUG。Revert的效果等同于直接在 Git Bash 下执行git checkout -- ${filename}
。
UE 中集成的 Source Control::Git 是不能够直接在虚幻编辑器中直接回滚到某一提交版本的,总的来说可供操作的功能还比较少 (蓝图的节点比对还是很爽的),但是可以结合Git Bash
来使用 Git 的其他操作(版本回退 / 分支管理 / 远程推送等等)。
需要注意的是,使用 Git Bash
来进行版本回退的话一定要关闭虚幻编辑器,因为回退需要对文件进行改动,而虚幻编辑器正在占用 (打开) 该文件 (蓝图类),而对未占用(打开) 的文件 (蓝图类) 进行版本回退也需要重启虚幻编辑器才可以(不重启不会看到回退效果)。
使用 Git 来推送 (push) 和拉取 (pull) 远程分支的话需要在 Git Bash 中执行。同样也需要关闭虚幻编辑器。注意编辑 .gitignore
来忽略不必要的文件来节省 push/pull 时间。