Настройка Unity Git

Как настроить Unity-проект в Git для командной работы

Надежный Unity-репозиторий требует отдельно настроить serialization, meta files, text merge, большие binaries и locking. Создайте воспроизводимую основу до первого реального конфликта.

7 Wolves 29 июля 2026 10 мин чтения Настройка Git

Сначала задайте базовые настройки Unity

  1. В Editor Settings > Asset Serialization включите Force Text.
  2. В разделе Version Control используйте Visible Meta Files.
  3. Храните в Git Assets/, Packages/ и ProjectSettings/.
  4. Игнорируйте 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

  1. До начала работы сделайте pull и проверьте LFS locks.
  2. Создавайте небольшие тематические commits.
  3. До push проводите semantic review изменений scenes и prefabs.
  4. Разрешайте конфликты через Base/Ours/Theirs, открывайте результат в Unity и проверяйте Console.
  5. Проверяйте в 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.