Unity3D使用github进行版本管理和协作

 

目录

一、unity仓库创建流程

1、新建仓库

2、把仓库克隆到本地

3、把工程文件拷贝到克隆地址

4、在unity中进行设置

5、提交到远程仓库

二、关于提交中的冲突处理

1、添加环境变量

2、创建.gitattributes文件

3、设置冲突处理工具

三、冲突处理的补充


预装:GitGithubDesktop

一、unity仓库创建流程

 

1、新建仓库

注意在.gitignore中选Unity。

Unity3D使用github进行版本管理和协作

2、把仓库克隆到本地

选择用desktop打开或者点击复制按钮,复制URL在本地githubdesktop进行clone。

Unity3D使用github进行版本管理和协作

Unity3D使用github进行版本管理和协作

3、把工程文件拷贝到克隆地址

只需要拷贝Assets、Packages、ProjectSettings三个文件夹,其他文件在重新打开工程时会自动生成,可能要花一定时间。

Unity3D使用github进行版本管理和协作

4、在unity中进行设置

打开工程文件,在unity中对一些选项进行设置,记得要保存场景。

Unity3D使用github进行版本管理和协作

【解释】在使用git进行merge时,如果文件是二进制文件,一旦冲突发生很难查看git插入的冲突标识,无法解决冲突。因此修改设置,使得Unity项目的资产序列化生成文本文件。可以按照上图操作修改Unity的序列化策略,改Mixed为Force Text。这样场景文件和prefab等文件会被序列化为yaml文本文件。

 

5、提交到远程仓库

在github desktop中commit工程所做的改变,并点击push提交到github远程仓库。

 

Unity3D使用github进行版本管理和协作

 

之后的上传以及拉取都与上面类似,需要注意的是,当其他人修改并上传了内容时,我们在上传的时候会收到提示,这时候点fetch就行。

Unity3D使用github进行版本管理和协作

然后再继续点右上角,先把他人的提交拉取,再提交自己的修改。

Unity3D使用github进行版本管理和协作

 

二、关于提交中的冲突处理

Unity3D使用github进行版本管理和协作

由于unity中有大量的二进制文件,而git对于这些文件的合并效果并不理想,这个时候如果两个或多个人同时上传内容,就可能会发生冲突,我们可以选择简单粗暴的只保留一个,但是这样做就和单线程的工作差不多了。好在unity自身为我们提供了工具,这个工具可以自动识别比如场景文件,预制体文件之间的不同,并合并其中的差异。

在合并前,我们需要做一些预备工作。首先这个工具我们是用命令行打开的(当然,如果使用SourceTree等工具则不需要),所以我们要预先把git设置好环境变量,再之后,我们需要创建.gitattribute文件,这个文件的作用是设置一个路径下所有文件的属性,把诸如.unity,.prefab标记为文本文件,以便于合并工具进行处理,最后,我们需要把unity内置的合并工具进行一些设置。

步骤如下:

1、添加环境变量

找到git所在的文件夹,将cmd的文件夹加入环境变量。

Unity3D使用github进行版本管理和协作

 

Unity3D使用github进行版本管理和协作

 

2、创建.gitattributes文件

以文本格式创建,然后直接修改后缀名为.gitattributes。

Unity3D使用github进行版本管理和协作

以文本文档的形式打开,在里面添加:

* text=auto

# keep lf on unity files

*.asset text eol=lf

*.meta text eol=lf

*.prefab text eol=lf

*.unity text eol=lf

关于此文件格式的说明:https://blog.****.net/taiyangdao/article/details/78484623

 

3、设置冲突处理工具

unity编辑器里内置了这一工具,文件名称为UnityYAMLMerge.exe,我的文件路径如下:

Unity3D使用github进行版本管理和协作

 

在.git文件夹里用文本格式打开config(.git为隐藏文件夹,要设置为显示),并添加如下语句:

[merge]
tool = unityyamlmerge

[mergetool "unityyamlmerge"]
trustExitCode = false
cmd = 'D:/soft/unity/unity18-4.14/file/Editor/Data/Tools/UnityYAMLMerge.exe' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"

在config中的视图,路径部分填写该工具的路径:

Unity3D使用github进行版本管理和协作

 

之后就是出现冲突时的处理,比如双方同时修改了.unity文件,这时候就会报出冲突,选择open in command line

Unity3D使用github进行版本管理和协作

 

然后在命令行里输入”git mergetool”,然后回车,这时候就会自动处理合并修改的部分了。

 

Unity3D使用github进行版本管理和协作

注:这里提示的seems unchanged,其实已经修改好了,输入y继续就好了。

 

合并修改后,会生成额外的文件,比如我合并的是场景文件,我生成了这个,直接把他们discard掉就可。

Unity3D使用github进行版本管理和协作

之后再打开工程,会提示reload,点击reload,会发现场景已经合并了。

 

三、冲突处理的补充

如果在合并的时候出现了这样的弹窗:

Unity3D使用github进行版本管理和协作

点击确定,然后打开场景也应该是没有问题的。出现这种情况的原因是unity合并工具会尝试为其无法处理的文件查找替代的mergetool,如果找不到所有的默认工具,就会抛出上面的错误。

如果想不要弹出这个弹窗,可以通过上面给出的路径,找到这个mergespecfile文本文件,然后再下载一个merge工具,我下载的是merd

Unity3D使用github进行版本管理和协作

 

下载此工具到默认地址,然后将这个工具的地址复制到打开的文本中

Unity3D使用github进行版本管理和协作

 

修改前:

Unity3D使用github进行版本管理和协作

将红框的部分修改为工具所在的地址,并将默认情况也改为工具的地址:

unity use "%programs%\Meld\Meld.exe" "%l" "%r" "%b" "%d"
prefab use "%programs%\Meld\Meld.exe" "%l" "%r" "%b" "%d"

#
# Default fallbacks for unknown files. First tool found is used.
#
* use "%programs%\Meld\Meld.exe" "%l" "%r" "%b" "%d"

修改后:

Unity3D使用github进行版本管理和协作

 

 


注:

由于Github被墙,所以上传下载速度较为缓慢,所以需要科学上网,也可用国内码云(gitee)代替,在clone项目时按照复制CRL的方法,其他操作差不多,我们在测试码云的时候上传下载工程会因过大而出现问题,不过分段上传下载可以。

 

参考:

https://blog.****.net/lxc2314554296/article/details/79155048

https://zhuanlan.zhihu.com/p/57468011

https://blog.****.net/lxbhahaha/article/details/88052205

https://blog.****.net/weixin_30487317/article/details/97338203

https://answers.unity.com/questions/1265292/unityyamlmerge-error.html

https://stackoverflow.com/questions/36884337/unity-yamlmerge-error

如果上面的工具下载慢:

链接:https://pan.baidu.com/s/11wwNnxSoVU8j-X8HVwYhfQ 
提取码:m74z