Unity3D使用github进行版本管理和协作
目录
预装:Git、GithubDesktop
一、unity仓库创建流程
1、新建仓库
注意在.gitignore中选Unity。
2、把仓库克隆到本地
选择用desktop打开或者点击复制按钮,复制URL在本地githubdesktop进行clone。
3、把工程文件拷贝到克隆地址
只需要拷贝Assets、Packages、ProjectSettings三个文件夹,其他文件在重新打开工程时会自动生成,可能要花一定时间。
4、在unity中进行设置
打开工程文件,在unity中对一些选项进行设置,记得要保存场景。
【解释】在使用git进行merge时,如果文件是二进制文件,一旦冲突发生很难查看git插入的冲突标识,无法解决冲突。因此修改设置,使得Unity项目的资产序列化生成文本文件。可以按照上图操作修改Unity的序列化策略,改Mixed为Force Text。这样场景文件和prefab等文件会被序列化为yaml文本文件。
5、提交到远程仓库
在github desktop中commit工程所做的改变,并点击push提交到github远程仓库。
之后的上传以及拉取都与上面类似,需要注意的是,当其他人修改并上传了内容时,我们在上传的时候会收到提示,这时候点fetch就行。
然后再继续点右上角,先把他人的提交拉取,再提交自己的修改。
二、关于提交中的冲突处理
由于unity中有大量的二进制文件,而git对于这些文件的合并效果并不理想,这个时候如果两个或多个人同时上传内容,就可能会发生冲突,我们可以选择简单粗暴的只保留一个,但是这样做就和单线程的工作差不多了。好在unity自身为我们提供了工具,这个工具可以自动识别比如场景文件,预制体文件之间的不同,并合并其中的差异。
在合并前,我们需要做一些预备工作。首先这个工具我们是用命令行打开的(当然,如果使用SourceTree等工具则不需要),所以我们要预先把git设置好环境变量,再之后,我们需要创建.gitattribute文件,这个文件的作用是设置一个路径下所有文件的属性,把诸如.unity,.prefab标记为文本文件,以便于合并工具进行处理,最后,我们需要把unity内置的合并工具进行一些设置。
步骤如下:
1、添加环境变量
找到git所在的文件夹,将cmd的文件夹加入环境变量。
2、创建.gitattributes文件
以文本格式创建,然后直接修改后缀名为.gitattributes。
以文本文档的形式打开,在里面添加:
* 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,我的文件路径如下:
在.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中的视图,路径部分填写该工具的路径:
之后就是出现冲突时的处理,比如双方同时修改了.unity文件,这时候就会报出冲突,选择open in command line
然后在命令行里输入”git mergetool”,然后回车,这时候就会自动处理合并修改的部分了。
注:这里提示的seems unchanged,其实已经修改好了,输入y继续就好了。
合并修改后,会生成额外的文件,比如我合并的是场景文件,我生成了这个,直接把他们discard掉就可。
之后再打开工程,会提示reload,点击reload,会发现场景已经合并了。
三、冲突处理的补充
如果在合并的时候出现了这样的弹窗:
点击确定,然后打开场景也应该是没有问题的。出现这种情况的原因是unity合并工具会尝试为其无法处理的文件查找替代的mergetool,如果找不到所有的默认工具,就会抛出上面的错误。
如果想不要弹出这个弹窗,可以通过上面给出的路径,找到这个mergespecfile文本文件,然后再下载一个merge工具,我下载的是merd,
下载此工具到默认地址,然后将这个工具的地址复制到打开的文本中
修改前:
将红框的部分修改为工具所在的地址,并将默认情况也改为工具的地址:
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"
修改后:
注:
由于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