Unity项目对 git版本控制库扩展插件

孙广东 2015.6.14 

在UNity5.x之前的版本, 我们用文本编辑器如 sublime text 打开.unity  .prefab时是可以看到 yaml格式的文本内容,  但是在 UNity5.x 当在察看.unity  .prefab文件时已经变成二进制的文件了。【对不起啊,这里我要纠正一下,我当时的Unity版本是5.0打开是二进制。其中发生了一个下问题,就是特效使用的是5.1他给我的特效预制体Prefab在我这里完全显示不出来,就是不能识别。后来知道版本不对。 我升级到5.1后,在打开.unity  .prefab时是可以看到仍然是 yaml格式的文本内容】当然了,这个序列化方式是可以进行设置的:

Unity项目对 git版本控制库扩展插件_第1张图片


先来看看Unity为我们提供的内部工具:Smart Merge(智能合并)

Unity采用了一种称为UnityYAMLMerge的东西,可以在语义正确的情况下合并场景和预制文件的一个工具。该工具可以从命令行中访问,另外还提供给第三方版本控制软件接口。

在unity中的Smart Merging (智能合并)设置

编辑器设置(菜单:Edit > Project Settings > Editor),您可以选择一个第三方版本控制工具 (例如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 = '' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"

Mercurial

下面的文本添加到.hgrc文件中:

    [merge-patterns]
    **.unity = unityyamlmerge
    **.prefab = unityyamlmerge

    [merge-tools]
    unityyamlmerge.executable = 
    unityyamlmerge.args = merge -p $base $other $local $output
    unityyamlmerge.checkprompt = True
    unityyamlmerge.premerge = False
    unityyamlmerge.binary = False

SVN

您的~/.subversion/config文件中添加以下内容:

    [helpers]
    merge-tool-cmd = 

TortoiseGit

  • 来到 Preferences > Diff Viewer > Merge Tool ,并单击 Advanced  按钮。
  • 在弹出窗口中,在extension 字段键入.unity
  • 在External Program 字段类型:
     merge -p %base %theirs %mine %merged

然后,按照同样的程序,以添加.prefab扩展名。

PlasticSCM

  • 来到Preferences > Merge Tools 并单击Add按钮。
  • 选择External merge tool。
  • 选择Use with files that match the following pattern.
  • 添加.unity 扩展名。
  • 请输入命令:
     merge -p “@basefile” “@sourcefile”  “@destinationfile” “@output”

然后,按照同样的程序,以添加.prefab扩展名。

SourceTree

  • 转到Tools > Options > Diff 。
  • 在Merge Tool 下拉列表中选择Custom
  • Diff 命令文本字段中键入 UnityYAMLMerge 的路径。
  • 类型merge -p $BASE $REMOTE $LOCAL $MERGEDArguments 文本字段中。


接下来我们就来看看  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

特别是冲突窗口的合并功能 也是挺好的。







你可能感兴趣的:(Asset,Store插件推荐)