Wiki
CLI uversion
Eksiksiz uVersion CLI referansı: tüm komutlar, flag'ler, örnekler, JSON output, çıkış kodları.
uversion ikili dosyası, masaüstü istemcisinde bulunan tüm VCS işlemlerini kapsar ve ayrıca
otomasyon (CI/CD, işe alım betikleri, üçüncü taraf araç entegrasyonu) için makine tarafından okunabilir bir
--json çıktısı sağlar. Bu sayfadaki tüm içerik geliştiricilere ve stüdyo yöneticilerine yöneliktir.
Kurulum
Windows'ta uversion.exe ikili dosyası masaüstü istemcisinin yükleyicisiyle
birlikte gelir ve otomatik olarak kullanıcı PATH'ine eklenir (%LOCALAPPDATA%\uVersion).
PATH girdisi her güncellemede yinelemesi kaldırılır ve kaldırma sırasında silinir.
Yeni bir terminal açın ve şunu yazın:
uversion --help
macOS'ta otomatiktir: ilk başlatmada masaüstü istemcisi gömülü ikili dosyaya
~/.local/bin/uversion konumunda bir bağlantı oluşturur ve bu klasörün PATH'te olduğundan emin olur
(~/.zprofile aracılığıyla). Uygulamayı bir kez başlatın, yeni bir terminal açın ve
uversion komutu kullanılabilir olur. PATH'teki başka bir konuma elle yapmak için:
ln -s /Applications/uVersion.app/Contents/Resources/uversion /usr/local/bin/uversion
Linux'ta CLI henüz .deb / .AppImage paketlerine dahil değildir.
İhtiyaç duyarsanız kaynaktan derleyin:
git clone https://github.com/jeremweb/uversion
cargo build -p uversion-cli --release
sudo cp target/release/uversion /usr/local/bin/
Yüklü sürümü kontrol etmek için:
$ uversion --version
Cheatsheet: tüm komutlar
Kullanılabilir tüm komutlar, tipik olarak karşılaşılan sırayla:
| Komut | Ne yapar |
|---|---|
uversion login <url> -u <user> | Bir sunucuda kimlik doğrulaması yap |
uversion logout | Kayıtlı kimlik bilgilerini temizle |
uversion repos | Erişilebilir repository'leri listele |
uversion clone <repo> [path] | Bir repository'yi klonla |
uversion info | Workspace durumunu + geçerli kullanıcıyı göster |
uversion status [paths...] | Değiştirilmiş / yeni / silinmiş / kilitli dosyaları gör |
uversion checkout <paths...> | Dosyaları düzenleme için kilitle |
uversion checkin <paths...> -m "..." | Değişiklikleri yükle ve commit et |
uversion revert <paths...> | Yerel değişiklikleri iptal et, kilitleri serbest bırak |
uversion sync | Sunucudan değişiklikleri al (tüm repo) |
uversion content <path> --revision <rev> | Bir dosyanın belirli bir sürümünü indir |
uversion log | Commit geçmişi |
uversion lock list | Repo'daki tüm etkin kilitleri gör |
uversion lock release <paths...> | Dosyaya dokunmadan bir kilidi serbest bırak |
uversion lock heartbeat | Tutulan tüm kilitlerin süresini uzat (uzun CI işleri) |
uversion trust <url> | Bir sunucunun kendinden imzalı TLS parmak izini sabitle (TOFU, etkileşimli; betik için --yes) |
uversion mistrust <url> | Bir sunucunun sabitlenmiş parmak izini kaldır |
uversion trusted | Parmak izi sabitlenmiş sunucuları listele |
uversion content dışındaki tüm komutlar, makine tarafından okunabilir çıktı üretmek için
--json kabul eder (bkz. JSON output). Tüm komutlar ayrıca flag ayrıntıları için
--help kabul eder.
Kimlik doğrulama
uversion login
Bir uVersion sunucusunda kimlik doğrulaması yapar. Döndürülen JWT sistem keyring'inde (Windows Credential Manager, macOS Keychain, Linux'ta libsecret) saklanır ve masaüstü istemcisi ile editör eklentileriyle paylaşılır.
uversion login <server_url> -u <username> [-p <password>]
| Flag | Description |
|---|---|
-u, --username | Kullanıcı adı |
-p, --password | Parola. Atlanırsa, sessiz bir istem (yankısız) |
Örnekler:
$ 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
Token'ı sistem keyring'inden kaldırır. Kimlik doğrulaması gerektiren bir sonraki komut parolayı yeniden ister.
$ uversion logout
✓ Credentials cleared
Repository'ler
uversion repos
Geçerli kullanıcının erişimi olan repository'leri listeler.
$ 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
Bir repository'yi yerel olarak klonlar. local_path atlanırsa, geçerli çalışma dizininde
repo adıyla bir klasör oluşturulur.
uversion clone <repo_name_or_id> [local_path]
Örnekler:
$ 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
Dosyalar
uversion status
Geçerli workspace'teki dosyaların durumunu gösterir: değiştirilmiş, yeni (izlenmeyen), silinmiş, başkaları tarafından kilitli.
uversion status [paths...] [--json]
Örnekler:
$ 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
Hedef dosyalar üzerinde özel bir kilit alır ve bunları diskte yazılabilir hale getirir.
uversion checkout <paths...> [--force] [--add] [--json]
| Flag | Description |
|---|---|
--force | Dosya başka bir kullanıcı tarafından kilitli olsa bile checkout'u zorlar. force_unlock yetkisi gerektirir (varsayılan olarak admin). Denetlenir. |
--add | Yerel olarak henüz bulunmayan yolların (yeni dosyalar) checkout'una izin verir |
Örnekler:
$ 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
Değiştirilmiş dosyaları yükler ve tek bir atomik işlemde sunucuya commit eder. Başarıdan sonra kilitler otomatik olarak serbest bırakılır.
uversion checkin [paths...] -m <message> [--all] [--json]
| Flag | Description |
|---|---|
-m, --message | Commit mesajı (zorunlu) |
-a, --all | Yalnızca argüman olarak geçirilenleri değil, workspace'teki tüm değiştirilmiş dosyaları dahil et |
Örnekler:
$ 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
Bir veya daha fazla dosyanın yerel değişikliklerini iptal eder, sunucu sürümünü geri yükler, ilgili kilitleri serbest bırakır.
uversion revert <paths...>
Örnekler:
$ uversion revert Content/Maps/MainLevel.umap
✓ Reverted: Content/Maps/MainLevel.umap (lock released)
$ uversion revert Content/Characters/ # revert récursif par dossier
uversion sync
Sunucudan en son değişiklikleri indirir ve bunları yerel workspace'e uygular.
uversion sync [--force] [--json]
| Flag | Description |
|---|---|
-f, --force | Tam sync: yalnızca son sync'ten bu yana olan farkı değil, tüm dosyaları yeniden indirir. Workspace bozulduğunda kullanışlıdır. |
Örnekler:
$ 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
Yerel workspace'e dokunmadan bir dosyanın belirli bir sürümünü (revizyon numarasına göre) indirir. revert yapmadan karşılaştırmak, arşivlemek veya geçmiş bir durumu almak için kullanışlıdır.
uversion content <path> [-r <revision>] [-o <file>]
Örnekler:
$ 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
Geçmiş
uversion log
İsteğe bağlı olarak dosyaya göre filtrelenen, geçerli repository'nin commit geçmişi.
uversion log [-n <limit>] [-p <path>] [--json]
| Flag | Description |
|---|---|
-n, --limit | Görüntülenecek girdi sayısı (varsayılan: 20) |
-p, --path | Dosya yoluna göre filtrele |
Örnekler:
$ 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
Kilitler
uversion lock list
Geçerli repository'deki tüm etkin kilitleri gösterir.
uversion lock list [--json]
Örnekler:
$ 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
Dosyanın yerel içeriğine dokunmadan bir veya daha fazla kilidi elle serbest bırakır. Değişiklik yapmadan bir varlığı «iade etmek» istediğinizde kullanın (genellikle yanlışlıkla checkout yaptınız veya başlatılan bir işi göndermeden bırakıyorsunuz).
uversion lock release <paths...> [--json]
Örnekler:
$ uversion lock release Content/Maps/MainLevel.umap
✓ Lock released: Content/Maps/MainLevel.umap
uversion lock heartbeat
Geçerli kullanıcının tuttuğu tüm kilitlerin süresini uzatır. Normal iş akışı için gerekli değildir; bir kilidi uzun süre tutan CI işleri tarafından, yöneticilerin kilidin hâlâ etkin olduğunu görmesi için kullanılır.
uversion lock heartbeat
CI'de tipik örnek:
$ while build_in_progress; do
uversion lock heartbeat
sleep 300
done
Bilgi
uversion info
Geçerli workspace'in, kimliği doğrulanmış kullanıcının ve sync durumunun bilgilerini gösterir.
$ 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
Tüm komutlar, insana yönelik görüntü yerine makine tarafından okunabilir çıktı üretmek için
--json flag'ini kabul eder. CLI'yi pipeline'larda betiklemek için vazgeçilmezdir.
Örnek: 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
}
}
Örnek: 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 }
]
}
]
}
Hata yönetimi
Başarısızlık durumunda CLI, Error: <message> ifadesini stderr'e yazar ve 1 koduyla çıkar.
Hatalar stdout'ta JSON olarak yayılmaz: --json modunda yalnızca başarı çıktısı yapılandırılmıştır.
Betiklerinizde çıkış kodunu test edin (sıfır olmayan = başarısızlık).
Yaygın desenler
Yeni bir ekip üyesinin işe alımı
uversion login https://uversion.mygamestudio.com -u newdev
uversion repos # confirme l'accès
uversion clone hero-rpg ~/Projects/HeroRPG # download initial
Günlük iş akışı (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"
Denetim betiği: kim neyi kilitledi?
uversion lock list --json | jq -r '.locks[] | "\(.user)\t\(.path)\t\(.acquired_at)"'
Geçmiş bir revizyondaki bir varlığı alma (workspace'e dokunmadan)
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
Değişkenler & çıkış kodları
Ortam değişkenleri
| Variable | Description |
|---|---|
RUST_LOG | Log ayrıntı düzeyini denetler (stderr'e yazılır), örn. RUST_LOG=debug. Varsayılan düzey: warn. CLI'nin okuduğu tek ortam değişkenidir. |
Sunucu URL'si ve kullanıcı adı config.toml
(%APPDATA%/uversion/uVersion/config/) dosyasından, token sistem keyring'inden gelir: hiçbir UV_* değişkeni okunmaz.
Çıkış kodları
| Kod | Anlamı |
|---|---|
0 | Başarı |
1 | Herhangi bir uygulama hatası (auth, izin, ağ, sunucu, IO, workspace dışı, çakışma, doğrulama…). CLI, hataları çıkış koduna göre ayırt etmez. |
2 | Argüman ayrıştırma hatası, --help veya --version (clap kuralı) |
bash betiğinde kullanım örneği:
uversion checkin --all -m "Nightly"
if [ $? -ne 0 ]; then
echo "Checkin failed, see logs (stderr)"
exit 1
fi