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という名前の場合、ファイルは決して無視されません。ThirdParty フォルダを参照。- デフォルトで許可されるプラグインのプレフィックス(ソースコードを持たないインストール済みプラグインの
Binaries/):決して無視されません。 - それ以外:パスはファイル内のいずれかのパターンにマッチした場合に無視されます。
最初の 3 つのステップは確定的な判定です:いずれかが適用された時点で、次のステップは評価されず、あなたのパターンはまったく参照されません。だからこそ、より精密なルールでそのいずれかを「打ち消す」ことはできないのです。
デフォルトの UE5 テンプレート
以下は、UE5 ワークスペースで clone の際にデスクトップクライアントが書き込む内容を 1 行たがわず示したものです。このブロックを既存のプロジェクトに手作業でコピーする場合は、全体をそのままコピーしてください:「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 は、ファイルに何も書かなくても、他のプラグインに対するスマートなロジックも適用します:
- プラグインが
.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 または *.dll と書いても、このファイルは追跡され続けます。
これは、より精密なものが優先されるルール間の優先順位の問題ではありません。「このパスは 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 をグローバルに除外してから 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)を通じて明示的に削除する必要があります。