在GithubDesktop中使用UnityYAMLMerge解决合并时场景冲突的问题

  • 1、设置
  • 1.1、在Unity中设置序列化模式
  • 1.2、其他设置
  • 1.2.1、设置.gitattributes
  • 1.2.2、设置config
  • 2、合并测试


最近在研究怎么提高Unity中多人合作的效率,本来打算使用Unity官方自带的版本管理系统,但是在不付费的情况下只有1G的云端储存空间,所以还是放弃了。然后决定打算使用Github,正好最近Github的私人仓库免费了,最多可以邀请三名collaborators,就是一共4个人。对于小项目来说也足够了。然而Git的使用对于向我这样的小白来说还是有点复杂,还好有GithubDesktop可以更加简单方便的使用Github,关于Github和GithubDesktop的使用这里就不多说了,网上有很多教程。

现在主要面临的一个问题是当两个人同时修改了场景然后再去合并的时候,就是同时了场景的文件。这时就会出现冲突,如果只是简单的使用VSCode或者什么去手动解决冲突的话,很容易会出现问题。经过一番搜索知道可以使用Unity自带的UnityYAMLMerge来进行智能合并,UnityYAMLMerge也可以提供给第三方调用,比如Git、SVN、SourceTree等等,网上有很多配置的方法。但是唯独没有GithubDesktop的用法。因为对这个本身不是很了解,所以花了几天时间终于实现了在Destop上的使用。其实也是特别简单。

1、设置

1.1、在Unity中设置序列化模式

在Unity界面的左上角 依次点击Edit => Project Setting => Editor

然后把Asset Serialization的Mode设置成Force Text,强制转换为文本

Unity里数据库协同技术_Unity

1.2、其他设置

1.2.1、设置.gitattributes

Unity里数据库协同技术_场景合并_02


打开“.gitattributes”,在后面添加

*.unity binary
*.prefab binary
*.asset binary

1.2.2、设置config

Unity里数据库协同技术_场景合并_03


“config”文件在“.git”文件夹内,.git文件夹找不到的可能是因为没有显示隐藏文件,在“文件资源管理器”里选择显示隐藏文件即可。用记事本打开“config”,在后面添加

[merge]
tool = unityyamlmerge

[mergetool "unityyamlmerge"]
trustExitCode = false
cmd = '<替换为UnityYAMLMerge的路径>' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"

这里要注意<>以及里面的内容要替换为UnityYAMLMerge的路径。

UnityYAMLMerge会在Unity所安装的位置的 Editor => Data => Tools 里面,根据每个人安装的位置会有所不同

我的UnityYAMLMerge是在D:\Program Files\Unitys\2018.3.6f1\Editor\Data\Tools

这里要注意分隔符要使用 “/” 而 不是 “\”,复制下来的路径是“\”,要记得自己修改。否则在GithubDesktop会出现下图的问题

Unity里数据库协同技术_UnityYAMLMerge_04


我最终添加的是结果是

Unity里数据库协同技术_GithubDesktop_05


要记得地址后面还有UnityYAMLMerge.exe,最后一行后面的东西是github后来自己添加的,不需要理会。

2、合并测试

具体如何合并这里就不演示了,当两个人分别修改了场景,合并分支的时候出现冲突的时候会出现以下界面

Unity里数据库协同技术_Unity里数据库协同技术_06


这时我们点击左下角的“Open in command line”,使用命令行打开。

输入“git mergetool”然后回车

Unity里数据库协同技术_场景合并_07


要留意这里输出的英文有没有提示错误,有的话根据错误提示找找原因,看看是前面哪一步没有做好还是其他的原因。

这一步完了之后打开Unity会提示你ReLoad,ReLoad完之后你就发现场景已经合并了

GithubDesktop的画面也变成了如下

Unity里数据库协同技术_场景合并_08


点击Commit merge就可以了,合并时在场景文件旁边会生成一个orig文件和对应的meta文件,手动删除即可。

Unity里数据库协同技术_Unity里数据库协同技术_09


然后就可以继续其他的pull push之类的工作了。