uVersion
Türkçe
İndir →

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:

KomutNe yapar
uversion login <url> -u <user>Bir sunucuda kimlik doğrulaması yapmak
uversion logoutSaklanan kimlik bilgilerini silmek
uversion reposErişilebilir depoları listelemek
uversion clone <repo> [path]Bir depoyu klonlamak
uversion infoWorkspace 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 syncDeğişiklikleri sunucudan almak (tüm depo)
uversion content <path> --revision <n>Bir dosyanın belirli bir sürümünü indirmek
uversion logCommit geçmişi
uversion lock listDeponun tüm kilitlerini görmek
uversion lock release <paths...>Dosyaya dokunmadan bir kilidi bırakmak
uversion lock heartbeatKilitlerinizin 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 trustedParmak 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çenekAçıklama
-u, --usernameKullanı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.
Bir oturum açmayı betiklemek için -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.

Bilinen sınır: iki sunucuda aynı kullanıcı adı

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çenekAçıklama
--paths-fileBir dosyadan ek yolları, satır başına bir tane okur. Bkz. Hacimli yol listeleri.
--forceBaş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.
--addYerelde 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çenekAçıklama
-m, --messageCommit iletisi. Zorunlu.
-a, --allYalnızca argüman olarak geçirilenleri değil, workspace'in tüm değiştirilmiş dosyalarını dahil eder.
--paths-fileBir 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]
BayrakAçıklama
-f, --forceTam 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]
BayrakAçıklama
-n, --limitGösterilecek girdi sayısı (varsayılan: 20)
-p, --pathDosya 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

Bir kilit asla süresi dolmaz

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.

Birkaç komut kökte bir dizi döndürür

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ğerAnlamı
modifiedDosya diskte yazılabilir, konmuş bir kilit yok
lockedSizin tarafınızdan ayrılmış
locked_otherBaşkası tarafından ayrılmış, adı locked_by'de
newYerelde mevcut, sunucuya bilinmiyor
deletedSunucuda 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şkenAçı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ı

KodAnlamı
0Başarı. Bu ayrıca --help ve --version'ın döndürdüğü koddur; bunlar hata değildir.
1Herhangi 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.
2Argü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