Перейти к содержимому
Учи.Онлайн Выбрать школу
Статья

Git для разработчика игр: LFS для ассетов, конфликты сцен Unity и Unreal, работа в команде

Git для разработчика игр — это та же система контроля версий, что и у веб-программиста, но настроенная под проект, где большая часть объёма приходится на текстуры, модели, звук и уровни. Разработчик решает, какие папки движок генерирует сам и в репозиторий не попадают, переносит тяжёлые файлы в Git LFS, договаривается с командой о блокировках, потому что бинарные ассеты не сливаются, и подключает инструмент слияния сцен Unity. Ниже — настройка для Unity и Unreal Engine, учебный пример, ошибки, альтернативы и выбор обучения.

Автор: редакция Учи.ОнлайнОтветственный редактор: Дмитрий Игнатьев
Содержание
Иллюстрация к статье: Git для разработчика игр: LFS для ассетов, конфликты сцен Unity и Unreal, работа в команде

Проблемы обычно начинаются в первый же день, когда новичок делает git add . в корне проекта. В историю уходит папка Library из Unity или DerivedDataCache из Unreal — гигабайты кэша, который движок пересобирает сам, отправка зависает, и человек решает, что Git для игр не годится. На деле не годится настройка по умолчанию: репозиторий игры собирают иначе, чем репозиторий сайта, и делать это нужно до первого коммита.

Чем репозиторий игры отличается от обычного

Git сравнивает файлы построчно. В коде на C# или C++ видно, кто поменял скорость прыжка и в каком коммите. Для текстуры или меша построчное сравнение бессмысленно: при каждой правке Git сохраняет новую копию целиком, и репозиторий быстро разрастается.

Второе отличие — уровни. Unity хранит сцены и префабы в текстовом YAML, их можно сливать, но обычное слияние строк легко ломает ссылки между объектами. Unreal Engine хранит уровни, Blueprints и материалы в бинарных .uasset и .umap: если двое поправили один файл, автоматического слияния не будет, и чья-то работа пропадёт. Отсюда три задачи: отделить исходники от того, что движок генерирует сам, вынести тяжёлые файлы из основной истории и не допускать одновременной правки того, что нельзя слить.

Что не класть в репозиторий: .gitignore для Unity и Unreal

Начинают с .gitignore в корне проекта. Готовые шаблоны есть в открытом репозитории GitHub: Unity.gitignore исключает Library, Temp, Obj, Logs, UserSettings и папки сборок, UnrealEngine.gitignore — Binaries, Intermediate, Saved, DerivedDataCache и файлы *_BuiltData.uasset с запечённым освещением.

В Unity важно и обратное: папки Assets, Packages и ProjectSettings и файлы .meta рядом с каждым ассетом в историю попасть обязаны. В .meta хранится идентификатор, по которому сцены ссылаются на ассет. Закоммитите текстуру без .meta — у коллеги Unity создаст новый идентификатор, и ссылки на текстуру в сценах опустеют.

Git LFS: где хранить текстуры, модели и звук

Git LFS (Large File Storage) — расширение Git, которое кладёт в историю короткий указатель с хешем и размером файла, а само содержимое отправляет в отдельное хранилище и скачивает только для нужной версии. Типы файлов задают командой git lfs track, например *.psd, *.fbx, *.wav и *.uasset, правила записываются в .gitattributes. Делать это нужно до первого коммита: то, что уже лежит в обычной истории, LFS задним числом не облегчит.

Без LFS проект упирается в ограничения площадки. По документации GitHub о больших файлах файлы больше 100 МиБ блокируются, а репозиторий рекомендуют держать до 1 ГБ и настоятельно — до 5 ГБ. Через LFS на бесплатном тарифе можно хранить файлы до 2 ГБ.

