uVersion
Italiano
Scarica →

Wiki

CLI uversion

Riferimento completo della CLI di uVersion: tutti i comandi, flag, esempi, JSON output, exit code.

Il binario uversion copre tutte le operazioni VCS disponibili nel client desktop, oltre a un output --json leggibile dalle macchine per l'automazione (CI/CD, script di onboarding, integrazione con strumenti di terze parti). Tutti i contenuti di questa pagina sono destinati agli sviluppatori e agli amministratori di studio.

Installazione

Su Windows, il binario uversion.exe è incluso nell'installer del client desktop e viene aggiunto automaticamente al PATH utente (%LOCALAPPDATA%\uVersion). La voce del PATH viene deduplicata a ogni aggiornamento e rimossa alla disinstallazione. Apri un nuovo terminale e digita:

uversion --help

Su macOS è automatico: al primo avvio, il client desktop crea un collegamento al binario incorporato in ~/.local/bin/uversion e si assicura che quella cartella sia nel PATH (tramite ~/.zprofile). Avvia l'app una volta, apri un nuovo terminale e il comando uversion sarà disponibile. Per farlo manualmente in un'altra posizione del PATH:

ln -s /Applications/uVersion.app/Contents/Resources/uversion /usr/local/bin/uversion

Su Linux, la CLI non è ancora inclusa nei pacchetti .deb / .AppImage. Compilala dai sorgenti se ti serve:

git clone https://github.com/jeremweb/uversion
cargo build -p uversion-cli --release
sudo cp target/release/uversion /usr/local/bin/

Per verificare la versione installata:

$ uversion --version

Cheatsheet: tutti i comandi

L'insieme completo dei comandi disponibili, nell'ordine in cui si incontrano tipicamente:

ComandoCosa fa
uversion login <url> -u <user>Autenticarsi su un server
uversion logoutCancellare le credenziali memorizzate
uversion reposElencare i repository accessibili
uversion clone <repo> [path]Clonare un repository
uversion infoMostrare lo stato del workspace + utente corrente
uversion status [paths...]Vedere i file modificati / nuovi / eliminati / bloccati
uversion checkout <paths...>Bloccare i file per la modifica
uversion checkin <paths...> -m "..."Caricare ed eseguire il commit delle modifiche
uversion revert <paths...>Annullare le modifiche locali, rilasciare i lock
uversion syncRecuperare le modifiche dal server (intero repo)
uversion content <path> --revision <rev>Scaricare una versione specifica di un file
uversion logCronologia dei commit
uversion lock listVedere tutti i lock attivi del repo
uversion lock release <paths...>Rilasciare un lock senza toccare il file
uversion lock heartbeatEstendere la scadenza di tutti i lock detenuti (job CI lunghi)
uversion trust <url>Fissare l'impronta TLS autofirmata di un server (TOFU, interattivo; --yes per gli script)
uversion mistrust <url>Rimuovere l'impronta fissata di un server
uversion trustedElencare i server con impronta fissata

Tutti i comandi (tranne uversion content) accettano --json per produrre un output leggibile dalle macchine (vedi JSON output). Tutti i comandi accettano anche --help per i dettagli dei flag.

Autenticazione

uversion login

Si autentica su un server uVersion. Il JWT restituito viene memorizzato nel keyring di sistema (Windows Credential Manager, macOS Keychain, libsecret su Linux) e condiviso con il client desktop e i plugin dell'editor.

uversion login <server_url> -u <username> [-p <password>]
FlagDescription
-u, --usernameNome utente
-p, --passwordPassword. Se omessa, un prompt silenzioso (senza eco)

Esempi:

$ uversion login https://uversion.mygamestudio.com -u alice
Password: ********
✓ Authenticated as alice (role: artist)

$ uversion login http://192.168.1.100:3000 -u bob -p $UV_PASSWORD
✓ Authenticated as bob (role: programmer)

