Usando Sistemas de Control de Versiones Externos con Unity
Solución de Problemas (Troubleshooting) del Editor

Smart Merge

Unity incorporates a tool called UnityYAMLMerge that can merge scene and prefab files in a semantically correct way. The tool can be accessed from the command line and is also available to third party version control software.

Setting Up Smart Merging in Unity

In the Editor Settings (menu: Edit > Project Settings > Editor), you have the option to select a third party version control tool (Perforce or PlasticSCM, for example). When one of these tools is enabled, you will see a Smart Merge menu under the Version Control heading. The menu has four options:

  • Off: use only the default merge tool set in the preferences with no smart merging.
  • Premerge: enable smart merging, accept clean merges. Unclean merges will create premerged versions of base, theirs and mine versions of the file. Then, use these with the default merge tool.
  • Ask: enable smart merging but when a conflict occurs, show a dialog to let the user resolve it (this is the default setting).

Setting up UnityYAMLMerge for Use with Third Party Tools

The UnityYAMLMerge tool is shipped with the Unity editor; assuming Unity is installed in the standard location, the path to UnityYAMLMerge will be:

C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe

or

C:\Program Files (x86)\Unity\Editor\Data\Tools\UnityYAMLMerge.exe

…en Windows y

/Applications/Unity/Unity.app/Contents/Tools/UnityYAMLMerge

…on Mac OSX (use the Show Package Contents command from the Finder to access this folder).

UnityYAMLMerge is shipped with a default fallback file (called mergespecfile.txt, also in the Tools folder) that specifies how it should proceed with unresolved conflicts or unknown files. This also allows you to use it as the main merge tool for version control systems (such as git) that don’t automatically select merge tools based on file extensions. The most common tools are already listed by default in mergespecfile.txt but you can edit this file to add new tools or change options.

You can run UnityYAMLMerge as a standalone tool from the command line (you can see full usage instructions by running it without any arguments). Set-up instructions for common version control systems are given below.

P4V

  • Vaya a Preferences > Merge.
  • Seleccione Other application.
  • Agregue el botón Add.
  • En el campo de extensión, ingrese .unity.
  • En el campo de Application, ingrese la ruta a la herramienta UnityYAMLMerge (ver arriba).
  • En el campo de Arguments, ingrese merge -p %b %1 %2 %r
  • Click Save.

Luego, siga el mismo procedimiento para agregar una extensión .prefab.

Git

Agregue el siguiente texto a su archivo .git o .gitconfig

    [merge]
    tool = unityyamlmerge

    [mergetool "unityyamlmerge"]
    trustExitCode = false
    cmd = '<path to UnityYAMLMerge>' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"

Mercurial

Agregue el siguiente texto a su archivo .hgrc:

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

    [merge-tools]
    unityyamlmerge.executable = <path to UnityYAMLMerge>
    unityyamlmerge.args = merge -p --force $base $other $local $output
    unityyamlmerge.checkprompt = True
    unityyamlmerge.premerge = False
    unityyamlmerge.binary = False

SVN

Agregue lo siguiente a su archivo ~/.subversion/config:

    [helpers]
    merge-tool-cmd = <path to UnityYAMLMerge>

TortoiseGit

  • Vaya a Preferences > Diff Viewer > Merge Tool y haga click en el botón Advanced.
  • En el popup, ingrese .unity en el campo de extensión.
  • En tipo de campo External Program:
    <path to UnityYAMLMerge> merge -p %base %theirs %mine %merged

Luego, siga el mismo procedimiento para agregar una extensión .prefab.

PlasticSCM

  • Vaya a Preferences > Merge Tools y haga click en el botón Add.
  • Seleccione External merge tool.
  • Seleccione Use with files that match the following pattern.
  • Agregue la extensión .unity.
  • Ingrese el comando:
    <path to UnityYAMLMerge> merge -p “@basefile” “@sourcefile”  “@destinationfile” “@output”

Luego, siga el mismo procedimiento para agregar una extensión .prefab.

SourceTree

  • Vaya a Tools > Options > Diff.
  • Seleccione Custom en el desplegable Merge Tool.
  • Ingrese la ruta a UnityYAMLMerge en el campo de texto Diff Command.
  • Ingrese merge -p $BASE $REMOTE $LOCAL $MERGED en el campo de texto Arguments.
Usando Sistemas de Control de Versiones Externos con Unity
Solución de Problemas (Troubleshooting) del Editor