Но у LFS свои квоты. По правилам оплаты Git LFS на GitHub на тарифах Free и Pro бесплатно 10 ГиБ хранилища и 10 ГиБ трафика в месяц. Трафик расходуют все клоны, включая сборочный сервер, а скачивания из форков списываются с владельца исходного репозитория. Без способа оплаты при исчерпанной квоте клон вернёт одни указатели вместо файлов.

Главная ловушка описана на странице об удалении файлов из Git LFS: объекты, убранные из истории, остаются на сервере и продолжают занимать квоту. Освободить место можно, только удалив и создав репозиторий заново, а с ним пропадут задачи, звёзды и форки; иначе — писать в поддержку. Поэтому черновые рендеры, исходники на десятки гигабайт и сборки игры в LFS не кладут: однажды загруженные, они будут занимать место, пока жив репозиторий.

Блокировки и слияние сцен

Для файлов, которые не сливаются, в Git LFS есть блокировки. По вики Git LFS шаблон помечают атрибутом lockable, и такие файлы на диске становятся доступными только для чтения. Перед правкой человек выполняет git lfs lock, сервер записывает блокировку на его имя, git lfs locks показывает занятые файлы, git lfs unlock освобождает. При отправке Git LFS проверяет, не изменён ли чужой заблокированный файл. Для Unreal это основной способ работы с .uasset и .umap; в UE5 конфликтов меньше на картах с World Partition, где режим One File Per Actor хранит каждый объект уровня в отдельном файле.

В Unity сцены и префабы сливают через UnityYAMLMerge — инструмент Smart Merge, который понимает структуру файла. По руководству Unity 6.6 он лежит в папке редактора, а в .gitconfig его подключают как mergetool. Все конфликты он не снимает: если двое сдвинули один и тот же объект, выбирать всё равно человеку.

Учебный пример: два человека на одном уровне

Условная ситуация. Команда делает платформер на Unity, репозиторий на GitHub. Левел-дизайнер расставляет платформы в сцене Level_02, программист меняет префаб врага из этой сцены, художник перерисовывает текстуру врага. Порядок действий подобран так, чтобы тяжёлые файлы никогда не правились двумя людьми, а текстовые конфликты решал инструмент, понимающий структуру сцены.

  1. До первого коммита команда кладёт в корень шаблон .gitignore, задаёт git lfs track для *.png, *.fbx и *.wav с пометкой lockable и проверяет, что в редакторе включены видимые .meta-файлы и текстовая сериализация (Force Text).
  2. Художник выполняет git lfs lock, правит текстуру и снимает блокировку после слияния.
  3. Программист и дизайнер работают каждый в своей ветке.
  4. При слиянии Git сообщает о конфликте в Level_02.unity. Дизайнер запускает git mergetool, UnityYAMLMerge сводит правки по объектам, и вручную остаётся решить только спорные поля.
  5. Перед отправкой дизайнер открывает сцену и проверяет, что ссылки на префаб не пустые.

С чего начать и в каком порядке осваивать

Ошибки в .gitignore и LFS дорого исправлять задним числом, поэтому их ставят в начало, а блокировки и слияние сцен — после того как схема хранения уже работает. Пробуйте на учебном проекте, который не жалко пересоздать.

  1. Базовый Git: commit, branch, merge, push и pull на маленьком проекте из одного скрипта.
  2. Новый проект Unity или Unreal с шаблоном .gitignore: убедиться, что в первом коммите нет кэшей и сборок.
  3. Git LFS: track, проверка через git lfs ls-files, клонирование в соседнюю папку, чтобы увидеть, как подтягиваются файлы.
  4. Блокировки на двух клонах: занять файл в одном и попытаться изменить его в другом.
  5. Smart Merge: в двух ветках поменять разные объекты одной сцены и слить их.

Когда эти шаги пройдены самостоятельно, проще оценить, нужна ли программа с проверкой. Git на игровых онлайн-курсах обычно идёт одним из блоков, а не отдельной дисциплиной: например, на курсе «Разработчик игр на Unity с нуля» от Skillbox он стоит в продвинутом блоке рядом с шейдерами, оптимизацией и подключением SDK, а за 10 месяцев студенты собирают несколько игр от top-down shooter до платформера.

