Version: 2017.4
Usando Sistemas de Control de Versiones Externos con Unity
Solución de Problemas del Editor

Smart Merge

Unity incorpora una herramienta llamada UnityYAMLMerge que puede fusionar tanto archivos de escena como prefab en una manera semántica correcta. La herramienta se puede acceder desde la linea de comando y también está disponible a software de terceros de control de versiones.

Configurando Smart Merging en Unity

En los Editor Settings (menú: Edit > Project Settings > Editor), usted tiene la opción de seleccionar una herramienta de terceros de control de versiones (Perforce o PlasticSCM, por ejemplo). Cuando una de estas herramientas está habilitada, usted verá un menú Smart Merge debajo del encabezado de Version Control. El menú tiene cuatro opciones:

  • +Off*: Utilice solamente la herramienta de fusion predeterminada en las preferencias sin ninguna smart (inteligente) fusión.
  • Premerge: habilita el smart merging (fusión inteligente), acepta fusiones limpias. Unas fusiones no limpias crearán versiones pre-fusionadas de base, sus y mis versiones del archivo. Luego, utilice a estos con la herramienta predeterminada de fusión.
  • Ask: habilita el smart merging pero cuando un conflicto ocurre, muestra un diálogo para que el usuario lo resuelva (esta es la configuración predeterminada).

Configurando UnityYAMLMerge para su Uso con con Herramientas de Terceros

La herramienta UnityYAMLMerge es lanzada con el editor de Unity; asumiendo que Unity está instalado en la ubicación estándar, la ruta a UnityYAMLMerge será:

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

o

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

…en Windows y

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

…en Mac OSX (utilice el comando Show Package Contents desde el Finder para acceder a esta carpeta).

UnityYAMLMerge es lanzado con un archivo fallback predeterminado (llamado mergespecfile.txt,también en la carpeta Tools) que específica cómo debería proceder con los conflictos sin resolver o archivos no conocidos. Esto también le permite a usted utilizarlo como la herramienta de fusión principal para sistemas de control de versiones (como lo es git) que no seleccionan automáticamente las herramientas smart merge basadas en las extensiones de los archivos. Las herramientas más comunes ya están listadas por defecto en mergespecfile.txt pero usted puede editar este archivo para agregar nuevas herramientas o cambiar opciones.

Usted puede ejecutar UnityYAMLMerge como la herramienta standalone desde la linea de comando (usted pude ver las instrucciones completas de uso al correrlo sin argumentos). Las instrucciones de configuración para los sistemas de control de versiones comunes se dan abajo:

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 Merge 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 del Editor