Wiki
CLI uversion
uVersion CLI tam referansı: tüm komutlar, bayraklar, örnekler, JSON output, çıkış kodları.
uversion ikili dosyası, masaüstü istemcisiyle aynı sürüm denetimi işlemlerini kapsar,
ayrıca otomasyon için bir programın işleyebileceği --json çıktısı sunar: sürekli
entegrasyon, işe alım (onboarding) betikleri, kendi geliştirdiğiniz araçlar. Bu sayfa geliştiricilere
ve stüdyo yöneticilerine yöneliktir.
Kurulum
Windows üzerinde uversion.exe ikili dosyası masaüstü istemci
yükleyicisine dahildir ve otomatik olarak kullanıcı PATH'ine eklenir
(%LOCALAPPDATA%\uVersion). PATH girdisi her güncellemede yinelenmesi giderilir ve
kaldırma sırasında silinir. Yeni bir terminal açın ve şunu yazın:
uversion --help
macOS üzerinde otomatiktir: ilk açılışta masaüstü istemcisi, gömülü ikili dosyaya
~/.local/bin/uversion konumunda bir bağlantı oluşturur ve o klasörün PATH üzerinde
olmasını sağlar (~/.zprofile aracılığıyla). Uygulamayı bir kez başlatın,
yeni bir terminal açın, ve uversion komutu kullanılabilir olur. PATH
üzerindeki başka bir konuma elle oluşturmak için:
ln -s /Applications/uVersion.app/Contents/Resources/uversion /usr/local/bin/uversion
Linux üzerinde de tıpkı macOS'teki gibi otomatiktir. Masaüstü istemcisi AppImage
olarak dağıtılır ve bu AppImage uversion ikili dosyasını içerir. İlk
açılışta uygulama onu ~/.local/bin/uversion konumuna yerleştirir ve o klasörün PATH
üzerinde olmasını sağlar. Uygulamayı bir kez başlatın, yeni bir terminal açın, ve
komut kullanılabilir olur:
uversion --help
Derlemeniz gereken hiçbir şey yok. Linux'ta masaüstü istemcisi yalnızca AppImage olarak dağıtılır ve
CLI'yi getiren odur. İkili dosyayı PATH üzerinde başka bir yere koymak için onu
~/.local/bin konumundan kopyalayın:
sudo cp ~/.local/bin/uversion /usr/local/bin/uversion
Kurulu sürümü doğrulamak için:
$ uversion --version
Kopya kağıdı: tüm komutlar
Mevcut komutların tümü, tipik olarak karşılaşıldıkları sırayla:
| Komut | Ne yapar |
|---|---|
uversion login <url> -u <user> | Bir sunucuda kimlik doğrulaması yapmak |
uversion logout | Saklanan kimlik bilgilerini silmek |
uversion repos | Erişilebilir depoları listelemek |
uversion clone <repo> [path] | Bir depoyu klonlamak |
uversion info | Workspace durumunu + geçerli kullanıcıyı göstermek |
uversion status [paths...] | Değiştirilmiş / yeni / silinmiş / kilitli dosyaları görmek |
uversion checkout <paths...> | Dosyaları düzenleme için ayırmak (bir kilit koyar) |
uversion checkin <paths...> -m "..." | Değişiklikleri yüklemek ve işlemek |
uversion revert <paths...> | Yerel değişiklikleri iptal etmek ve kilitleri bırakmak |
uversion sync | Değişiklikleri sunucudan almak (tüm depo) |
uversion content <path> --revision <n> | Bir dosyanın belirli bir sürümünü indirmek |
uversion log | Commit geçmişi |
uversion lock list | Deponun tüm kilitlerini görmek |
uversion lock release <paths...> | Dosyaya dokunmadan bir kilidi bırakmak |
uversion lock heartbeat | Kilitlerinizin hâlâ kullanımda olduğunu bildirmek (izleme için) |
uversion trust <url> | Bir sunucunun kendinden imzalı sertifika parmak izini hatırlamak (etkileşimli; betiklemek için --yes) |
uversion mistrust <url> | Bir sunucunun hatırlanan parmak izini unutmak |
uversion trusted | Parmak izi hatırlanan sunucuları listelemek |
uversion content dışındaki tüm komutlar --json kabul eder; bu, okunabilir
görüntülemeyi bir programın işleyebileceği bir çıktıyla değiştirir (bkz.
JSON output). Tümü, seçeneklerin ayrıntısı için --help de
kabul eder.
checkout, checkin ve revert ayrıca
--paths-file <fichier> de kabul eder; bir Unreal projesi ölçeğinde
çalışıldığı anda vazgeçilmezdir. Bkz. Hacimli yol listeleri.
Kimlik doğrulama
uversion login
Bir uVersion sunucusunda kimlik doğrulaması yapar. Sunucu bir oturum belirteci (bir JWT, yani JSON Web Token) verir; CLI bunu sistemin parola yöneticisine koyar: Windows'ta Kimlik Bilgileri Yöneticisi, macOS'te Anahtar Zinciri, Linux'ta libsecret. Bu belirteç masaüstü istemcisi, Unreal eklentisi ve Rider eklentisiyle paylaşılır: bir tarafta oturum açmak diğerlerini de açar, oturumu kapatmak ise hepsini kapatır.
uversion login <url_serveur> -u <utilisateur> [-p <mot_de_passe>]
| Seçenek | Açıklama |
|---|---|
-u, --username | Kullanıcı adı |
-p, --password | Önerilmez. Aşağıdaki kutuya bakın. Seçenek atlanırsa CLI, UVERSION_PASSWORD ortam değişkenini okur ve o da yoksa parolayı ekranda yankı olmadan etkileşimli olarak sorar. |
-p değil, UVERSION_PASSWORD kullanın
Çok kullanıcılı bir sistemde her işlemin komut satırı, makinedeki diğer hesaplarca okunabilir:
Linux ve macOS'te ps, Windows'ta Görev Yöneticisi veya wmic. Argüman
olarak geçirilen bir parola orada düz metin olarak görünür; bir değişkenden gelse bile öyledir,
çünkü kabuk (shell) onu programı başlatmadan önce değeriyle değiştirir. Ayrıca kabuk
geçmişine ve çoğu zaman sürekli entegrasyon zincirinin günlüklerine de düşer.
CLI, tam da bunu önlemek için UVERSION_PASSWORD değişkenini okur ve -p
kullanıldığında standart hataya bir uyarı yazar.
Örnekler:
$ 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)
Kendinden imzalı bir sertifika sunan bir sunucuya ilk bağlantıda CLI, sertifikanın parmak izini
gösterir ve onaylamanızı ister, ardından onu hatırlar. Bu, SSH ile aynı olan
ilk temasta güven ilkesidir: bir kimlik bir kez kabul edilir ve sonrasında farklı
bir kimliğin her sunuluşu bildirilir. Parmak izi değişirse CLI bağlantıyı reddeder ve sizi uyarır:
bu ya sertifikanın meşru bir yenilenmesidir, ya da trafiğinizin bir üçüncü tarafça
araya girilmesidir. O durumda bilinçli hamle, uversion mistrust
<url> ve ardından yeni bir bağlantıdır.
uversion logout
Belirteci sistemin parola yöneticisinden siler ve sunucu tarafında bu hesabın tüm oturumlarını geçersiz kılar. Belirteç paylaşıldığından, bu, masaüstü istemcisini, Unreal eklentisini ve Rider eklentisini de tüm makinelerinizde oturumdan çıkarır.
$ uversion logout
Logged out (alice)
$ uversion logout # si aucune session n'était ouverte
Already logged out
Hangi hesap işlem yapıyor? En son bağlanan değil, workspace'in hesabı
Bu en çok şaşırtan noktadır ve herhangi bir şeyi betiklemeden önce bilmek daha iyidir: kullanılan kimlik son bağlantınınki değil, içinde bulunduğunuz workspace'inkidir.
Workspace, klonlanmış bir klasördür ve .uversion alt klasöründen tanınır. İçindeki
.uversion/config.toml dosyası sunucuyu ve sahip hesabı kaydeder:
[repository]
id = "1"
name = "hero-rpg"
server_url = "https://uversion.mygamestudio.com"
[workspace]
id = "..."
name = "alice-cli"
owner = "alice"
last_synced_revision = 42
Bir workspace içinde olduğunuz an, server_url ve owner geçerlidir:
status, checkout, checkin, revert,
sync, log, content, lock ve info,
server_url üzerinde owner olarak kimlik doğrular.
Yalnızca login, logout, repos ve
clone tüm workspace'ler arasında paylaşılan yapılandırmayı kullanır (Windows'ta
%APPDATA%/uversion/uVersion/config/config.toml); bu da masaüstü istemcisinin etkin
hesabını izler.
Neden. Aynı makine sıklıkla birden çok hesaba hizmet eder, örneğin iki stüdyo için
çalışan bir serbest çalışan. Bu kural olmadan tüm workspace'ler o anki etkin hesap altında çalışırdı:
alice tarafından klonlanan ama bob etkinken kullanılan bir klasör,
kilitlerini bob adına koyar, kendi dosyalarını «başkası tarafından kilitlenmiş» olarak
görür ve gönderimleri reddedilirdi.
Bir workspace'in kimliğini değiştirmek için, .uversion/config.toml
içindeki owner alanını düzenleyin ve o hesabın bu makinede en az bir kez oturum açmış
olduğundan (uversion login) emin olun ki belirteci mevcut olsun. Ardından
uversion info ile gerçekten kullanılan hesabı doğrulayın.
Belirteç, sunucu olmadan yalnızca kullanıcı adı altında saklanır. Aynı ad iki farklı uVersion sunucusunda varsa, ikisi tek ve aynı girdiyi paylaşır: ikinciye bağlanmak, birincinin belirtecini üzerine yazar. Farklı adlar kullanın ya da aynı makineden bir seferde yalnızca bir sunucu kullanın.
Depolar
uversion repos
Hesabın erişimi olan depoları listeler. Bu komut bir workspace'inkini değil, paylaşılan yapılandırmayı kullanır: dolayısıyla son bağlantınızın hesabı için yanıt verir.
$ 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
Bir depoyu yerelde alır. Yol atlanırsa, geçerli dizinde depo adında bir klasör oluşturulur. Klon
ayrıca .uversion alt klasörünü de oluşturur; bu, klasörü bir workspace yapar ve sunucuyu
ve sahip hesabı kaydeder.
Aktarım tekilleştirme (deduplication) uygular: içerik bloklara bölünür ve zaten var olan bir blok, birden çok dosyada görünse bile yalnızca bir kez saklanır. Diskte kaplanan alanın çoğu zaman indirilen hacimden belirgin biçimde daha küçük olmasının nedeni budur.
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'in dosyalarının durumunu gösterir: değiştirilmiş, yeni (untracked), 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 dosyalara özel bir kilit koyar ve onları diskte yazılabilir yapar. İzlenen dosyalar, ayrılmadıkları sürece salt okunurdur: bu, iki kişinin aynı ikili varlığı (asset) paralel olarak değiştirmesini önleyen şeydir.
uversion checkout <paths...> [--paths-file <fichier>] [--force] [--add] [--json]
| Seçenek | Açıklama |
|---|---|
--paths-file | Bir dosyadan ek yolları, satır başına bir tane okur. Bkz. Hacimli yol listeleri. |
--force | Başkası tutuyor olsa bile kilidi alır. force_unlock yetkisine sahip hesaplarla sınırlıdır, yani admin ve lead rolleri. Aşağıya bakın. |
--add | Yerelde henüz bulunmayan yolların, yeni dosyalar için ayrılmasına izin verir. |
--force gerçekte ne yapar
Seçenek başkasının kilidini alır. force_unlock yetkisiyle korunur; bu yetki
admin ve lead rollerinde bulunur. Buna sahip olmayan bir hesap
açık bir ret alır ve izlenecek çare gösterilir: bir yöneticiden istemek ya da
masaüstü istemcisinin ilgili kişiyi bilgilendiren «Serbest bırakma iste» düğmesini kullanmak.
Bir devralma gerçekten yaşandığında, ilgili yollar ve kilitleri alınan kişilerin adlarıyla birlikte denetim günlüğüne kaydedilir. Seçenek mevcut olsa da başkasının hiçbir kilidi el değiştirmediyse hiçbir şey yazılmaz: betiklerde bu bayrak çoğu zaman sistematik olarak konur ve konusuz olaylarla dolu bir günlük, kimsenin okumadığı bir günlüktür.
Ö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
# 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
Değiştirilen dosyaları yükler ve sunucuda tek bir işlemde (transaction) işler: ya hepsi geçer ya da hiçbiri. Başarı durumunda kilitler otomatik olarak bırakılır.
uversion checkin [paths...] [--paths-file <fichier>] -m <message> [--all] [--json]
| Seçenek | Açıklama |
|---|---|
-m, --message | Commit iletisi. Zorunlu. |
-a, --all | Yalnızca argüman olarak geçirilenleri değil, workspace'in tüm değiştirilmiş dosyalarını dahil eder. |
--paths-file | Bir dosyadan ek yolları, satır başına bir tane okur. Bkz. Hacimli yol listeleri. |
Ö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 birkaç dosyanın yerel değişikliklerini bırakır, sunucu sürümünü geri yükler ve ilgili kilitleri serbest bırakır.
uversion revert <paths...> [--paths-file <fichier>] [--json]
Örnekler:
$ uversion revert Content/Maps/MainLevel.umap
✓ Reverted: Content/Maps/MainLevel.umap (lock released)
$ uversion revert Content/Characters/ # récursif par dossier
Hacimli yol listeleri: --paths-file
checkout, checkin ve revert,
--paths-file <fichier> kabul eder: satır başına bir yol içeren bir
metin dosyası. Böyle okunan yollar, argüman olarak geçirilenlere eklenir, onların yerine geçmez.
Ne işe yarar. Bir Unreal projesinde bir işlem çoğunlukla birkaç bin dosyayı
kapsar. Bunların hepsini argüman olarak geçirmek sistemin bir sınırına çarpar: Windows'ta bir komut
satırı 32.767 karakteri aşamaz, ki bu yaklaşık 500 varlık (asset) yoluna denk gelir. Bunun ötesinde
komut, daha başlamadan başarısız olur ve gerçek sorun hakkında hiçbir şey söylemeyen bir sistem hata
iletisi verir. --paths-file bu sınırı kaldırır: dosya gerektiği kadarını içerebilir.
Bir klasörün değiştirilmiş tüm dosyalarını, sayısı ne olursa olsun ayırın:
$ 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
Ardından tam olarak aynı grubu gönderin:
$ uversion checkin --paths-file /tmp/changed.txt -m "Import de la passe d'éclairage"
Windows'ta, PowerShell ile:
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
Bu, Rider eklentisinin hacimli bir değişiklik kümesini iletmek için kullandığı mekanizmadır da.
uversion sync
En son değişiklikleri sunucudan indirir ve yerel workspace'e uygular.
uversion sync [--force] [--json]
| Bayrak | Açıklama |
|---|---|
-f, --force | Tam sync: yalnızca son sync'ten bu yana olan farkı değil, tüm dosyaları yeniden indirir. Workspace bozulduğunda yararlı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ü indirir. Karşılaştırmak, arşivlemek
veya bir revert yapmadan geçmiş bir durumu almak için yararlıdır.
uversion content <path> [-r <numéro_de_révision>] [-o <fichier>]
--revision bir tam sayı bekler, bir commit parmak izi değil
Bu, dosyanın revizyon numarasıdır: ilk sürümünde 1, ikincisinde 2 olan ve böyle
devam eden bir sayaç. 6e2b8a0 gibi bir commit parmak izi geçirmek, komutu daha
argümanların ayrıştırılması aşamasında başarısız kılar.
Numara uversion log --path <fichier> içinde okunur; orada her dosya satırı onu
parantez içinde gösterir. --revision atlanırsa en son sürüm indirilir.
Örnekler:
$ 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
Geçmiş
uversion log
Geçerli deponun commit geçmişi, isteğe bağlı olarak dosyaya göre filtrelenir.
uversion log [-n <limit>] [-p <path>] [--json]
| Bayrak | Açıklama |
|---|---|
-n, --limit | Gösterilecek girdi sayısı (varsayılan: 20) |
-p, --path | Dosya yoluna göre filtreler |
Örnekler:
$ 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 olarak işaretlenmiş bir satır bir silme revizyonudur: diğerleri gibi bir
numarası vardır, ama indirilecek içeriği yoktur.
Kilitler
Açıkça bırakılana dek tutar: uversion checkin ile, uversion revert ile,
uversion lock release ile ya da bir yöneticinin zorlamalı kilit açması ile.
Hiçbir otomatik süre dolumu yoktur, ne bir saat sonra, ne bir ay sonra. Ayrılıp
unutulan bir dosya, biri müdahale edene dek öyle kalır.
Dolayısıyla uversion lock heartbeat hiçbir şeyi uzatmaz. Bu komut
yalnızca «bu kilitler bana hâlâ lazım» der; böylece yöneticiler etkin bir kilidi terk edilmiş
birinden ayırt edebilir.
uversion lock list
Geçerli deponun tüm kilitlerini 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
Gösterilecek bir şey yoksa, komut No active locks yazar.
uversion lock release
Bir veya birkaç kilidi, dosyanın yerel içeriğine dokunmadan serbest bırakır. Değiştirmediğiniz bir varlığı «geri vermek» için kullanılır: yanlışlıkla ayrılmış ya da gönderilmeden bırakılmış çalışma.
uversion lock release <paths...> [--json]
Örnekler:
$ uversion lock release Content/Maps/MainLevel.umap
✓ Lock released: Content/Maps/MainLevel.umap
Bu komut yalnızca kendi kilitlerinizi serbest bırakır. Başkasınınkini kaldırmak
için yönetimden geçmek gerekir ya da admin veya lead iseniz
uversion checkout --force ile.
uversion lock heartbeat
Geçerli hesabın tuttuğu kilitlerin hâlâ kullanımda olduğunu bildirir. Bu onları uzatmaz: hiçbir şeyin süresi dolmaz. Bu bir izleme sinyalidir; böylece kilit listesini inceleyen bir yönetici hangilerinin hâlâ etkin olduğunu görür. Günlük çalışmada gereksizdir; bir dosyayı saatlerce ayrılmış tutan otomatik bir işlem için yararlıdır.
$ uversion lock heartbeat
3 lock(s) extended
$ uversion lock heartbeat # si vous ne détenez aucun verrou
No locks to extend
Sürekli entegrasyonda örnek:
$ while build_in_progress; do
uversion lock heartbeat
sleep 300
done
Bilgi
uversion info
Kullanılan hesabı ve geçerli workspace'in durumunu gösterir. Bir şey beklenmedik davrandığında ilk çalıştırılacak komuttur: CLI'nin gerçekte hangi kimlikle işlem yaptığını gösterir; bu, workspace sahibinin kimliğidir ve zorunlu olarak son bağlantınızınki değildir (bkz. Hangi hesap işlem yapıyor?).
$ 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
Bir workspace dışında ya da geçerli bir oturum olmadan:
$ uversion info
User: not logged in
Workspace: not in a uVersion workspace
Komut dosyaları saymaz ve değişikliklerin bir özetini göstermez: bu, uversion status'un
işidir.
JSON output
content dışındaki tüm komutlar --json kabul eder; bu, okunabilir
görüntülemeyi yapılandırılmış bir çıktıyla değiştirir. CLI'yi betiklenebilir kılan şey budur.
log, lock list ve repos, sarmalayan bir nesne olmadan
doğrudan bir JSON dizisi üretir. Dolayısıyla ne bir commits anahtarı,
ne bir locks anahtarı, ne bir repositories anahtarı vardır:
jq içinde yazılması gereken .[]'dir, .commits[] değil. Var
olmayan bir anahtarı hedefleyen bir ifade, hata iletisi olmadan hiçbir şey üretmez.
Örnek: 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'un olası değerleri:
| Değer | Anlamı |
|---|---|
modified | Dosya diskte yazılabilir, konmuş bir kilit yok |
locked | Sizin tarafınızdan ayrılmış |
locked_other | Başkası tarafından ayrılmış, adı locked_by'de |
new | Yerelde mevcut, sunucuya bilinmiyor |
deleted | Sunucuda mevcut, yerelde yok |
tracked | İzlenen ve bozulmamış. Yalnızca yola göre filtrelediyseniz görünür |
summary.modified'in modified ve locked'ı topladığına dikkat
edin, çünkü ikisi de üzerinde çalıştığınız bir dosyayı belirtir.
Örnek: 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
}
]
}
]
Örnek: 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'daki vade bir yazım hatası değildir: sütun veritabanında boş kalamaz, bu yüzden sunucu oraya yüz yıl ileri itilmiş bir değer yazar. Kilitlerin süresi dolmaz. Bu alanı bir kullanıcıya göstermeyin ve üzerine hiçbir şey inşa etmeyin.
Hata yönetimi
Başarısızlık durumunda CLI, Error: <message> ifadesini standart
hataya yazar ve 1 koduyla sonlanır. Hatalar asla standart çıktıda JSON olarak yayımlanmaz:
--json ile yalnızca bir başarının sonucu yapılandırılmıştır. Bir betikte, çıktının
içeriğini değil, çıkış kodunu test edin.
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 ayırdı?
lock list --json kökte bir dizi döndürür. Dolayısıyla .[] ile yinelenir ve
alanlar username, file_path ve acquired_at'tir:
uversion lock list --json | jq -r '.[] | "\(.username)\t\(.file_path)\t\(.acquired_at)"'
Belirli bir kişinin ayırdığı dosyalar:
uversion lock list --json | jq -r '.[] | select(.username == "bob") | .file_path'
Commit parmak izlerini çıkarın
Burada da dizi köktedir ve alanın adı commit_hash'tir:
uversion log --json -n 50 | jq -r '.[].commit_hash'
Bir kişinin commit'leri, iletileriyle birlikte:
uversion log --json -n 200 \
| jq -r '.[] | select(.author == "alice") | "\(.commit_hash[0:8]) \(.message)"'
Bir varlığı geçmiş bir revizyonda, workspace'e dokunmadan alın
uversion content bir revizyon numarası bekler, bir commit parmak izi
değil. Onu dosyanın geçmişinde bulun; orada parantez içinde gösterilir:
$ 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
Ya da tek seferde, bir dosyanın en son revizyonu için:
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
Sürekli entegrasyonda gecelik build
Parola UVERSION_PASSWORD üzerinden geçer, asla -p üzerinden değil: bir
işlemin komut satırı makinedeki diğer hesaplarca okunabilir.
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
Ortam değişkenleri ve çıkış kodları
Ortam değişkenleri
| Değişken | Açıklama |
|---|---|
UVERSION_PASSWORD |
-p seçeneği yokken uversion login'in kullandığı parola.
Bu, bir oturum açmayı otomatikleştirmenin önerilen yoludur: bir komut satırı
argümanının aksine, bir ortam değişkeni makinedeki diğer hesaplara maruz kalmaz. Boş ya da yok
ise CLI parolayı etkileşimli olarak sorar.
|
RUST_LOG |
Günlüklerin ayrıntı düzeyi, standart hataya yazılır. Örneğin RUST_LOG=debug.
Varsayılan düzey: warn.
|
Hiçbir UV_* değişkeni okunmaz. Bir workspace içindeyken sunucu ve hesap
.uversion/config.toml'dan, aksi hâlde paylaşılan yapılandırmadan (Windows'ta
%APPDATA%/uversion/uVersion/config/config.toml) gelir. Oturum belirteci sistemin parola
yöneticisinden gelir. Bkz. Hangi hesap işlem yapıyor?.
Çıkış kodları
| Kod | Anlamı |
|---|---|
0 | Başarı. Bu ayrıca --help ve --version'ın döndürdüğü koddur; bunlar hata değildir. |
1 | Herhangi bir uygulama hatası: kimlik doğrulama, izin, ağ, sunucu, diske yazma, workspace dışında, çakışma, doğrulama. CLI nedenleri çıkış koduyla ayırt etmez; ayrıntı standart hatadadır. |
2 | Argüman ayrıştırma hatası: bilinmeyen seçenek, eksik değer, geçersiz alt komut. |
Kabuk betiğinde örnek:
if ! uversion checkin --all -m "Nightly"; then
echo "Checkin failed, see stderr"
exit 1
fi