Wiki
.uversionignore
uVersion のトラッキングからファイルを除外するための gitignore 形式の構文。UE5 のデフォルト設定と一般的なセットアップ向けのレシピを収録。
はじめに
ワークスペースのルートにある .uversionignore ファイルは、クライアントがトラッキング、アップロード、またはコミットに含めてはならないファイルとフォルダを定義します。.gitignore 形式の構文(サブセット:コメント、/ で終わるフォルダパターン、名前/拡張子の glob)で、globset によってコンパイルされます。これは完全な gitignore ではありません。! による否定やアンカリングはサポートされていません。Unreal Engine 固有のルールをいくつか下記に記載しています。
このファイルは clone の際にデスクトップクライアントによってデフォルトの UE5 テンプレートで自動的に作成されます。その後、プロジェクトに合わせて編集できます。
このファイル自体もトラッキングされます。編集してコミットすると、共同作業者は次の sync で変更を取り込みます。これは意図的な仕様です。スタジオ全体が同じ除外ルールを共有します。
構文
1 行につき 1 つのルール。空行と # で始まる行は無視されます(コメント)。
基本パターン
| パターン | 効果 |
|---|---|
foo.txt | ツリーのどの階層にあっても foo.txt という名前のすべてのファイル |
foo/ | foo という名前のすべてのフォルダとその内容、どの階層でも(フォルダパターンは常に任意の深さでマッチします) |
foo | どの階層にあっても foo という名前のファイルまたはフォルダ(末尾スラッシュなし) |
ワイルドカード
| パターン | 効果 |
|---|---|
*.tmp | どの階層にあってもすべての .tmp ファイル |
*.{tmp,bak,old} | ブレース展開:*.tmp + *.bak + *.old と同等 |
foo* | 名前が foo で始まるすべてのファイルまたはフォルダ |
?ile.txt | ? は正確に 1 文字にマッチします:file.txt、pile.txt など |
[abc].txt | 文字クラス:a.txt、b.txt、c.txt |
**/build/ | 再帰的:どの階層にあってもすべての build/ フォルダ(build/ と同等) |
Content/**/Tmp/ | 中間での再帰:Content/ 配下のどこかにあるすべての Tmp/ フォルダ |
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 テンプレート
UE5 ワークスペースで clone の際にデスクトップクライアントが生成する内容は、正確に次のとおりです:
# 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 は、ファイルに何も書かなくても、他のプラグインに対するスマートなロジックも適用します:
- プラグインが
.upluginに"Installed": trueを持ち、かつ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
.uversionignore に **/lib/ や *.lib と書いても、このファイルは暗黙の 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 をグローバルに除外してから 1 つのバイナリを再度含めることはできません。代わりに、使い捨てのアーティファクトを無視されるフォルダ(例: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é
または、より直接的に、jq フィルタを使った JSON モードで:
$ uversion status --json | jq '.files[] | select(.path == "MaybeIgnored/File.uasset")'
よくある落とし穴
末尾スラッシュ=フォルダ、スラッシュなし=曖昧
foo はファイル foo とフォルダ foo/ の両方を無視します。foo/ はフォルダのみを無視します。正確を期したい場合は、フォルダには末尾スラッシュを付けてください。
大文字・小文字の区別
パターンは大文字・小文字を区別します。Content/ は content/ にマッチしません。Windows は FS 側で大文字・小文字を区別しないため、Windows 上のあるデベロッパーが Content/ と名付け、別のデベロッパーが content/ と名付けると、静かな衝突が発生する可能性があります。Content/ に統一してください。
再度含めることはできない(!)
!Saved/Config/Foo.ini と書いても何も再度含まれません。否定はサポートされておらず、この行はリテラルパターンとして扱われます。サブフォルダを残すには、Saved/ 全体ではなく、除外したいサブツリーのみ(例:Saved/Logs/、Saved/Backup/)を無視してください。
広すぎるパターン
*.zip はワークスペース内のすべての .zip を無視します。意図的に .zip と名付けられたゲームアセット(まれですが、アドベンチャーゲームやデータファイルで発生します)も含まれます。より具体的なパターンを推奨します:dist/*.zip、Releases/*.zip など。
.uversionignore の編集はすでにコミットされたファイルには影響しない
git と同様に、.uversionignore にパターンを追加しても、すでにトラッキングされているファイルは消えません。リポジトリから取り除きたい場合は、デスクトップクライアント(Mark for delete + checkin)を通じて明示的に削除する必要があります。