Wiki
.uversionignore
Sintassi in stile gitignore per escludere file dal tracking di uVersion. Default UE5 inclusi, ricette per i setup comuni.
Introduzione
Il file .uversionignore alla radice del workspace definisce i file e le cartelle che il client
non deve mai tracciare, caricare o includere nei commit. Sintassi in stile .gitignore
(un sottoinsieme: commenti, pattern di cartella terminati con / e glob di nome/estensione),
compilata da globset. Non è
un gitignore completo: la negazione con ! e l'ancoraggio non sono supportati. Alcune regole specifiche
di Unreal Engine sono documentate più sotto.
Il file viene creato automaticamente dal client desktop al momento del clone con un template
UE5 predefinito. Puoi poi modificarlo per adattarlo al tuo progetto.
Il file è tracciato a sua volta: se lo modifichi e lo commiti, i tuoi collaboratori ricevono le tue modifiche al prossimo sync. È intenzionale: tutto lo studio ha le stesse regole di esclusione.
Sintassi
Una regola per riga. Le righe vuote e quelle che iniziano con # vengono ignorate (commenti).
Pattern di base
| Pattern | Effetto |
|---|---|
foo.txt | Qualsiasi file di nome foo.txt a qualunque livello dell'albero |
foo/ | Tutte le cartelle di nome foo e il loro contenuto, a qualunque livello (i pattern di cartella corrispondono sempre a qualsiasi profondità) |
foo | Qualsiasi file O cartella di nome foo a qualunque livello (senza slash finale) |
Wildcard
| Pattern | Effetto |
|---|---|
*.tmp | Tutti i file .tmp a qualunque livello |
*.{tmp,bak,old} | Espansione delle parentesi graffe: equivale a *.tmp + *.bak + *.old |
foo* | Qualsiasi file o cartella il cui nome inizia con foo |
?ile.txt | Il ? corrisponde esattamente a un carattere: file.txt, pile.txt, ecc. |
[abc].txt | Classe di caratteri: a.txt, b.txt, c.txt |
**/build/ | Ricorsivo: qualsiasi cartella build/ a qualunque livello (equivalente a build/) |
Content/**/Tmp/ | Ricorsivo in mezzo: qualsiasi cartella Tmp/ situata da qualche parte sotto Content/ |
Content/** | Tutto sotto Content/, a qualsiasi profondità |
Nessuna negazione (!)
A differenza di .gitignore, uVersion non supporta il prefisso ! per
reincludere un file. Una riga che inizia con ! è trattata come un pattern letterale, non come
un'eccezione. Il ri-tracking dei file all'interno di una cartella ignorata avviene solo tramite le regole automatiche:
l'eccezione ThirdParty e la whitelist dei Binaries/ dei plugin installati (vedi sotto).
Commenti
# Build artifacts (regénérés à chaque build, jamais à versioner)
Binaries/
Intermediate/
Un # a metà riga non è un commento: fa parte del pattern. Solo un # a inizio riga (dopo eventuale spazio bianco) avvia un commento.
Precedenza delle regole
L'ordine delle righe nel file non ha alcuna importanza: tutti i pattern sono compilati in
un unico GlobSet e un percorso viene ignorato non appena corrisponde a uno di essi. La decisione segue una precedenza
fissa, in quest'ordine:
- Percorso riservato
Plugins/uVersion: sempre ignorato (cartella gestita dallo strumento, distribuzione binaria), anche se una regola tentasse di includerlo. - Componente
ThirdParty: se un segmento del percorso si chiama esattamenteThirdParty, il file non viene mai ignorato. - Prefisso di plugin in whitelist (
Binaries/di un plugin installato): mai ignorato. - Altrimenti: il percorso viene ignorato se corrisponde a un pattern del file.
Template UE5 predefinito
Ecco esattamente ciò che il client desktop genera al momento del clone in un workspace 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
Puoi aggiungere le tue regole a questo file. Ricordati di committarlo affinché tutto lo studio abbia le stesse esclusioni.
Plugin
Cartella riservata Plugins/uVersion
La cartella Plugins/uVersion (il plugin uVersion stesso) è sempre ignorata, a
qualsiasi profondità, e questa regola prevale su tutto il resto. È gestita dal client desktop
(distribuzione binaria) e non deve mai essere committata. Le cartelle vicine come Plugins/uVersionExtras
non sono interessate.
uVersion applica anche una logica intelligente per gli altri plugin, senza nulla da scrivere nel file:
- Se un plugin ha
"Installed": truenel suo.uplugine non ha una cartellaSource/(plugin puramente binario, tipo Marketplace) → i suoiBinaries/sono in whitelist e quindi tracciati. È corretto: per un plugin binario, le.dllcompilate sono il plugin. - Se il plugin ha una cartella
Source/(ricompilabile) o non ha"Installed": true→ i suoiBinaries/eIntermediate/sono ignorati come per il progetto principale (i binari sono artefatti rigenerati al build).
Questa logica evita di dover mantenere manualmente le eccezioni per i plugin commerciali scaricati dall'Epic Marketplace. Uno studio può mescolare plugin sorgente e plugin binari senza configurare nulla.
Cartella ThirdParty
Qualsiasi percorso contenente ThirdParty/ è sempre tracciato, anche se una regola superiore lo ignorerebbe.
È per convenzione Unreal: ThirdParty/ contiene tipicamente librerie precompilate (.lib,
.dll, .so, .a) di cui la compilazione del progetto ha bisogno.
Plugins/MyPlugin/Source/ThirdParty/SomeLib/lib/Win64/SomeLib.lib
Anche se scrivi **/lib/ o *.lib nel tuo .uversionignore, questo file
resta tracciato grazie alla regola implicita ThirdParty/.
ThirdParty/ (raro), usa una regola
esplicita. Ma chiediti prima perché vuoi escludere le dipendenze di build dal repo: il progetto
rischia di non compilare più presso i tuoi compagni di squadra.
Ricette comuni
Progetto con art sorgente esterno (Maya, Blender, ZBrush)
Se le tue sorgenti art (.blend, .mb, .zpr) vivono accanto al progetto UE, vuoi tracciarle ma forse non le loro cache:
# Sources d'art (à versionner)
ArtSource/
# Mais pas les caches Blender / Maya
**/blendcache_*/
**/cache/
**/temp/
**/*.blend1
**/*.mb~
Progetto con diverse mappe di test da non committare
# Maps de test temporaires (chacun les sien sur son disque)
Content/Maps/Test_*.umap
Content/Maps/Test_*.uasset
Tracciare un binario specifico nonostante una regola generica
Non esistendo la negazione !, non si può escludere globalmente *.exe/*.dll
e poi reincludere un binario. Colloca piuttosto i tuoi artefatti usa e getta sotto una cartella ignorata (ad es.
Intermediate/) e tieni lo strumento da tracciare fuori dai pattern di esclusione. Alternativa Unreal:
le librerie di build appartengono a ThirdParty/, che è sempre tracciato automaticamente.
Ignorare le note personali
# Chacun ses notes
notes.md
TODO.txt
.scratch/
Progetto multipiattaforma con pacchetti intermedi
# 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/
Testare un file
Per verificare se un percorso verrà ignorato dal client prima di committare, usa la 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é
Oppure, più direttamente, in modalità JSON con un filtro jq:
$ uversion status --json | jq '.files[] | select(.path == "MaybeIgnored/File.uasset")'
Insidie comuni
Slash finale = cartella, senza slash = ambiguo
foo ignora sia il file foo sia la cartella foo/.
foo/ ignora solo la cartella. Se vuoi essere preciso, metti lo slash finale per le cartelle.
Sensibile alle maiuscole
I pattern fanno distinzione tra maiuscole e minuscole. Content/ non corrisponde a content/.
Poiché Windows è insensibile alle maiuscole lato FS, puoi ritrovarti con collisioni silenziose se
uno sviluppatore su Windows lo chiama Content/ e un altro content/. Standardizza su Content/.
Nessuna reinclusione (!)
Scrivere !Saved/Config/Foo.ini non reinclude nulla: la negazione non è supportata, la riga viene presa
come un pattern letterale. Per conservare una sottocartella, ignora solo i sottoalberi da escludere (ad es.
Saved/Logs/, Saved/Backup/) invece di tutto Saved/.
Pattern troppo ampi
*.zip ignora ogni .zip del workspace, compresi asset di gioco deliberatamente nominati
.zip (raro, ma capita nei giochi di avventura / file di dati). Preferisci pattern più specifici:
dist/*.zip, Releases/*.zip, ecc.
Modificare .uversionignore non influisce sui file già committati
Come git, aggiungere un pattern a .uversionignore non fa sparire i file già tracciati.
Devi rimuoverli esplicitamente tramite il client desktop (Mark for delete + checkin) se vuoi
toglierli dal repo.