Scene conflict workflow
Как безопасно разрешить merge conflict Unity-сцены в Git
Конфликт Unity-сцены редко бывает только текстовой проблемой. Безопасное разрешение сначала сохраняет три версии, использует Smart Merge как отправную точку, проверяет структуру объектов и ссылки и валидирует результат в Unity до commit.
Почему scene conflict — не только текст
Файл .unity содержит документы GameObjects, компонентов и других serialized objects. fileIDs связывают компоненты с владельцами, GUIDs — внешние ассеты, а Transform relationships формируют иерархию. Поэтому разные строки YAML могут менять одну логическую структуру.
Порядок, reparenting, delete-vs-edit и prefab overrides — типичные случаи, когда синтаксически корректный YAML все равно семантически неверен.
Безопасный workflow из восьми шагов
- Остановите редактирование: не сохраняйте конфликтующую сцену снова.
- Проверьте status: зафиксируйте файл, branches и uncommitted changes через
git status. - Сохраните Base/Ours/Theirs: экспортируйте три revisions в отдельные временные файлы.
- Не отбрасывайте сторону сразу: не применяйте ours или theirs ко всему файлу без проверки.
- Запустите UnityYAMLMerge: используйте Smart Merge как первый структурный merge.
- Проведите semantic review: сравните иерархию, компоненты, свойства, ссылки и prefab overrides.
- Валидируйте в Unity: импортируйте проект, откройте сцену, проверьте Console и связанные workflows.
- Сделайте точечный commit: включите только conflict resolution и необходимые meta changes.
Как читать Base, Ours и Theirs
Base — общая исходная версия, Ours — версия текущего checked-out branch, Theirs — входящая версия. Эти названия не означают «правильно» и «неправильно».
MergeSight для прозрачного ревью scene conflicts показывает три входа как Unity-объекты и позволяет принимать решение по каждому изменению, а не по всему файлу.
Что проверить после merge
- Не были ли GameObjects случайно удалены, продублированы или переименованы.
- Верны ли parent-child relationships и root order.
- Принадлежат ли компоненты правильным GameObjects.
- Указывают ли GUID и fileID references на существующие объекты и ассеты.
- Сохранились ли prefab instances, source links и overrides.
- Нет ли Missing Scripts, conflict markers и новых Console errors.
Также запустите важные Play Mode или Edit Mode tests. Импортируемый ассет еще не гарантирует правильное поведение уровня.
Когда merge нужно отбросить и начать заново
Остановитесь, если Base/Ours/Theirs нельзя однозначно определить, YAML parser падает, object identity неоднозначна или требуется массовая ручная очистка markers. Вернитесь к сохраненным входам и разрешите конфликт небольшими воспроизводимыми шагами.
Как уменьшить будущие scene conflicts
- Разделяйте крупные levels на additive scenes с четкой ownership.
- Выносите повторно используемые системы из общей scene в prefabs.
- Выборочно блокируйте high-risk assets и заранее согласовывайте параллельные изменения.
- Делайте небольшие commits и часто синхронизируйте branches.
- Добавьте review scenes и prefabs и validation в pull requests и CI.
Частые вопросы
Как разрешить merge conflict Unity-сцены в Git?
Сохраните Base, Ours и Theirs, запустите UnityYAMLMerge как первую структурную попытку, проведите semantic review и откройте сцену в Unity. Делайте commit только после проверки references, иерархии и Console.
Что выбрать для Unity-сцены: ours или theirs?
Только если одна сторона должна полностью заменить другую и команда подтвердила это по смыслу. Обычно обе стороны содержат полезные изменения, которые нужно проверить по объектам.
Может ли UnityYAMLMerge решить любой scene conflict?
Нет. Delete-vs-edit, неоднозначная object identity, сложные изменения иерархии или поврежденные входы могут требовать ручных решений и дополнительной validation.
Почему merged scene открывается, но все равно неверна?
Синтаксически валидный YAML может содержать неверную иерархию, references, component ownership или prefab overrides. Поэтому структуру и поведение нужно проверять отдельно.
Как предотвращать scene conflicts в Unity?
Сочетайте additive scenes, prefab ownership, выборочный locking, небольшие commits, частую синхронизацию и semantic review. При реальной параллельной работе полностью исключить конфликты нельзя.
Выводы
Сохраняйте все три входа
Base/Ours/Theirs делают решения воспроизводимыми и позволяют безопасно начать заново.
Проверяйте структуру, а не только YAML
Иерархия, компоненты, overrides и references определяют реальный смысл изменений.
Последняя проверка — в Unity
Import, Console, tests и проверка level intent должны пройти до commit.