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, файл никогда не игнорируется. См. Папка ThirdParty. - Префикс плагина, разрешённый по умолчанию (
Binaries/установленного плагина без исходного кода): никогда не игнорируется. - Иначе: путь игнорируется, если совпадает с одним из шаблонов файла.
Первые три шага являются окончательными решениями: как только один из них срабатывает, следующий не оценивается, а ваши шаблоны не просматриваются вовсе. Именно поэтому нельзя "перебить" какой-либо из них более точным правилом.
Шаблон UE5 по умолчанию
Ниже построчно приведено то, что десктопный клиент записывает в момент clone в рабочем
пространстве UE5. Если вы копируете этот блок вручную в существующий проект, копируйте его целиком:
разделы «IDE» и «генерация проекта Linux» забывают чаще всего, и
их отсутствие приводит к тому, что файлы проекта, перегенерируемые при каждой сборке, начинают отслеживаться,
а затем оказываются в конфликте у всех.
# 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
*.slnx
*.xcworkspace/
*.xcodeproj/
*.code-workspace
*.suo
*.sdf
*.opensdf
*.opendb
*.ncb
*.user
# Linux project generation (GenerateProjectFiles)
Makefile
.ignore
# 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 или *.dll в своём
.uversionignore, этот файл останется отслеживаемым.
Это не вопрос приоритета между правилами, где победило бы самое точное. Проверка
«содержит ли этот путь сегмент ThirdParty?» выполняется до любого
чтения ваших шаблонов, и если ответ да, файл объявляется отслеживаемым, и оценка
на этом останавливается. Ваши правила никогда не просматриваются.
Поэтому не существует «явного исключения», чтобы исключить поддерево
ThirdParty: никакое правило, сколь угодно точное, не сможет этого добиться. Если вам
действительно нужно отставить такую папку, единственный путь, это переименовать её или переместить за пределы
структуры ThirdParty.
Только одно превосходит это исключение: зарезервированная папка
Plugins/uVersion, которая остаётся игнорируемой даже внутри ThirdParty.
ThirdParty
Сравнение идёт по целому сегменту пути, а не по префиксу имени.
Папка с именем ThirdPartyLibs, ThirdParty_Old или
MyThirdParty не затрагивается: её содержимое подчиняется вашим
правилам, как любой другой файл, и правило *.dll его исключит.
Это частый источник удивления: Source/ThirdParty/Lib/x.dll отслеживается,
Source/ThirdPartyLibs/Lib/x.dll нет. Если вы заметили, что какая-то библиотека
не отправляется, сначала проверьте точное написание папки.
Типовые рецепты
Проект с внешними исходниками арта (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), если хотите
убрать их из репозитория.