在 UE 中使用 Git 进行版本控制

Unreal Editor 中提供的 Source Control 可以通过 Git 实现蓝图项目的 版本提交 / 版本比对 / 撤销修改 等一些基本功能,远远比不上 Git Bash 强大,但是 BluePrint 间的 Diff 还是很好用的。

在执行 UE 中的 Git 版本控制之前最好先在 Git Bash 中进行一些 Git 全局的初始化操作。

1
2
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

生成 SSH Key(邮件地址换成你自己的邮件地址):

1
$ ssh-keygen -t rsa -C "[email protected]"

然后一路 Enter(或者你自己设置密码),执行完毕后会在 C:\Users\${userName}\(linux 则是在~/ 下) 下创建一个 .ssh 目录,其中有 id_rsaid_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 中的addcommit),然后点 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 InDiff 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 时间。