Открыть курс

Упражнения и типичные ошибки

Хорошая тренировка — вести джем-проект на GitHub с первого дня по всем правилам: .gitignore, LFS, ветка на каждую механику. Раз в неделю клонируйте его в чистую папку: если проект открывается без розовых материалов на месте пропавших текстур, схема хранения работает.

Типичные ошибки: включить LFS, когда ассеты уже лежат в истории; коммитить ассет без .meta или переименовать его вне редактора; держать в репозитории сборки; уйти в отпуск, не сняв блокировку с уровня. И ещё одна: переписать историю ради удаления тяжёлого файла и решить, что квота освободилась.

Тем, кому удобнее учиться на Unreal, подойдёт онлайн-курс «Разработчик игр на Unreal Engine 5 с нуля» от Skillbox: это 12 месяцев, проекты от гиперказуальной игры на Blueprints и стелс-шутера до арканоида на C++ и своей игры, а Git и публикацию проектов на GitHub проходят в блоке по C++. Насколько глубоко разбирают LFS и блокировки, стоит уточнить у школы.

Открыть курс

Perforce и Unity Version Control: когда Git не лучший выбор

Крупные студии, особенно на Unreal Engine, часто работают в Perforce (Helix Core): это централизованная система, где блокировка бинарных файлов встроена в схему работы, а художнику не нужно скачивать всю историю проекта. Редактор Unreal подключается к Perforce напрямую, поэтому в вакансиях его нередко пишут рядом с движком.

Unity Version Control — так теперь называется Plastic SCM, встроенный в облачный сервис Unity, с отдельным режимом для художников без командной строки. По справке Unity об оплате DevOps (обновлена 8 июля 2026 года) с 1 марта 2026 года облачная версия не берёт плату за пользователей, бесплатны 25 ГБ хранилища и 100 ГБ исходящего трафика в месяц на организацию, дальше — 0,14 доллара за гигабайт хранения и 0,10 доллара за гигабайт трафика. Для команды на Unity с тяжёлыми ассетами это может оказаться выгоднее LFS на GitHub. Git при этом не обесценивается: код и конфигурации сборки студии обычно держат в нём, даже если ассеты живут в другой системе.

Как навык влияет на доход

Отдельной надбавки за Git в геймдеве нет, и открытых данных о зарплатах с разбивкой по этому навыку найти не удалось. В вакансиях Unity- и Unreal-разработчиков Git стоит в строке обязательных инструментов, Perforce или Unity Version Control — если студия на них работает. Влияние косвенное: без уверенной работы с ветками, LFS и блокировками трудно сдать тестовое задание ссылкой на репозиторий и влиться в команду, где общий уровень правят каждый день. Чтобы оценить рынок, отфильтруйте вакансии по своему региону и опыту, отличайте предложение работодателя от фактической зарплаты и смотрите, указана ли сумма до вычета налога.

Как выбрать обучение

Если цель — дойти на Unreal до уровня middle, где Git нужен каждый день, посмотрите онлайн-курс «Разработчик игр на Unreal Engine» от Skillbox: это 12 месяцев с проверкой заданий куратором, а Git стоит в продвинутой части программы рядом с многопоточностью, профилированием и рефакторингом. Среди проектов — мультиплеерный шутер и плагин для редактора Unreal, на которых удобно отработать ветки и историю изменений.

Открыть курс

При выборе программы проверьте, есть ли командный проект с общим репозиторием, разбирают ли Git LFS и блокировки или ограничиваются commit и push, сдаются ли работы ссылкой на репозиторий. Последнее пригодится для портфолио: работодатель увидит и игру, и то, как вы её делали.

Сравнить школы, которые учат делать игры, поможет рейтинг онлайн-школ по разработке игр. Он охватывает обучение на разных движках, поэтому смотрите в нём на программы, где контроль версий входит в практику, а не упоминается одной строкой.