Unity项目对 git版本控制库扩展插件
在UNity5.x之前的版本, 我们用文本编辑器如 sublime text 打开.unity .prefab时是可以看到 yaml格式的文本内容, 但是在 UNity5.x 当在察看.unity .prefab文件时已经变成二进制的文件了。【对不起啊,这里我要纠正一下,我当时的Unity版本是5.0打开是二进制。其中发生了一个下问题,就是特效使用的是5.1他给我的特效预制体Prefab在我这里完全显示不出来,就是不能识别。后来知道版本不对。 我升级到5.1后,在打开.unity .prefab时是可以看到仍然是 yaml格式的文本内容】当然了,这个序列化方式是可以进行设置的:
先来看看Unity为我们提供的内部工具:Smart Merge(智能合并)
Unity采用了一种称为UnityYAMLMerge的东西,可以在语义正确的情况下合并场景和预制文件的一个工具。该工具可以从命令行中访问,另外还提供给第三方版本控制软件接口。
在unity中的Smart Merging (智能合并)设置
在编辑器设置(菜单: ),您可以选择一个第三方版本控制工具 (例如Perforce 或 PlasticSCM)。当启用这些工具之一,您将看到Smart Merge(智能合并)版本控制标题下的菜单。菜单有四个选项:
- Off: 不使用智能合并首选项,只使用默认合并工具。
- Premerge: 启用智能合并、 接受清洁合并。Unclean 的合并将是创建 premerged 的版本的基础。然后,使用这些默认合并工具。
- Ask: 当冲突发生时启用智能合并,显示一个对话框,让用户解决它 (这是默认设置)。
设置UnityYAMLMerge用于第三方工具
Unity 编辑器附带UnityYAMLMerge 工具 ;假设Unity装在标准的位置,将会看到 UnityYAMLMerge 的路径:
C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe
or
C:\Program Files (x86)\Unity\Editor\Data\Tools\UnityYAMLMerge.exe
......有 Windows 和
/Applications/Unity/Unity.app/Contents/Tools/UnityYAMLMerge
......有 Mac OSX (使用从 Finder显示包内容命令,以访问此文件夹)。
UnityYAMLMerge 附带一个默认回退的文件 (在Tools 文件夹中也称为 mergespecfile.txt),它指定应如何处理未解决的冲突或未知的文件。这还允许您使用它作为版本控制系统 (如 git)的主要的合并工具,没有自动选择合并工具基于文件扩展名,在 mergespecfile.txt 中已经列出最常用的工具,但您可以编辑此文件以添加新的工具或更改选项。
您可以从命令行 (您可以看到完整的使用说明通过运行不带任何参数) 运行 UnityYAMLMerge 作为一个独立的工具。常见的版本控制系统的设置说明如下。
P4V
- 看首Preferences > Merge
- 选择Other application
- 单击Add 按钮。
- 在extension 字段中,键入
.unity
. - 在Application 域中,键入 UnityYAMLMerge 工具 (见上文) 的路径。
- 在Arguments 字段中,键入merge -p %b %1 %2 %r
- 单击Save保存。
然后,按照同样的程序,以添加.prefab
扩展名。
Git
将以下文本添加到您的.git
或.gitconfig
文件中:
[merge]
tool = unityyamlmerge
[mergetool "unityyamlmerge"]
trustExitCode = false
cmd = '<path to UnityYAMLMerge>' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"
Mercurial
下面的文本添加到.hgrc
文件中:
[merge-patterns]
**.unity = unityyamlmerge
**.prefab = unityyamlmerge
[merge-tools]
unityyamlmerge.executable = <path to UnityYAMLMerge>
unityyamlmerge.args = merge -p $base $other $local $output
unityyamlmerge.checkprompt = True
unityyamlmerge.premerge = False
unityyamlmerge.binary = False
SVN
您的~/.subversion/config
文件中添加以下内容:
[helpers]
merge-tool-cmd = <path to UnityYAMLMerge>
TortoiseGit
- 来到 Preferences > Diff Viewer > Merge Tool ,并单击 Advanced 按钮。
- 在弹出窗口中,在extension 字段键入
.unity
。 - 在External Program 字段类型:
<path to UnityYAMLMerge> merge -p ?se %theirs %mine %merged
然后,按照同样的程序,以添加.prefab
扩展名。
PlasticSCM
- 来到Preferences > Merge Tools 并单击Add按钮。
- 选择External merge tool。
- 选择Use with files that match the following pattern.
- 添加
.unity
扩展名。 - 请输入命令:
<path to UnityYAMLMerge> merge -p “@basefile” “@sourcefile” “@destinationfile” “@output”
然后,按照同样的程序,以添加.prefab
扩展名。
SourceTree
- 转到Tools > Options > Diff 。
- 在Merge Tool 下拉列表中选择Custom 。
- Diff 命令文本字段中键入 UnityYAMLMerge 的路径。
- 类型
merge -p $BASE $REMOTE $LOCAL $MERGED
在Arguments 文本字段中。
接下来我们就来看看 UNity 做的快速和高效的 yaml 合并:
感兴趣的读一读这篇文章:
http://blogs.unity3d.com/2015/06/02/how-we-do-fast-and-efficient-yaml-merging/
最后呢给大家介绍一个Unity的插件: UniMerge
关于他的文档在这里,大家可以看一看:http://wiki.unity3d.com/index.php/UniMerge
特别是冲突窗口的合并功能 也是挺好的。