版本:Unity 6 (6000.0)
语言:英语
Perforce 集成
安全模式

智能合并

使用 UnityYAMLMerge 工具以语义正确的方式合并 场景场景包含游戏环境和菜单。将每个唯一的场景文件视为一个独特关卡。在每个场景中,放置环境、障碍物和装饰,本质上是设计和构建游戏。 更多信息
请参见 术语表
预制件一种资产类型,允许你存储包含组件和属性的完整游戏对象。预制件充当模板,你可以从中在场景中创建新的对象实例。 更多信息
请参见 术语表
文件。该工具可从命令行访问,也可以提供给第三方 版本控制用于管理文件更改的系统。你可以将 Unity 与大多数常见的版本控制工具结合使用,包括 Perforce、Git、Mercurial 和 PlasticSCM。 更多信息
请参见 术语表
软件。

在 Unity 中设置智能合并

在版本控制项目设置中(菜单:编辑 > 项目设置 > 版本控制),当你选择模式字段中的第三方版本控制工具时,例如 Perforce 或 PlasticSCM,将会显示 智能合并。该菜单具有以下选项

  • 关闭:仅使用在首选项中设置的默认合并工具,不进行智能合并。
  • 预合并:启用智能合并,接受干净合并。不干净的合并将创建文件的预合并版本,包括基本版本、他们的版本和我的版本。然后,使用默认合并工具处理这些版本。
  • 询问:启用智能合并,但当发生冲突时,会显示一个对话框,让用户解决冲突(这是默认设置)。

设置 UnityYAMLMerge 以供第三方工具使用

UnityYAMLMerge 工具随 Unity 编辑器一起提供;假设 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 附带一个默认的回退文件(称为 mergespecfile.txt,也位于 Tools 文件夹中),该文件指定了在遇到未解决的冲突或未知文件时如何进行。这也允许你将它用作版本控制系统(如 git)的主合并工具,这些系统不会根据文件扩展名自动选择合并工具。mergespecfile.txt 中默认列出了最常见的工具,但你可以编辑此文件来添加新工具或更改选项。

你可以从命令行以独立工具的方式运行 UnityYAMLMerge(运行它而不带任何参数,你可以看到完整的用法说明)。下面给出了常见版本控制系统的设置说明。

P4V

  1. 转到首选项 > 合并。
  2. 选择其他应用程序
  3. 单击添加按钮。
  4. 在扩展名字段中,键入 .unity
  5. 在应用程序字段中,键入 UnityYAMLMerge 工具的路径(见上文)。
  6. 在参数字段中,键入 merge -p %b %1 %2 %r
  7. 单击保存。

然后,按照相同的步骤添加 .prefab 扩展名。

Git

将以下文本添加到你的 .git.gitconfig 文件中

    [merge]
    tool = unityyamlmerge

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

Mercurial

将以下文本添加到你的 .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

将以下内容添加到你的 ~/.subversion/config 文件中

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

TortoiseGit

  1. 转到首选项 > 差异查看器 > 合并工具,并单击 高级 按钮。
  2. 在弹出窗口中,在扩展名字段中键入 .unity
  3. 外部程序 字段中键入
    <path to UnityYAMLMerge> merge -p %base %theirs %mine %merged

然后,按照相同的步骤添加 .prefab 扩展名。

PlasticSCM

  1. 转到首选项 > 合并工具,并单击 添加 按钮。
  2. 选择 外部 合并工具。
  3. 选择 与匹配以下模式的文件一起使用
  4. 添加 .unity 扩展名。
  5. 输入命令
    <path to UnityYAMLMerge> merge -p "@basefile" "@sourcefile"  "@destinationfile" "@output"

然后,按照相同的步骤添加 .prefab 扩展名。

SourceTree

  1. 转到工具 > 选项 > 差异。
  2. 在合并工具下拉菜单中选择 自定义
  3. 合并命令 字段中键入 UnityYAMLMerge 的路径。
  4. 参数 字段中键入 merge -p $BASE $REMOTE $LOCAL $MERGED

配置 mergerules.txt

要自定义 UnityYAMLMerge 合并文件的方式,请配置 mergerules.txt 文件。该文件位于 Unity 安装目录的 Editor/Data/Tools 文件夹中。各种配置选项如下所示。

数组

数组配置部分指示 UnityYAMLMerge 将指定路径视为数组;可以是带键值的“集合”或不带键值的“普通”数组。所有数组的默认操作是混合模式,尝试使用一些已知的启发式方法进行匹配。

  • <mode> 可以是“set”或“plain”

示例(根据默认的 mergerules 文件)

[arrays]
set *.GameObject.m_Component *.fileID
set *.Prefab.m_Modification.m_Modifications target.fileID target.guid propertyPath
plain *.MeshRenderer.m_Materials
plain *.Renderer.m_Materials

排除项

排除项配置部分指示要从合并中排除哪些路径。如果两边都进行了修改,则将它们视为冲突,并会显示出来供用户输入。

  • <mode> 可以是“include”、“exclude”、“includeIfContains”、“excludeIfContains”

示例(根据默认的 mergerules 文件)

[exclusions]
exclude *.MeshRenderer.m_Materials.*
exclude *.SpriteRenderer.m_Materials
exclude *.SpriteRenderer.m_Color
include *.ParticleSystem.InitialModule
exclude *.ParticleSystem.*
exclude *.ParticleSystem.InitialModule.*
#excludeDepend *.MonoBehaviour m_Script ^m_
excludeIfContains *.MonoBehaviour.* x y z
excludeIfContains *.MonoBehaviour.* r g b

比较

比较部分考虑浮点值之间的微不足道的差异,以根据用户设置忽略这些差异。启用时,浮点比较是相对进行的,以考虑相对误差。你可以通过以下方式配置比较

  • “float” <要比较的浮点值>(这将 epsilon 设置为接近机器 epsilon 的默认值)
  • “float” <要比较的浮点值> <相对比较值和绝对截止值>
  • “float” <要比较的浮点值> <相对比较值> <绝对比较截止值>

相对比较值决定 epsilon 以及比较如何随着浮点数相对误差的大小进行缩放。绝对比较截止值决定在哪个点浮点比较从零(在图表上)开始从绝对切换到相对。

注意:比较值应介于浮点 epsilon(~0.00000011921)和 1.0 之间。

示例

[comparisons]
float *.Transform.m_LocalPosition.x 0.0000005
float *.Transform.m_LocalPosition.y 0.0000005
float *.Transform.m_LocalPosition.z 0.0000005
float *.Transform.m_LocalRotation.x 0.00005 0.001
float *.Transform.m_LocalRotation.y
float *.Transform.m_LocalRotation.z 0.00005 0.001
float *.Transform.m_LocalRotation.w
Perforce 集成
安全模式