IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]git版本控制库扩展插件

    u010019717发表于 2015-06-14 12:23:55
    love 0

    孙广东 2015.6.14

    在UNity5.x之前的版本, 我们用文本编辑器如 sublime text 打开.unity .prefab时是可以看到 yaml格式的文本内容, 但是在 UNity5.x 当在察看.unity .prefab文件时已经变成二进制的文件了。

    先来看看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 $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

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




    


沪ICP备19023445号-2号
友情链接