Unity 6.3
0 онлайн 17 гостей 3 в системе
Вход

Умное слияние

Используйте инструмент UnityYAMLMerge для слияния сцены и файлов префаб в семантическом отношении корректным образом. Инструмент доступен из командной строки и также доступен для сторонних программ управления версиями.

Настройка умного слияния в Unity

В настройках проекта Управления Версиями (меню: Изменить > Project Настройки > Управление Версиями), когда вы выбираете сторонний инструмент управления версиями в поле Режим, например, Perforce или Unity Управление Версиями (UVCS), отображается Умное Слияние. Меню содержит следующие параметры:

  • Выкл.: использовать только инструмент слияния по умолчанию, установленный в настройках, без умного слияния.
  • Преслияние: включает умное слияние, принимает чистые слияния. Нечистые слияния создадут предварительно слиты версии базы, их и моих версий файла. Затем используйте их с инструментом слияния по умолчанию.
  • Запрос: включает умное слияние, но при возникновении конфликта показывает диалоговое окно, позволяющее пользователю разрешить конфликт (это настройка по умолчанию).

Настройка UnityYAMLMerge для использования со сторонними инструментами

Инструмент UnityYAMLMerge входит в комплект с Unity Editor. Если Unity установлен в стандартном расположении, путь к UnityYAMLMerge выглядит следующим образом:

На Windows:

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

Золотая

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

На macOS:

/Applications/Unity/Unity.app/Contents/Helpers/UnityYAMLMerge

Чтобы получить доступ к этой папке из Finder, щелкните правой кнопкой мыши Unity.app и выберите опцию Show Package Contents.

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 или .gitconfig:

    [merge]
    tool = unityyamlmerge

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

Меркуриал

Добавьте следующий текст в файл .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.

Unity Управление версиями (UVCS)

  1. Перейдите в Настройки > Инструменты слияния и нажмите кнопку Добавить.
  2. Выберите Внешний инструмент слияния.
  3. Выберите Использовать с файлами, соответствующими следующей схеме.
  4. Добавить расширение .unity.
  5. Введите команду:
    <path to UnityYAMLMerge> merge -p "@basefile" "@sourcefile"  "@destinationfile" "@output"

Затем следуйте той же процедуре, чтобы добавить расширение .prefab.

SourceTree

  1. Перейдите в Инструменты > Параметры > Различия.
  2. Выберите Таможня в раскрывающемся списке Инструмент слияния.
  3. Введите путь к UnityYAMLMerge в поле Merge Command.
  4. Тип merge -p $BASE $REMOTE $LOCAL $MERGED в 2000 году Аргументы поле.

Настройка mergerules.txt

Чтобы настроить, как UnityYAMLMerge объединяет файлы, настройте файл mergerules.txt. Он доступен в папке Editor/Data/Tools вашей установки Unity. Различные параметры конфигурации следующие.

Массивы

Раздел конфигурации массивов говорит UnityYAMLMerge рассматривать указанный путь как массив; либо как "множество" со значением ключа, либо как "простой" массив без значений ключа. По умолчанию для всех массивов используется гибридный режим и попытка соответствия с некоторыми известными эвристиками.

  • <mode> является одним из “set” или “plain”

Пример (как в файле слияний по умолчанию)

[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”

Пример (как в файле слияний по умолчанию)

[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

Аргументы

Аргумент --nomappinginoneline похож на аргумент EditorSettings.serializeInlineMappingsOnOneLine API в Unity.

Чтобы отключить однострочную форму, включите этот аргумент при запуске инструмента объединения. Когда активна опция --nomappinginoneline, инструмент пытается разделить данные YAML на несколько строк, когда длина строки превышает 80 символов.

Этот аргумент помогает поддерживать согласованность между файлом, созданным Unity, и файлом, созданным mergetool.

Сопоставления

Раздел сравнений учитывает незначительные различия между значениями с плавающей запятой, чтобы игнорировать их в пользовательских настройках. Когда включено, сравнение с плавающей запятой выполняется относительно, чтобы учесть относительную ошибку. Вы можете настроить сравнение следующим образом:

  • “float” <float значение для сравнения> (Это устанавливает эпсилон на значение по умолчанию близко к машине эпсилон)
  • &quot; float &quot; <сравниваемая величина с плавающей запятой> <относительная величина сравнения и абсолютная пороговая величина>
  • &quot; float &quot; <сравниваемая величина по плавающей шкале> <относительная величина для сравнения> <абсолютный порог для сравнения>

Относительное значение сравнения определяет эпсилон и как сравнение будет масштабироваться с размером относительной ошибки поплавков. Абсолютное значение сравнения определяет точку, в которой сравнение поплавков переключается с абсолютного на относительное от нуля (на графике).

Примечание: Сравнительные значения должны находиться в диапазоне между плавающим эпсилоном (~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

Дополнительные ресурсы