$ uversion login https://uversion.mygamestudio.com -u ci-nightly -p "$UV_PASSWORD"
✓ Authenticated as ci-nightly (role: programmer)

uversion logout

Rimuove il token dal keyring di sistema. Il prossimo comando che richiede l'autenticazione chiederà di nuovo la password.

$ uversion logout
✓ Credentials cleared

Repository

uversion repos

Elenca i repository a cui l'utente corrente ha accesso.

$ uversion repos
ID     Name                           Description
----------------------------------------------------------------------
1      hero-rpg                       Main RPG project
2      shared-assets                  Shared asset library
12     prototype-fps                  R&D prototype FPS

uversion clone

Clona un repository localmente. Se local_path viene omesso, viene creata una cartella con il nome del repo nella directory di lavoro corrente.

uversion clone <repo_name_or_id> [local_path]

Esempi:

$ uversion clone hero-rpg
Cloning hero-rpg to ./hero-rpg...
✓ 8,432 files in 47s (14.2 GB downloaded, 6.1 GB on disk after dedup)

$ uversion clone hero-rpg D:\Projects\HeroRPG
$ uversion clone 1                              # par ID au lieu du nom

File

uversion status

Mostra lo stato dei file del workspace corrente: modificati, nuovi (non tracciati), eliminati, bloccati da altri.

uversion status [paths...] [--json]

Esempi:

$ uversion status
Modified:
  M  Content/Maps/MainLevel.umap (locked by alice)
New:
  A  Content/Textures/NewTexture.png
Deleted:
  D  Content/OldAsset.uasset
Locked by others:
  L  Content/Characters/Hero.uasset  (locked by bob)

1 modified, 1 new, 1 deleted, 1 locked by others

$ uversion status Content/Maps                  # filtre par dossier
$ uversion status --json | jq '.summary'        # extraction scriptable

uversion checkout

Acquisisce un lock esclusivo sui file target e li rende scrivibili su disco.

uversion checkout <paths...> [--force] [--add] [--json]
FlagDescription
--forceForza il checkout anche se il file è bloccato da un altro utente. Richiede la capability force_unlock (admin per impostazione predefinita). Registrato nell'audit.
--addConsente il checkout di percorsi non ancora presenti localmente (nuovi file)

Esempi:

$ uversion checkout Content/Maps/MainLevel.umap
✓ Lock acquired: Content/Maps/MainLevel.umap

$ uversion checkout Content/Characters/Hero.uasset Content/Characters/Villain.uasset
✓ Lock acquired: Content/Characters/Hero.uasset
✓ Lock acquired: Content/Characters/Villain.uasset

$ uversion checkout Content/Maps/MainLevel.umap   # déjà locked par bob
✗ Locked by bob since 2026-05-15T08:42:11Z. Use --force if you have permission, or request release.

$ uversion checkout --force Content/Maps/MainLevel.umap   # admin force-steal
⚠ Forced lock takeover (was bob)
✓ Lock acquired: Content/Maps/MainLevel.umap

uversion checkin

Carica i file modificati e ne esegue il commit sul server in un'unica transazione atomica. I lock vengono rilasciati automaticamente al successo.

uversion checkin [paths...] -m <message> [--all] [--json]
FlagDescription
-m, --messageMessaggio di commit (obbligatorio)
-a, --allIncludere tutti i file modificati nel workspace, non solo quelli passati come argomento

Esempi:

$ uversion checkin Content/Maps/MainLevel.umap -m "Fixed lighting in main level"
Validating 1 file...
✓ All validation rules passed
Uploading: [####################] 100% · 84 MB
✓ Committed as 7f3a9b1 (1 file, 84 MB uploaded, 0 deduped)

$ uversion checkin --all -m "Weekly art update"   # tout le workspace
$ uversion checkin Content/Characters/ -m "Updated character meshes"

uversion revert

Scarta le modifiche locali di uno o più file, ripristina la versione del server, rilascia i lock corrispondenti.

uversion revert <paths...>

Esempi:

$ uversion revert Content/Maps/MainLevel.umap
✓ Reverted: Content/Maps/MainLevel.umap (lock released)

$ uversion revert Content/Characters/        # revert récursif par dossier

uversion sync

Scarica le ultime modifiche dal server e le applica al workspace locale.

uversion sync [--force] [--json]
FlagDescription
-f, --forceSync completo: riscarica tutti i file, non solo il delta dall'ultimo sync. Utile in caso di workspace corrotto.

Esempi:

$ uversion sync
Syncing from revision 41 → 47...
✓ 12 files updated, 3 added, 1 deleted (1.4 GB downloaded)

$ uversion sync --force                      # re-télécharge tout

uversion content

Scarica una versione specifica di un file (per numero di revisione) senza toccare il workspace locale. Utile per confrontare, archiviare o recuperare uno stato storico senza eseguire un revert.

uversion content <path> [-r <revision>] [-o <file>]

Esempi:

$ uversion content Content/Maps/MainLevel.umap --revision 12 --output ./snapshot.umap
✓ Downloaded MainLevel.umap @ rev 12 → ./snapshot.umap (84 MB)

$ uversion content Content/Characters/Hero.uasset --revision 12 --output ./hero-v12.uasset

Cronologia

uversion log

Cronologia dei commit del repository corrente, opzionalmente filtrata per file.

uversion log [-n <limit>] [-p <path>] [--json]
FlagDescription
-n, --limitNumero di voci da visualizzare (predefinito: 20)
-p, --pathFiltra per percorso di file

Esempi:

$ uversion log
commit 7f3a9b1c2d... (HEAD)
Author: alice
Date:   2026-05-15T08:30:00Z

    Fixed lighting in main level

    Content/Maps/MainLevel.umap (rev 12)

commit 6e2b8a0...
Author: bob
Date:   2026-05-14T17:22:00Z

    Hero pose pass

    Content/Characters/Hero.uasset (rev 8)

$ uversion log -n 5                                      # 5 derniers commits
$ uversion log --path Content/Maps/MainLevel.umap        # historique d'un fichier
$ uversion log --json -n 50 | jq '.commits[].hash'       # extract hashes en CI

Lock

uversion lock list

Mostra tutti i lock attivi nel repository corrente.

uversion lock list [--json]

Esempi:

$ uversion lock list
File                                     User            Acquired
----------------------------------------------------------------------
Content/Maps/MainLevel.umap             alice           2026-05-15T08:42:11Z
Content/Characters/Hero.uasset          bob             2026-05-14T17:00:00Z
Content/UI/HUD.uasset                   alice           2026-05-15T09:15:00Z

3 locks active

uversion lock release

Rilascia manualmente uno o più lock senza toccare il contenuto locale del file. Da usare quando vuoi «restituire» un asset senza aver fatto modifiche (in genere, l'hai fatto checkout per errore o abbandoni un lavoro iniziato senza inviarlo).

uversion lock release <paths...> [--json]

Esempi:

$ uversion lock release Content/Maps/MainLevel.umap
✓ Lock released: Content/Maps/MainLevel.umap

uversion lock heartbeat

Estende la scadenza di tutti i lock detenuti dall'utente corrente. Non necessario per il flusso di lavoro normale; usato dai job CI che mantengono un lock a lungo, così che gli admin vedano che il lock è ancora attivo.

uversion lock heartbeat

Esempio tipico in CI:

$ while build_in_progress; do
    uversion lock heartbeat
    sleep 300
  done

Info

uversion info

Mostra le informazioni del workspace corrente, dell'utente autenticato e dello stato di sync.

$ uversion info
User: alice (lead)

Repository: hero-rpg (id: 1)
Server:     https://uversion.mygamestudio.com
Workspace:  alice-cli (ws-abc123)
Local path: D:\Projects\HeroRPG
Last sync:  revision 42 (2 hours ago)

Files: 8,432 (5 modified, 2 locked by you, 3 locked by others)

JSON output

Tutti i comandi accettano il flag --json per produrre un output leggibile dalle macchine invece della visualizzazione umana. Indispensabile per scriptare la CLI nelle pipeline.

Esempio: uversion status --json

{
  "files": [
    {
      "path": "Content/Maps/MainLevel.umap",
      "status": "modified",
      "lock": { "user": "alice", "acquired_at": "2026-05-15T08:42:11Z" }
    },
    {
      "path": "Content/Textures/NewTexture.png",
      "status": "new",
      "lock": null
    }
  ],
  "summary": {
    "modified": 1,
    "new": 1,
    "deleted": 0,
    "locked_by_others": 0
  }
}

Esempio: uversion log --json -n 1

{
  "commits": [
    {
      "hash": "7f3a9b1c2d...",
      "author": "alice",
      "date": "2026-05-15T08:30:00Z",
      "message": "Fixed lighting in main level",
      "files": [
        { "path": "Content/Maps/MainLevel.umap", "action": "modified", "revision": 12 }
      ]
    }
  ]
}

Gestione degli errori

In caso di errore, la CLI scrive Error: <message> su stderr ed esce con codice 1. Gli errori non vengono emessi come JSON su stdout: in modalità --json, solo l'output di successo è strutturato. Nei tuoi script, verifica il codice di uscita (diverso da zero = errore).

Pattern comuni

Onboarding di un nuovo membro del team

uversion login https://uversion.mygamestudio.com -u newdev
uversion repos                                  # confirme l'accès
uversion clone hero-rpg ~/Projects/HeroRPG     # download initial

Flusso di lavoro quotidiano (artist / programmer)

# Début de journée
uversion sync

# Avant d'éditer
uversion checkout Content/Maps/MainLevel.umap

# ... édition dans Unreal Editor ou Rider ...

# Commit en fin de journée
uversion checkin --all -m "Updated main level + hero animations"

Script di audit: chi ha bloccato cosa?

uversion lock list --json | jq -r '.locks[] | "\(.user)\t\(.path)\t\(.acquired_at)"'

Recuperare un asset a una revisione passata (senza toccare il workspace)

uversion log --path Content/Characters/Hero.uasset -n 10    # repère le commit voulu
uversion content Content/Characters/Hero.uasset --revision 6e2b8a0 --output ~/backup/Hero-v8.uasset

CI nightly build

uversion login "$UV_SERVER" -u ci-nightly -p "$UV_PASSWORD"
uversion clone hero-rpg ./project
cd project
uversion sync --json > sync.log

# Tenir le lock pendant un long cook
uversion checkout Content/Cooking/Distribution.uasset
( while pgrep RunUAT; do uversion lock heartbeat; sleep 300; done ) &

# ... build / cook ...

uversion lock release Content/Cooking/Distribution.uasset

Variabili d'ambiente & exit code

Variabili d'ambiente

VariableDescription
RUST_LOGControlla la verbosità dei log (scritti su stderr), es. RUST_LOG=debug. Livello predefinito: warn. È l'unica variabile d'ambiente letta dalla CLI.

L'URL del server e il nome utente provengono da config.toml (%APPDATA%/uversion/uVersion/config/), il token dal keyring di sistema: nessuna variabile UV_* viene letta.

Exit code

CodiceSignificato
0Successo
1Qualsiasi errore applicativo (auth, permessi, rete, server, IO, fuori dal workspace, conflitto, validazione…). La CLI non distingue gli errori per codice di uscita.
2Errore di analisi degli argomenti, --help o --version (convenzione clap)

Esempio di utilizzo in uno script bash:

uversion checkin --all -m "Nightly"
if [ $? -ne 0 ]; then
  echo "Checkin failed, see logs (stderr)"
  exit 1
fi