Wiki
CLI uversion
uVersion CLI の完全リファレンス:すべてのコマンド、フラグ、例、JSON output、終了コード。
uversion バイナリはデスクトップクライアントと同じバージョン管理操作をすべてカバーし、
さらにプログラムから扱える --json 出力を備えており、自動化に使えます:
継続的インテグレーション、オンボーディングスクリプト、自作ツールなど。このページは開発者と
スタジオ管理者向けです。
インストール
Windows では、uversion.exe バイナリはデスクトップクライアントの
インストーラーに含まれ、ユーザー PATH(%LOCALAPPDATA%\uVersion)に自動で追加されます。
PATH エントリは更新のたびに重複排除され、アンインストール時に削除されます。
新しいターミナルを開いて次のように入力します:
uversion --help
macOS では自動です:初回起動時、デスクトップクライアントは組み込みバイナリへの
リンクを ~/.local/bin/uversion に作成し、そのフォルダーが PATH 上にあることを
(~/.zprofile 経由で)保証します。アプリを一度起動し、
新しいターミナルを開けば、uversion コマンドが使えます。
PATH 上の別の場所へ手動で作成するには:
ln -s /Applications/uVersion.app/Contents/Resources/uversion /usr/local/bin/uversion
Linux でも macOS とまったく同じく自動です。デスクトップクライアントは AppImage で
配布され、この AppImage には uversion バイナリが含まれています。
初回起動時、アプリはそれを ~/.local/bin/uversion に配置し、そのフォルダーが PATH 上に
あることを保証します。アプリを一度起動し、新しいターミナルを開けば、コマンドが
使えます:
uversion --help
コンパイルするものは何もありません。Linux では、デスクトップクライアントは AppImage のみで配布され、
それが CLI をもたらします。バイナリを PATH 上の別の場所に置くには、~/.local/bin から
コピーします:
sudo cp ~/.local/bin/uversion /usr/local/bin/uversion
インストール済みのバージョンを確認するには:
$ uversion --version
チートシート:すべてのコマンド
利用可能なコマンド一式を、通常出会う順に並べています:
| コマンド | 機能 |
|---|---|
uversion login <url> -u <user> | サーバーで認証する |
uversion logout | 保存された認証情報を消去する |
uversion repos | アクセス可能なリポジトリを一覧表示する |
uversion clone <repo> [path] | リポジトリをクローンする |
uversion info | ワークスペースの状態と現在のユーザーを表示する |
uversion status [paths...] | 変更 / 新規 / 削除 / ロックされたファイルを見る |
uversion checkout <paths...> | 編集用にファイルを予約する(ロックを取得) |
uversion checkin <paths...> -m "..." | 変更をアップロードしてコミットする |
uversion revert <paths...> | ローカルの変更を破棄し、ロックを解放する |
uversion sync | サーバーから変更を取得する(リポジトリ全体) |
uversion content <path> --revision <n> | ファイルの特定バージョンをダウンロードする |
uversion log | コミット履歴 |
uversion lock list | リポジトリのすべてのロックを見る |
uversion lock release <paths...> | ファイルに触れずにロックを解放する |
uversion lock heartbeat | ロックがまだ使われていることを知らせる(監視用) |
uversion trust <url> | サーバーの自己署名証明書のフィンガープリントを記憶する(対話式。スクリプト化には --yes) |
uversion mistrust <url> | サーバーの記憶したフィンガープリントを忘れる |
uversion trusted | フィンガープリントを記憶しているサーバーを一覧表示する |
uversion content を除くすべてのコマンドは --json を受け付けます。これは
読みやすい表示をプログラムから扱える出力に置き換えます(JSON output を
参照)。すべてのコマンドはオプションの詳細を見るための --help も受け付けます。
checkout、checkin、revert は
--paths-file <fichier> も受け付けます。Unreal プロジェクト規模の作業では
欠かせません。大量のパスのリストを参照してください。
認証
uversion login
uVersion サーバーで認証します。サーバーはセッショントークン (JSON Web Token の JWT)を返し、CLI はそれをシステムのパスワードマネージャーに 保存します:Windows では資格情報マネージャー、macOS ではキーチェーン、Linux では libsecret です。 このトークンはデスクトップクライアント、Unreal プラグイン、Rider プラグインと共有され、 一方でログインすれば他方もログインし、ログアウトすればすべてがログアウトします。
uversion login <url_serveur> -u <utilisateur> [-p <mot_de_passe>]
| オプション | 説明 |
|---|---|
-u, --username | ユーザー名 |
-p, --password | 非推奨。下の囲みを参照してください。このオプションを省略すると、CLI は環境変数 UVERSION_PASSWORD を読み取り、それもなければ画面にエコーせず対話的にパスワードを尋ねます。 |
-p ではなく UVERSION_PASSWORD を使ってください
マルチユーザーのシステムでは、各プロセスのコマンドラインはマシンの他のアカウントから読めます:
Linux と macOS では ps、Windows ではタスクマネージャーや wmic。引数として
渡されたパスワードはそこに平文で現れます。変数から来た場合でも同様で、シェルがプログラムを起動する
前に変数をその値に置き換えるからです。さらにシェルの履歴にも、しばしば継続的インテグレーションの
ログにも残ります。
CLI がまさにこれを避けるために UVERSION_PASSWORD を読み取り、-p が使われたときは
標準エラー出力に警告を表示します。
例:
$ uversion login https://uversion.mygamestudio.com -u alice
Password:
Logged in as alice (artist)
# Sur un serveur de studio, en interne. Le port par défaut est 8443, en HTTPS.
$ uversion login https://192.168.1.100:8443 -u bob
Password:
Logged in as bob (programmer)
# Compte d'intégration continue : le mot de passe passe par l'environnement,
# jamais par la ligne de commande.
$ export UVERSION_PASSWORD="$SECRET_FROM_VAULT"
$ uversion login "$UV_SERVER" -u ci-nightly
Logged in as ci-nightly (programmer)
自己署名証明書を提示するサーバーへの初回接続時、CLI は証明書のフィンガープリントを表示して確認を求め、
それを記憶します。これは SSH と同じ初回接続時の信頼(Trust On First Use)の原則です:
一度アイデンティティを受け入れ、以後に異なるアイデンティティが提示されれば通知されます。
フィンガープリントが変わると、CLI は接続を拒否して警告します:これは正当な証明書の更新か、あるいは
第三者による通信の傍受のいずれかです。その場合の意図的な操作は
uversion mistrust <url> の後に再接続することです。
uversion logout
システムのパスワードマネージャーからトークンを消去し、サーバー側でこのアカウントのすべてのセッションを 無効化します。トークンは共有されているため、これはデスクトップクライアント、Unreal プラグイン、 Rider プラグインも、あなたのすべてのマシンでログアウトさせます。
$ uversion logout
Logged out (alice)
$ uversion logout # si aucune session n'était ouverte
Already logged out
どのアカウントで実行される?直近のログインではなく、ワークスペースのアカウント
これは最も驚かれる点であり、何かをスクリプト化する前に知っておくべきです: 使われるアイデンティティは直近のログインのものではなく、あなたが今いるワークスペースの ものです。
ワークスペースとはクローンされたフォルダーのことで、.uversion サブフォルダーで見分けられます。
その中の .uversion/config.toml ファイルにサーバーと所有者アカウントが記録されます:
[repository]
id = "1"
name = "hero-rpg"
server_url = "https://uversion.mygamestudio.com"
[workspace]
id = "..."
name = "alice-cli"
owner = "alice"
last_synced_revision = 42
ワークスペース内にいるかぎり、server_url と owner が優先されます:
status、checkout、checkin、revert、
sync、log、content、lock、info は
server_url に対して owner として認証します。
login、logout、repos、clone だけが
すべてのワークスペースで共有される設定(Windows では
%APPDATA%/uversion/uVersion/config/config.toml)を使い、これはデスクトップクライアントの
アクティブなアカウントに従います。
理由。1 台のマシンはしばしば複数のアカウントに使われます。たとえば 2 つのスタジオで
働くフリーランサーです。このルールがなければ、すべてのワークスペースはその時点でアクティブなアカウントの
もとで動作します:alice がクローンしたフォルダーを bob がアクティブな状態で
使うと、ロックが bob の名前で置かれ、自分のファイルが「他人にロックされている」と見え、
アップロードが拒否されてしまいます。
ワークスペースのアイデンティティを変えるには、.uversion/config.toml の
owner フィールドを編集し、そのアカウントがこのマシンで少なくとも一度ログイン
(uversion login)してトークンが存在することを確認します。その後
uversion info で、実際に使われているアカウントを確認してください。
トークンはサーバーを含まず、ユーザー名だけで保存されます。同じ名前が 2 つの異なる uVersion サーバーに 存在すると、両者は 1 つの同じエントリを共有します:2 つ目にログインすると 1 つ目のトークンが上書き されます。異なる名前を使うか、1 台のマシンからは一度に 1 つのサーバーだけを使ってください。
リポジトリ
uversion repos
アカウントがアクセスできるリポジトリを一覧表示します。このコマンドはワークスペースのものではなく共有設定を 使うため、直近のログインのアカウントに対して応答します。
$ 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 repos # si aucun dépôt n'est accessible
No repositories found
uversion clone
リポジトリをローカルに取得します。パスを省略すると、リポジトリ名のフォルダーがカレントディレクトリに
作成されます。クローンは .uversion サブフォルダーも作成し、これがフォルダーをワークスペースに
し、サーバーと所有者アカウントを記録します。
転送は重複排除を適用します:内容はブロックに分割され、既に存在するブロックは、複数の ファイルに現れても一度しか保存されません。ディスク上の使用領域がダウンロード量より大幅に小さくなることが 多いのはこのためです。
uversion clone <repo_name_or_id> [local_path]
例:
$ 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
ファイル
uversion status
現在のワークスペースのファイルの状態を表示します:変更、新規(未追跡)、削除、他人によるロック。
uversion status [paths...] [--json]
例:
$ 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
対象ファイルに排他ロックを掛け、ディスク上で書き込み可能にします。追跡されたファイルは予約されるまで 読み取り専用です:これが 2 人が同じバイナリアセットを並行して編集するのを防ぎます。
uversion checkout <paths...> [--paths-file <fichier>] [--force] [--add] [--json]
| オプション | 説明 |
|---|---|
--paths-file | ファイルから追加のパスを 1 行に 1 つ読み込みます。大量のパスのリストを参照。 |
--force | 他人が保持していてもロックを奪います。force_unlock 権限を持つアカウント、すなわち admin と lead ロールに限られます。下記を参照。 |
--add | まだローカルに存在しないパスの予約を、新規ファイル向けに許可します。 |
--force が実際に行うこと
このオプションは他人のロックを奪います。force_unlock 権限で保護されており、これは
admin と lead ロールが保持します。それを持たないアカウントは明示的な
拒否を受け、取るべき手段が示されます:管理者に依頼するか、デスクトップクライアントの
「リリースを依頼」ボタンを使う(該当者に通知されます)。
実際に奪取が行われたときは、監査ログに記録されます。対象のパスと、ロックを奪われた 人の名前が記されます。オプションが付いていても他人のロックが誰の手にも渡らなかった場合は何も記録 されません:スクリプトではこのフラグはしばしば常時付けられるもので、無意味なイベントで埋まった ログは誰も読まないログだからです。
例:
$ 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
# Fichier déjà réservé par bob
$ uversion checkout Content/Maps/MainLevel.umap
✗ File is locked (bob)
# Compte sans la capacité force_unlock
$ uversion checkout --force Content/Maps/MainLevel.umap
Error: Taking a lock held by another user requires the force_unlock capability
(admin or lead). Ask an administrator, or use Request Release to ask the holder.
# Compte admin ou lead : le vol passe, et il est tracé
$ uversion checkout --force Content/Maps/MainLevel.umap
✓ Lock acquired: Content/Maps/MainLevel.umap
uversion checkin
変更されたファイルをアップロードし、単一のトランザクションでサーバーにコミットします:すべてが通るか、 何も通らないかのいずれかです。成功時にはロックが自動的に解放されます。
uversion checkin [paths...] [--paths-file <fichier>] -m <message> [--all] [--json]
| オプション | 説明 |
|---|---|
-m, --message | コミットメッセージ。必須。 |
-a, --all | 引数で渡したものだけでなく、ワークスペースの変更されたファイルすべてを含めます。 |
--paths-file | ファイルから追加のパスを 1 行に 1 つ読み込みます。大量のパスのリストを参照。 |
例:
$ 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
1 つ以上のファイルのローカルの変更を破棄し、サーバーのバージョンを復元し、対応するロックを解放します。
uversion revert <paths...> [--paths-file <fichier>] [--json]
例:
$ uversion revert Content/Maps/MainLevel.umap
✓ Reverted: Content/Maps/MainLevel.umap (lock released)
$ uversion revert Content/Characters/ # récursif par dossier
大量のパスのリスト:--paths-file
checkout、checkin、revert は
--paths-file <fichier> を受け付けます:1 行に 1 つのパスを含む
テキストファイルです。こうして読み込まれたパスは引数で渡したものに追加され、置き換えるわけでは
ありません。
用途。Unreal プロジェクトでは、1 つの操作が数千のファイルに及ぶことがよくあります。
それらをすべて引数で渡すとシステムの制限にぶつかります:Windows ではコマンドラインは 32,767 文字を
超えられず、これはおよそ 500 個のアセットパスに相当します。それを超えると、コマンドは起動する前に
失敗し、実際の問題については何も語らないシステムのエラーメッセージが出ます。--paths-file は
この制限を取り除きます:ファイルには必要なだけ含められます。
フォルダー内の変更されたファイルを、数にかかわらずすべて予約する:
$ uversion status --json \
| jq -r '.files[] | select(.status == "modified") | .path' > /tmp/changed.txt
$ wc -l /tmp/changed.txt
3184 /tmp/changed.txt
$ uversion checkout --paths-file /tmp/changed.txt
次に、まったく同じ一括をアップロードする:
$ uversion checkin --paths-file /tmp/changed.txt -m "Import de la passe d'éclairage"
Windows では、PowerShell で:
PS> (uversion status --json | ConvertFrom-Json).files |
Where-Object { $_.status -eq "modified" } |
ForEach-Object { $_.path } |
Set-Content -Encoding utf8 changed.txt
PS> uversion checkout --paths-file changed.txt
これは Rider プラグインが大量の変更セットを渡すために使っている仕組みでもあります。
uversion sync
サーバーから最新の変更をダウンロードし、ローカルのワークスペースに適用します。
uversion sync [--force] [--json]
| フラグ | 説明 |
|---|---|
-f, --force | 完全同期:前回の同期以降の差分だけでなく、すべてのファイルを再ダウンロードします。ワークスペースが壊れているときに有用です。 |
例:
$ 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
ローカルのワークスペースに触れず、ファイルの特定バージョンをダウンロードします。比較、アーカイブ、あるいは
revert をせずに過去の状態を取り出すのに有用です。
uversion content <path> [-r <numéro_de_révision>] [-o <fichier>]
--revision は整数を期待し、コミットのハッシュではありません
これはファイルのリビジョン番号です:最初のバージョンで 1、2 番目で 2、と続く
カウンターです。6e2b8a0 のようなコミットハッシュを渡すと、引数の解析の段階でコマンドが
失敗します。
番号は uversion log --path <fichier> で読めます。各ファイル行が括弧内に表示します。
--revision を省略すると最新バージョンをダウンロードします。
例:
$ uversion content Content/Maps/MainLevel.umap --revision 12 --output ./snapshot.umap
$ uversion content Content/Characters/Hero.uasset -r 8 -o ./hero-v8.uasset
# Sans --output, le contenu est écrit sur la sortie standard
$ uversion content Config/DefaultEngine.ini -r 3 > DefaultEngine-v3.ini
履歴
uversion log
現在のリポジトリのコミット履歴。任意でファイルによってフィルタできます。
uversion log [-n <limit>] [-p <path>] [--json]
| フラグ | 説明 |
|---|---|
-n, --limit | 表示するエントリ数(デフォルト:20) |
-p, --path | ファイルパスでフィルタ |
例:
$ uversion log
commit 7f3a9b1c2d...
Author: alice
Date: 2026-05-15 08:30:00 UTC
Fixed lighting in main level
Content/Maps/MainLevel.umap (rev 12)
commit 6e2b8a0...
Author: bob
Date: 2026-05-14 17:22:00 UTC
Hero pose pass
Content/Characters/Hero.uasset (rev 8)
Content/Characters/OldHero.uasset (deleted, rev 9)
$ uversion log -n 5 # 5 derniers commits
$ uversion log --path Content/Maps/MainLevel.umap # historique d'un fichier
deleted と記された行は削除リビジョンです:他と同様に番号を持ちますが、ダウンロードすべき
内容はありません。
ロック
明示的に解放されるまで保持されます:uversion checkin、uversion revert、
uversion lock release、または管理者による強制解除によって。自動的な期限切れは
存在しません。1 時間後にも、1 か月後にも起こりません。予約されて忘れられたファイルは、誰かが
介入するまでそのままです。
したがって、uversion lock heartbeat は何も延長しません。このコマンドは
「これらのロックはまだ使っている」と言うだけで、管理者がアクティブなロックと放置されたロックを
区別できるようにするためのものです。
uversion lock list
現在のリポジトリのすべてのロックを表示します。
uversion lock list [--json]
例:
$ 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
表示するものがなければ、コマンドは No active locks と書きます。
uversion lock release
ファイルのローカルの内容に触れず、1 つ以上のロックを解放します。変更していないアセットを「返す」のに 使います:誤って予約した、あるいはアップロードせずに作業を中断した場合です。
uversion lock release <paths...> [--json]
例:
$ uversion lock release Content/Maps/MainLevel.umap
✓ Lock released: Content/Maps/MainLevel.umap
このコマンドは自分自身のロックだけを解放します。他人のロックを外すには、管理を経由するか、
あなたが admin または lead なら uversion checkout --force を
使う必要があります。
uversion lock heartbeat
現在のアカウントが保持するロックがまだ使われていることを知らせます。 これはそれらを延長しません:何も期限切れになりません。これは監視用のシグナルで、ロック 一覧を調べる管理者が、どれがまだアクティブかを見られるようにするためです。 日々の作業では不要ですが、ファイルを何時間も予約したままにする自動処理には有用です。
$ uversion lock heartbeat
3 lock(s) extended
$ uversion lock heartbeat # si vous ne détenez aucun verrou
No locks to extend
継続的インテグレーションでの例:
$ while build_in_progress; do
uversion lock heartbeat
sleep 300
done
情報
uversion info
使われているアカウントと、現在のワークスペースの状態を表示します。何かが予期しない動作をするとき最初に 実行すべきコマンドです:CLI が実際にどのアイデンティティで動作しているかを示します。それはワークスペースの 所有者のものであり、必ずしもあなたの直近のログインのものではありません(どの アカウントで実行される?を参照)。
$ uversion info
User: alice (lead)
Repository: hero-rpg (id: 1)
Server: https://uversion.mygamestudio.com
Workspace: alice-cli (3f2a1c8e-...)
Local path: D:\Projects\HeroRPG
Last sync: revision 42
ワークスペースの外、または有効なセッションがない場合:
$ uversion info
User: not logged in
Workspace: not in a uVersion workspace
このコマンドはファイルを数えず、変更の要約も表示しません:それは uversion status の役割です。
JSON output
content を除くすべてのコマンドは --json を受け付け、読みやすい表示を構造化された
出力に置き換えます。これが CLI をスクリプト化可能にします。
log、lock list、repos は、包む オブジェクトなしで直接
JSON 配列を生成します。したがって commits キーも、locks キーも、
repositories キーもありません:jq で書くべきは .[] であって、
.commits[] ではありません。存在しないキーを狙う式は、エラーメッセージなしに何も生成しません。
例:uversion status --json
{
"files": [
{
"path": "Content/Maps/MainLevel.umap",
"status": "locked",
"locked_by": "alice",
"is_owned": true,
"version": 12
},
{
"path": "Content/Textures/NewTexture.png",
"status": "new",
"locked_by": null,
"is_owned": false,
"version": 0
}
],
"summary": {
"modified": 1,
"new": 1,
"deleted": 0,
"locked_by_others": 0
}
}
status の取り得る値:
| 値 | 意味 |
|---|---|
modified | ファイルはディスク上で書き込み可能で、ロックは掛かっていない |
locked | あなたが予約している |
locked_other | 他人が予約しており、locked_by に名前がある |
new | ローカルに存在し、サーバーには未知 |
deleted | サーバーに存在し、ローカルには不在 |
tracked | 追跡済みで無傷。パスでフィルタした場合にのみ現れる |
summary.modified は modified と locked を合算することに注意して
ください。どちらもあなたが作業しているファイルを指すからです。
例:uversion log --json -n 1
[
{
"commit_hash": "7f3a9b1c2d...",
"message": "Fixed lighting in main level",
"author": "alice",
"created_at": "2026-05-15T08:30:00Z",
"files": [
{
"path": "Content/Maps/MainLevel.umap",
"revision_number": 12,
"file_size": 84934656,
"is_delete": false
}
]
}
]
例:uversion lock list --json
[
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"file_id": 12345,
"file_path": "Content/Maps/MainLevel.umap",
"user_id": 12,
"username": "alice",
"acquired_at": "2026-05-15T08:42:11Z",
"expires_at": "2126-05-15T08:42:11Z"
}
]
2126 という期限は誤植ではありません:データベースでこの列は空のままにできないため、サーバーは 100 年 先に押しやった値を書きます。ロックは期限切れになりません。このフィールドはユーザーに表示せず、その上に 何も構築しないでください。
エラー処理
失敗すると、CLI は Error: <message> を標準エラー出力に書き、コード 1 で
終了します。エラーが標準出力に JSON で出されることはありません:--json でも、構造化されるのは
成功の結果だけです。スクリプトでは、出力の内容ではなく終了コードを確認してください。
よく使うパターン
新しいチームメンバーのオンボーディング
uversion login https://uversion.mygamestudio.com -u newdev
uversion repos # confirme l'accès
uversion clone hero-rpg ~/Projects/HeroRPG # download initial
日々のワークフロー(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"
監査スクリプト:誰が何を予約しているか?
lock list --json はルートに配列を返します。したがって .[] で反復し、フィールドは
username、file_path、acquired_at です:
uversion lock list --json | jq -r '.[] | "\(.username)\t\(.file_path)\t\(.acquired_at)"'
特定の人物が予約したファイル:
uversion lock list --json | jq -r '.[] | select(.username == "bob") | .file_path'
コミットハッシュを抽出する
ここでも配列はルートにあり、フィールドは commit_hash という名前です:
uversion log --json -n 50 | jq -r '.[].commit_hash'
特定の人物のコミットを、そのメッセージとともに:
uversion log --json -n 200 \
| jq -r '.[] | select(.author == "alice") | "\(.commit_hash[0:8]) \(.message)"'
ワークスペースに触れずに、過去のリビジョンのアセットを取り出す
uversion content はリビジョン番号を期待し、コミットハッシュではありません。
ファイルの履歴で見つけてください。括弧内に表示されます:
$ uversion log --path Content/Characters/Hero.uasset -n 10
commit 6e2b8a0...
Author: bob
Date: 2026-05-14 17:22:00 UTC
Hero pose pass
Content/Characters/Hero.uasset (rev 8)
$ uversion content Content/Characters/Hero.uasset --revision 8 --output ~/backup/Hero-v8.uasset
あるいは一度に、ファイルの最新リビジョンについて:
REV=$(uversion log --json --path Content/Characters/Hero.uasset -n 1 \
| jq -r '.[0].files[] | select(.path == "Content/Characters/Hero.uasset") | .revision_number')
uversion content Content/Characters/Hero.uasset --revision "$REV" --output ./Hero.uasset
継続的インテグレーションでの夜間ビルド
パスワードは -p ではなく UVERSION_PASSWORD を通します:プロセスのコマンドラインは
マシンの他のアカウントから読めるからです。
export UVERSION_PASSWORD="$SECRET_FROM_VAULT"
uversion login "$UV_SERVER" -u ci-nightly
unset UVERSION_PASSWORD
uversion clone hero-rpg ./project
cd project
uversion sync --json > sync.log
# Réserver un fichier pour la durée du cook, et signaler qu'il sert toujours
uversion checkout Content/Cooking/Distribution.uasset
( while pgrep RunUAT; do uversion lock heartbeat; sleep 300; done ) &
# ... build et cook ...
uversion lock release Content/Cooking/Distribution.uasset
環境変数と終了コード
環境変数
| 変数 | 説明 |
|---|---|
UVERSION_PASSWORD |
-p オプションがないときに uversion login が使うパスワード。
これがログインを自動化する推奨の方法です:コマンドライン引数と違い、環境変数は
マシンの他のアカウントに晒されません。空または不在なら、CLI は対話的にパスワードを尋ねます。
|
RUST_LOG |
ログの詳細度。標準エラー出力に書かれます。たとえば RUST_LOG=debug。デフォルトの
レベル:warn。
|
UV_* 変数は一切読まれません。ワークスペース内にいるときはサーバーとアカウントは
.uversion/config.toml から、そうでなければ共有設定(Windows では
%APPDATA%/uversion/uVersion/config/config.toml)から来ます。セッショントークンはシステムの
パスワードマネージャーから来ます。どのアカウントで実行される?を参照。
終了コード
| コード | 意味 |
|---|---|
0 | 成功。--help と --version が返すコードでもあり、これらはエラーではありません。 |
1 | あらゆるアプリケーションエラー:認証、権限、ネットワーク、サーバー、ディスク書き込み、ワークスペース外、競合、検証。CLI は終了コードで原因を区別しません。詳細は標準エラー出力にあります。 |
2 | 引数の解析エラー:未知のオプション、値の欠落、無効なサブコマンド。 |
シェルスクリプトでの例:
if ! uversion checkin --all -m "Nightly"; then
echo "Checkin failed, see stderr"
exit 1
fi