Настройка Unity Git
Как настроить Unity-проект в Git для командной работы
Надежный Unity-репозиторий требует отдельно настроить serialization, meta files, text merge, большие binaries и locking. Создайте воспроизводимую основу до первого реального конфликта.
Сначала задайте базовые настройки Unity
- В Editor Settings > Asset Serialization включите Force Text.
- В разделе Version Control используйте Visible Meta Files.
- Храните в Git
Assets/,Packages/иProjectSettings/. - Игнорируйте
Library/,Temp/,Logs/и локальные build outputs.
Перемещайте ассет вместе с его .meta в одном commit. Потеря meta меняет GUID-связь и может сломать references.
Разделите text merge и binary storage в .gitattributes
*.unity text
*.prefab text
*.asset text
*.mat text
*.psd filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text
Не отправляйте все .unity и .prefab в LFS как binaries, если хотите diff и merge текстовых ассетов. Правила Smart Merge или mergetool настраиваются отдельно.
Используйте Git LFS выборочно
Git LFS подходит для PSD, FBX, audio, video и больших textures, которые бессмысленно сравнивать как текст. Проверьте LFS у всех разработчиков и CI runners, поддержку locks на hosting и стратегию миграции старой binary history.
Выбирайте правила не только по расширению, но и по реальному размеру, частоте изменений и возможности merge.
Дополните Smart Merge семантическим ревью
UnityYAMLMerge может автоматически объединять text-serialized scenes и prefabs, но изменения иерархии, ссылок и prefab overrides требуют проверки. MergeSight для Unity-ревью в Git показывает Base/Ours/Theirs как структуру Unity до записи рискованного результата.
Задокументируйте, использует ли команда официальный git mergetool workflow или отдельный merge driver. Оба варианта возможны, но это разные конфигурации Git.
Блокируйте только подходящие ассеты
Locks полезны для крупных binary sources и небольшого числа сильно связанных ассетов, где координация дешевле конфликта. Блокировка всех text-serialized scenes и prefabs мешает полезной параллельной работе. Сочетайте locks с additive scenes, prefab ownership и правилами передачи работы.
Ежедневный командный workflow
- До начала работы сделайте pull и проверьте LFS locks.
- Создавайте небольшие тематические commits.
- До push проводите semantic review изменений scenes и prefabs.
- Разрешайте конфликты через Base/Ours/Theirs, открывайте результат в Unity и проверяйте Console.
- Проверяйте в CI conflict markers, missing meta, broken references и импорт ассетов.
Проверьте setup на намеренном конфликте
git check-ignore -v Library/
git check-attr -a -- Assets/Scenes/Main.unity
git lfs track
git status
Затем измените разные объекты одной сцены в двух test branches. Проверьте запуск merge, ревью, backup, Unity import и CI до того, как объявлять конфигурацию командным стандартом.
Частые вопросы
Какие папки Unity нужно хранить в Git?
Обычно version control включает Assets, Packages и ProjectSettings. Library, Temp, Logs, Obj, локальные build- и IDE-outputs генерируются и должны быть в .gitignore.
Нужно ли хранить .unity и .prefab в Git LFS?
Не по умолчанию. При Force Text это текстовые файлы, доступные для Unity-aware diff и merge. LFS лучше использовать для больших binary sources, а locking — выборочно для high-risk assets.
Нужен ли UnityYAMLMerge в Unity-проекте?
Это полезный Smart Merge baseline для команд, параллельно меняющих scenes и prefabs. Существенные структурные изменения и references все равно требуют ревью и validation результата.
Как проверить, что .gitattributes работает?
Команда git check-attr показывает атрибуты конкретного файла. Дополните ее реальным тестовым конфликтом: правильный атрибут сам по себе не гарантирует корректный запуск mergetool или driver.
Выводы
Разделяйте text и binaries
Force Text сохраняет diff для Unity-ассетов, а LFS обслуживает большие binary sources.
Meta file — часть ассета
Ассет и .meta нужно вместе перемещать, commit и review.
Тестируйте настоящий конфликт
Контролируемый сценарий выявляет ошибки attributes, mergetool, LFS и CI до production.