Умное слияние
Используйте инструмент 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
- Перейдите в Настройки > Слияние.
- Выберите Другое применение.
- Нажмите кнопку Добавить.
- В поле расширения введите
.unity. - В поле Приложение введите путь к инструменту UnityYAMLMerge (см. выше).
- В поле Аргументы введите
merge -p %b %1 %2 %r - Нажмите Сохранить.
Затем следуйте той же процедуре, чтобы добавить расширение .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
- Перейдите в Настройки > Просмотр различий > Инструмент слияния и нажмите кнопку Расширенные.
- В всплывающем окне введите
.unityв поле расширения. - В поле Внешняя Программа введите:
<path to UnityYAMLMerge> merge -p %base %theirs %mine %merged
Затем следуйте той же процедуре, чтобы добавить расширение .prefab.
Unity Управление версиями (UVCS)
- Перейдите в Настройки > Инструменты слияния и нажмите кнопку Добавить.
- Выберите Внешний инструмент слияния.
- Выберите Использовать с файлами, соответствующими следующей схеме.
- Добавить расширение
.unity. - Введите команду:
<path to UnityYAMLMerge> merge -p "@basefile" "@sourcefile" "@destinationfile" "@output"
Затем следуйте той же процедуре, чтобы добавить расширение .prefab.
SourceTree
- Перейдите в Инструменты > Параметры > Различия.
- Выберите Таможня в раскрывающемся списке Инструмент слияния.
- Введите путь к UnityYAMLMerge в поле Merge Command.
- Тип
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 значение для сравнения> (Это устанавливает эпсилон на значение по умолчанию близко к машине эпсилон)
- " float " <сравниваемая величина с плавающей запятой> <относительная величина сравнения и абсолютная пороговая величина>
- " float " <сравниваемая величина по плавающей шкале> <относительная величина для сравнения> <абсолютный порог для сравнения>
Относительное значение сравнения определяет эпсилон и как сравнение будет масштабироваться с размером относительной ошибки поплавков. Абсолютное значение сравнения определяет точку, в которой сравнение поплавков переключается с абсолютного на относительное от нуля (на графике).
Примечание: Сравнительные значения должны находиться в диапазоне между плавающим эпсилоном (~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