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.
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:
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.
.unity
.merge -p %b %1 %2 %r
Luego, siga el mismo procedimiento para agregar una extensión .prefab
.
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"
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
Agregue lo siguiente a su archivo ~/.subversion/config
:
[helpers]
merge-tool-cmd = <path to UnityYAMLMerge>
.unity
en el campo de extensión. <path to UnityYAMLMerge> merge -p %base %theirs %mine %merged
Luego, siga el mismo procedimiento para agregar una extensión .prefab
.
.unity
. <path to UnityYAMLMerge> merge -p “@basefile” “@sourcefile” “@destinationfile” “@output”
Luego, siga el mismo procedimiento para agregar una extensión .prefab
.
merge -p $BASE $REMOTE $LOCAL $MERGED
en el campo de texto Arguments.