Wiki
.uversionignore
Синтаксис в стиле gitignore для исключения файлов из отслеживания uVersion. Значения по умолчанию для UE5 включены, рецепты для типовых настроек.
Введение
Файл .uversionignore в корне рабочего пространства определяет файлы и папки, которые клиент
никогда не должен отслеживать, загружать или включать в коммиты. Синтаксис в стиле .gitignore
(подмножество: комментарии, шаблоны папок, оканчивающиеся на /, и globs по имени/расширению),
компилируется через globset. Это не
полноценный gitignore: отрицание через ! и привязка не поддерживаются. Несколько правил, специфичных
для Unreal Engine, описаны ниже.
Файл создаётся автоматически десктопным клиентом в момент clone с шаблоном
UE5 по умолчанию. Затем вы можете отредактировать его под свой проект.
Сам файл тоже отслеживается: если вы отредактируете и закоммитите его, ваши коллеги получат ваши изменения при следующем sync. Это сделано намеренно: у всей студии одни и те же правила исключения.
Синтаксис
Одно правило на строку. Пустые строки и строки, начинающиеся с #, игнорируются (комментарии).
Базовые шаблоны
| Шаблон | Эффект |
|---|---|
foo.txt | Любой файл с именем foo.txt на любом уровне дерева |
foo/ | Все папки с именем foo и их содержимое, на любом уровне (шаблоны папок всегда совпадают на любой глубине) |
foo | Любой файл ИЛИ папка с именем foo на любом уровне (без завершающего слэша) |
Подстановочные знаки
| Шаблон | Эффект |
|---|---|
*.tmp | Все файлы .tmp на любом уровне |
*.{tmp,bak,old} | Раскрытие фигурных скобок: эквивалентно *.tmp + *.bak + *.old |
foo* | Любой файл или папка, имя которых начинается с foo |
?ile.txt | ? совпадает ровно с одним символом: file.txt, pile.txt и т. д. |
[abc].txt | Класс символов: a.txt, b.txt, c.txt |
**/build/ | Рекурсивно: любая папка build/ на любом уровне (эквивалентно build/) |
Content/**/Tmp/ | Рекурсивно в середине: любая папка Tmp/, расположенная где-либо под Content/ |
Content/** | Всё под Content/, на любой глубине |
Без отрицания (!)
В отличие от .gitignore, uVersion не поддерживает префикс ! для
повторного включения файла. Строка, начинающаяся с !, обрабатывается как буквальный шаблон, а не как
исключение. Повторное отслеживание файлов внутри игнорируемой папки происходит только через автоматические правила:
исключение ThirdParty и внесение в белый список Binaries/ установленных плагинов (см. ниже).
Комментарии
# Build artifacts (regénérés à chaque build, jamais à versioner)
Binaries/
Intermediate/
# в середине строки не является комментарием: он входит в состав шаблона. Только # в начале строки (после необязательных пробелов) начинает комментарий.
Приоритет правил
Порядок строк в файле не имеет никакого значения: все шаблоны компилируются в
единый GlobSet, и путь игнорируется, как только совпадает с любым из них. Решение следует фиксированному
приоритету в таком порядке:
- Зарезервированный путь
Plugins/uVersion: всегда игнорируется (папка, управляемая инструментом, бинарное распространение), даже если какое-то правило попыталось бы его включить. - Компонент
ThirdParty: если сегмент пути называется ровноThirdParty, файл никогда не игнорируется. - Префикс плагина в белом списке (
Binaries/установленного плагина): никогда не игнорируется. - Иначе: путь игнорируется, если совпадает с шаблоном из файла.
Шаблон UE5 по умолчанию
Вот в точности то, что десктопный клиент генерирует в момент clone в рабочем пространстве UE5:
# uVersion ignore - Unreal Engine 5 defaults
# Note: Installed plugins, ThirdParty directories, and plugins with
# external library dependencies are automatically whitelisted.
# Build & intermediate (regenerated by UE5)
Binaries/
Build/
DerivedDataCache/
Intermediate/
Packages/
Saved/
# IDE / editor
.vs/
.vscode/
.idea/
.vsconfig
*.sln
*.suo
*.sdf
*.opensdf
*.opendb
*.ncb
*.user
# Build artifacts
*.pdb
*.obj
*.o
*.lib
*.dll
*.so
*.dylib
*.exe
*.exp
*.ilk
*.iobj
*.ipdb
*.pch
*.ipch
*.res
*.tlog
*.manifest
# Logs & temp
*.log
*.tmp
*.bak
*.swp
# OS files
Thumbs.db
.DS_Store
desktop.ini
Вы можете добавить в этот файл собственные правила. Не забудьте закоммитить его, чтобы у всей студии были одинаковые исключения.
Плагины
Зарезервированная папка Plugins/uVersion
Папка Plugins/uVersion (сам плагин uVersion) всегда игнорируется на
любой глубине, и это правило имеет приоритет над всем остальным. Она управляется десктопным клиентом
(бинарное распространение) и никогда не должна коммититься. Соседние папки, такие как Plugins/uVersionExtras,
не затрагиваются.
uVersion также применяет умную логику для остальных плагинов, ничего не требуя писать в файле:
- Если у плагина есть
"Installed": trueв его.upluginи нет папкиSource/(чисто бинарный плагин, тип Marketplace) → егоBinaries/вносятся в белый список и, следовательно, отслеживаются. Это правильно: для бинарного плагина скомпилированные.dllи есть плагин. - Если у плагина есть папка
Source/(перекомпилируемый) или нет"Installed": true→ егоBinaries/иIntermediate/игнорируются так же, как и для основного проекта (бинарные файлы, это артефакты, регенерируемые при сборке).
Эта логика избавляет от необходимости вручную поддерживать исключения для коммерческих плагинов, загруженных из Epic Marketplace. Студия может смешивать плагины с исходниками и бинарные плагины, ничего не настраивая.
Папка ThirdParty
Любой путь, содержащий ThirdParty/, всегда отслеживается, даже если родительское правило его игнорировало бы.
Это по соглашению Unreal: ThirdParty/ обычно содержит предкомпилированные библиотеки (.lib,
.dll, .so, .a), которые нужны для компиляции проекта.
Plugins/MyPlugin/Source/ThirdParty/SomeLib/lib/Win64/SomeLib.lib
Даже если вы напишете **/lib/ или *.lib в своём .uversionignore, этот файл
останется отслеживаемым благодаря неявному правилу ThirdParty/.
ThirdParty/ (редко), используйте явное
правило. Но сначала спросите себя, зачем вам исключать зависимости сборки из репозитория: проект
может перестать компилироваться у ваших коллег.
Типовые рецепты
Проект с внешними исходниками арта (Maya, Blender, ZBrush)
Если ваши исходники арта (.blend, .mb, .zpr) лежат рядом с проектом UE, вы хотите отслеживать их, но, возможно, не их кэши:
# Sources d'art (à versionner)
ArtSource/
# Mais pas les caches Blender / Maya
**/blendcache_*/
**/cache/
**/temp/
**/*.blend1
**/*.mb~
Проект с несколькими тестовыми картами, которые не нужно коммитить
# Maps de test temporaires (chacun les sien sur son disque)
Content/Maps/Test_*.umap
Content/Maps/Test_*.uasset
Отслеживать конкретный бинарник вопреки общему правилу
Поскольку отрицания ! не существует, нельзя глобально исключить *.exe/*.dll,
а затем снова включить один бинарник. Вместо этого поместите свои одноразовые артефакты в игнорируемую папку (например,
Intermediate/) и держите отслеживаемый инструмент вне шаблонов исключения. Альтернатива Unreal:
библиотеки сборки принадлежат ThirdParty/, который всегда отслеживается автоматически.
Игнорировать личные заметки
# Chacun ses notes
notes.md
TODO.txt
.scratch/
Мультиплатформенный проект с промежуточными пакетами
# Packagés (publish via le client, pas dans le repo)
Packages/
Saved/StagedBuilds/
# Caches de cook par plateforme
Saved/Cooked/
Build/Win64/
Build/Mac/
Build/Linux/
Проверка файла
Чтобы проверить, будет ли путь проигнорирован клиентом перед коммитом, используйте CLI:
$ uversion status MaybeIgnored/File.uasset
# Si le fichier apparaît dans la sortie → il est tracké
# S'il n'apparaît pas (et qu'il existe sur disque) → il est ignoré
Или, более прямо, в режиме JSON с фильтром jq:
$ uversion status --json | jq '.files[] | select(.path == "MaybeIgnored/File.uasset")'
Частые ошибки
Завершающий слэш = папка, без слэша = неоднозначно
foo игнорирует и файл foo, и папку foo/.
foo/ игнорирует только папку. Если хотите точности, ставьте завершающий слэш для папок.
Чувствительность к регистру
Шаблоны чувствительны к регистру. Content/ не совпадает с content/.
Поскольку Windows нечувствителен к регистру на стороне ФС, вы можете столкнуться с тихими конфликтами, если
один разработчик под Windows назовёт Content/, а другой content/. Стандартизируйте на Content/.
Без повторного включения (!)
Запись !Saved/Config/Foo.ini ничего не включает повторно: отрицание не поддерживается, строка берётся
как буквальный шаблон. Чтобы сохранить подпапку, игнорируйте только исключаемые поддеревья (например,
Saved/Logs/, Saved/Backup/) вместо всего Saved/.
Слишком широкие шаблоны
*.zip игнорирует любой .zip в рабочем пространстве, включая игровые ассеты, намеренно названные
.zip (редко, но встречается в приключенческих играх / файлах данных). Предпочитайте более специфичные шаблоны:
dist/*.zip, Releases/*.zip и т. д.
Редактирование .uversionignore не влияет на уже закоммиченные файлы
Как и в git, добавление шаблона в .uversionignore не заставляет уже отслеживаемые файлы исчезнуть.
Вы должны удалить их явно через десктопный клиент (Mark for delete + checkin), если хотите
убрать их из репозитория.