uVersion
Русский
Скачать →

Wiki

Десктопный клиент

Десктопный клиент uVersion для Windows, macOS и Linux: установка, workspace, вкладки, настройки.

Установка

Десктопный клиент это нативное приложение, доступное для Windows, macOS (Apple Silicon) и Linux. Установщики Windows, macOS и Linux также содержат CLI uversion и делают её доступной. Скачайте на /downloads.

Windows

Скачайте uVersion_x.y.z_x64-setup.exe (подписанный установщик NSIS, ~25 МБ). При запуске установщик:

  • Устанавливает клиент в %LOCALAPPDATA%\uVersion (для пользователя, без прав администратора)
  • Добавляет папку установки в пользовательский PATH (CLI uversion.exe встроена там)
  • Создаёт ярлык в меню «Пуск»
  • Включает автообновление через updater Tauri

Windows в парке машин: MSI

Чтобы развернуть на множестве машин с помощью средства управления парком (Intune, SCCM, групповая политика...), используйте MSI, а не установщик NSIS: uVersion_latest_x64_en-US.msi (стабильный URL, всегда последняя версия, ~10 МБ). Тихая установка, для машины:

msiexec /i uVersion_latest_x64_en-US.msi /qn /norestart
  • Устанавливает в C:\Program Files\uVersion (нужны права администратора). CLI uversion.exe включена, но папка не добавляется в PATH: если она нужна вашим пользователям в терминале, добавьте её средством развёртывания.
  • При установке через MSI нет автообновления: клиент остаётся на развёрнутой версии, а обновления парка выполняются повторным развёртыванием следующего MSI. Это сделано намеренно: встроенный updater установил бы вторую копию, для пользователя, рядом с управляемой.
  • Тихое удаление: msiexec /x uVersion_latest_x64_en-US.msi /qn

При первом открытии каждый пользователь вводит адрес сервера и проверяет отпечаток сертификата, один раз на пользователя и на машину (см. Отпечаток TLS).

macOS (Apple Silicon)

Скачайте uVersion_x.y.z_macos-arm64.app.zip (~32 МБ, подписано Developer ID и нотаризовано Apple). Двойной клик для распаковки, затем перетащите uVersion.app в /Applications. При первом запуске Gatekeeper автоматически проверяет нотаризацию, без всякого предупреждения.

CLI uversion встроена в приложение. При первом запуске клиент автоматически создаёт символическую ссылку на ~/.local/bin/uversion и добавляет ~/.local/bin в ваш PATH через ~/.zprofile: никаких ручных действий не требуется. Откройте новый терминал, и uversion доступна.

Примечание: поддерживается только Apple Silicon (M1/M2/M3/M4). Бинарника Intel нет.

Linux

Единственный формат для x86_64: AppImage (uVersion_x.y.z_amd64.AppImage, ~85 МБ). Портативный, он содержит свои зависимости (libwebkit2gtk, libgtk, libsoup и т. д.) и работает на любом свежем дистрибутиве без установки в систему. Требования: Ubuntu 24.04 или выше, Debian 13 или выше, либо дистрибутив эквивалентного поколения. Бинарник требует свежую системную библиотеку C, и AppImage не снижает эту планку: он содержит графическое окружение, а не библиотеку C.

Рекомендуемый путь это установочный скрипт. Без sudo:

curl -fSL https://uversion.io/downloads/client/install.sh | sh

Он не делает ничего волшебного, и главное ничего, что требует прав:

  • он отказывается работать от root, на архитектуре, отличной от x86_64, или на системе, слишком старой для запуска бинарника, сообщая, какая из трёх причин мешает;
  • он скачивает AppImage в ~/Applications/uVersion.AppImage, проверяет, что пришедшее это действительно исполняемый файл Linux (иначе captive-портал или страница ошибки были бы сохранены и сделаны исполняемыми, чтобы затем непонятным образом отказать), затем ставит его на место одним движением, что остаётся безопасным, даже если копия уже запущена;
  • он запускает приложение. Именно этот запуск создаёт запись в меню приложений, поэтому лучше дать ему это сделать. В удалённом сеансе без графического интерфейса он вместо этого показывает точную команду, которую нужно ввести с вашего рабочего стола.
Нечего устанавливать, включая FUSE Скрипт ничего не устанавливает в систему. Среда выполнения AppImage слинкована статически, поэтому libfuse2 ему ни к чему: ему нужен только FUSE ядра, который в поддерживаемых версиях есть с самого начала. А когда его нет, приложение при запуске распаковывает себя вместо монтирования, ничего не требуя. Отсутствие FUSE меняет, стало быть, лишь режим запуска, ему никогда не нужно превращаться в запрос администратора. Выбранный режим запоминается в записи меню, вам не нужно его помнить.

Вы также можете скачать AppImage вручную со страницы загрузки, сделать его исполняемым и запустить:

chmod +x uVersion_x.y.z_amd64.AppImage
./uVersion_x.y.z_amd64.AppImage

Для клиента нет пакета .deb, и его не будет: пакет, установленный dpkg, может обновиться только снова через dpkg, то есть через повышение привилегий на каждой версии, что невозможно для машины без прав администратора. AppImage заменяет себя сам, без пароля. А сервер сохраняет свой пакет .deb.

Примечание: CLI uversion встроена в AppImage. При первом запуске клиент копирует бинарник в ~/.local/bin/uversion и добавляет ~/.local/bin в ваш PATH через ~/.profile (ручных действий не требуется). Запись в меню приложений создаётся при первом запуске по той же причине: AppImage это файл, а не установка.

Первый запуск

1. Укажите адрес сервера и ваши учётные данные

При первом запуске клиент показывает страницу входа под названием Welcome to uVersion. Поле Server address не ждёт полного URL: оно разбито на три блока, неизменяемый префикс https://, машину и порт (по умолчанию 8443). Схема задана, клиент не может создать http://. Вставка полного адреса или host:port в поле машины автоматически распределяет его между двумя полями. Затем укажите Username и Password, потом Sign in.

Страница входа десктопного клиента: поле Server address в трёх блоках (серый префикс https://, машина, порт 8443), поля Username и Password, и кнопка Sign in.

2. Проверьте отпечаток сервера, один раз

Поскольку сервер uVersion по умолчанию самоподписанный, самое первое подключение к данной машине показывает Verify server identity: сравните отпечаток SHA-256 с тем, что дал вам администратор, затем нажмите Trust this server. Вопрос задаётся лишь один раз на сервер, и если он возвращается под красным заголовком Server identity changed, отпечаток изменился: не принимайте, не проверив. См. Отпечаток TLS.

Окно Verify server identity: отпечаток SHA-256 сервера и кнопка Trust this server.

После подключения клиент безопасно запоминает вашу сессию. CLI uversion и плагины редакторов (Unreal, Rider) автоматически переиспользуют те же учётные данные: вы больше нигде не вводите пароль заново.

Открыть или клонировать репозиторий

Подключение не открывает никакого проекта: список репозиториев запрашивается явно. Это одно и то же окно служит и для первого клонирования проекта, и для повторного открытия workspace, уже имеющегося на диске.

1. Открыть окно Open Repository

Пока не открыта ни одна вкладка, Workspace показывает No repository selected и кнопку Open Repository. Как только у вас есть хотя бы одна вкладка, тот же экран открывается через + в панели вкладок. Окно перечисляет, по одной карточке на проект, репозитории, к которым у вас есть доступ, с кнопкой Refresh, чтобы заново запросить список у сервера.

Окно Open Repository: по одной карточке на проект с его именем, описанием и датой создания, поле Workspace name под каждой карточкой, зелёная кнопка Clone, и внизу флажок Download files after clone.

2. Клонировать или повторно открыть существующий workspace

Каждая карточка предлагает действие, соответствующее её состоянию:

  • Clone: создаёт новый workspace. Поле Workspace name карточки именует создаваемую папку и берёт имя проекта, если оставлено пустым. Следующий выбор папки спрашивает родительскую папку: подпапку uVersion создаёт сам.
  • Clone New: та же кнопка, переименованная, когда для этого проекта workspace уже существует. Клонировать во второй раз законно, например чтобы держать два состояния проекта рядом.
  • Open: повторно открывает workspace, уже клонированный на этой машине, чей путь напоминается под карточкой. Switch to Open Tab появляется вместо неё, когда вкладка уже открыта.
  • Open Local Repository..., внизу окна: указывает на папку, уже содержащую .uversion/, например после перемещения workspace.

Флажок Download files after clone внизу по умолчанию установлен и запускает загрузку сразу за клонированием. Снимите его, чтобы создать workspace сейчас и забрать файлы позже.

3. Следить за загрузкой

Окно закрывается, как только начинается клонирование, и это намеренно: передача может длиться часами и не должна вас блокировать. Прогресс продолжается в шапке клиента, вкладка workspace открывается сама в конце, а обрыв сети ничего не теряет, так как передача возобновляется сама собой.

Workspace

Панель вкладок workspace сверху, с несколькими одновременно открытыми workspace.

Workspace это локальная папка, связанная с репозиторием сервера. Клиент может управлять несколькими workspace одновременно, показанными в панели вкладок сверху. Каждый workspace хранит свои метаданные в .uversion/ в корне локальной папки:

  • .uversion/config.toml: единственный по-настоящему важный файл. Его секция [workspace] несёт владельца workspace (owner), его идентификатор, его имя и last_synced_revision, ревизию, на которую вы синхронизированы (файла .last_sync нет). Здесь же запоминается путь к движку Unreal.
  • .uversion/checkouts_<workspace_id>.json: блокировки, которые ВЫ держите в этом workspace
  • .uversion/changelists_<workspace_id>.json: ваши changelist, то есть пакеты зарезервированных файлов, которые вы группируете, чтобы отправить их отдельно. Чисто локально, никогда не передаётся серверу.
  • .uversion/pending_deletes_<workspace_id>.json: удаления, ожидающие отправки
  • .uversion/snapshots.json: известное состояние файлов, служит для выявления того, что вы изменили локально
Не помещайте .uversion/ под версионный контроль Эта папка описывает ВАШУ копию: она содержит вашу идентичность владельца и ваши блокировки. Копирование workspace с одной машины на другую переносит эти сведения, и клиент тогда отказывается открывать его под другой учётной записью. Лучше клонируйте копию себе.

Вкладка Files

Дерево файлов с фишками статуса (Synced, Modified, Local only, Locked…) и строкой поиска.

Древовидный вид файлов workspace с их состоянием. Два способа сократить список:

  • Поле поиска с подписью Search files...: фильтрует по части пути, без учёта регистра.
  • Фишки статуса, прямо под ним. Это кликабельные счётчики, и фишка появляется, только если её счётчик больше нуля: на только что синхронизированном workspace вы поэтому увидите лишь {n} synced, и отсутствие остальных это нормально. Шесть возможных фишек: {n} synced, {n} modified, {n} local only, {n} server only, {n} locked и {n} deleted.

Поиск и фишки сочетаются: поиск сначала сужает, фишки затем фильтруют. Вид остаётся плавным даже на проектах в несколько десятков тысяч файлов.

Множественный выбор + действия

Панель действий существует, только если что-то выбрано. Пока выбор пуст, кнопок нет вовсе: это нормально, это не идущая загрузка. Выберите файлы (клик + shift, или флажки), и панель появится, с числом отобранных впереди ({n} file(s) selected). Кнопки показываются в зависимости от того, что позволяет выбор:

КнопкаЧто делает
HistoryОткрывает историю целевого файла или папки.
AddСтавит файл local only под отслеживание. Это первая из двух кнопок самой первой отправки: только что созданного файла нет на стороне сервера, поэтому резервировать нечего.
CheckoutЗахватывает блокировки. Идемпотентно: повторная резервация файла, уже зарезервированного вами, ничего не делает.
CheckinОткрывает окно сообщения, затем отправляет. Это вторая кнопка первой отправки и кнопка всех последующих.
RevertВозвращает блокировку и восстанавливает версию сервера. Ваши локальные изменения теряются.
DeleteПомечает файлы как удалённые. Удаление уходит при следующем checkin.
DownloadПовторно скачивает выбранные файлы с сервера, полезно для восстановления повреждённого локально файла.
Во вкладке Files нет кнопки Sync Кнопка, которая приносит выбранные файлы, называется Download. А Sync, тот, что обновляет весь workspace, живёт в панели Workspace, справа вверху, рядом с Status.

Вкладка Pending

Вкладка Pending: разделы «Ваши блокировки» и «Блокировки других», с кнопками Request release и Force unlock.

Файлы, сейчас находящиеся в checked-out, locked вами ИЛИ другим пользователем. Два раздела:

  • Your locks: вы можете checkin, revert или release по отдельности
  • Other users' locks: вы видите, кто держит блокировку + кнопка Request release, которая создаёт карточку запроса на доске Production (значок request)

Админы также видят кнопку Force unlock на чужих блокировках, которая делает release блокировки без согласия держателя. Все force unlock фиксируются в аудите.

Вкладка History

Развёрнутый коммит со списком его файлов и кнопкой «Get all» коммита.

Постраничный список коммитов репозитория, с автором, датой, сообщением и изменёнными файлами. Клик по коммиту открывает подробности: полный список файлов коммита с их ревизиями.

Кнопка Get all на каждом коммите скачивает локальную копию всех файлов на этой ревизии (полезно для восстановления стабильного состояния).

Production

Зона Production (отдельный пункт в боковой панели) собирает отслеживание проекта, по репозиториям. Workspace же сосредоточен на файлах (Files, Pending, History).

My tasks

Задачи, назначенные вам, по всем проектам.

Список карточек, назначенных вам, сведённый по всем репозиториям, к которым у вас есть доступ.

Board

Канбан: столбцы To Do / In Progress / Review / Done, карточки с приоритетом, метками, назначенными, обложками.

Канбан-доска по репозиториям, столбцы настраиваются (по умолчанию To Do, In Progress, Review, Done). Каждая карточка несёт приоритет (low / normal / high / urgent), метки, назначенных, срок, комментарии, ссылки на ассеты или коммиты и изображение обложки.

Второй вид доски: типизированные карточки со значками BUG, BLOCKER, HELP и TO TEST, с их приоритетами, назначенными и счётчиками комментариев.
Запросы это карточки доски Запрос (например «Request release» на блокировке, которую держит кто-то другой, во вкладке Pending) это карточка доски со значком request.
Открытая карточка: описание, назначенные, срок, комментарии, ссылки ассет/коммит, обложка.

Dashboard

Верхняя часть Dashboard производства: полоса здоровья проекта, счётчики открытых блокеров и залежавшихся блокировок, зоны, где концентрируются проблемы, коммиты недели, вес проекта и последняя опубликованная сборка.

Кабина продюсера: полоса здоровья проекта (открытые блокеры, ожидающие отчёты playtest), зоны, где концентрируются проблемы, коммиты недели, вес проекта и последняя опубликованная сборка, где каждый блок ведёт на доску или на Games.

Календарная временная шкала Dashboard: показан месяц с вехой, еженедельно повторяющимся playtest, релизом и сроками карточек, и кнопка Add milestone справа вверху.

Ниже календарная временная шкала: вехи, playtest (разовые или повторяющиеся), релизы и сроки карточек. Повторяющийся playtest автоматически создаёт свою карточку доски при каждом появлении.

Watchlist

Наблюдения по пути.

Наблюдайте за путями (glob-шаблоны), чтобы получать уведомления о check-in, которые их затрагивают. Каждая запись указывает наблюдаемый путь и отслеживаемые события.

Games

Страница Games: опубликованные сборки playtest, с загрузкой в зависимости от платформы.

Зона Games перечисляет внутренние сборки playtest, опубликованные для проекта. Каждая сборка указывает свою версию, конфигурацию (DebugGame / Development / Shipping), платформу (Win64 / Mac / Linux), размер и примечания к выпуску, с кнопкой загрузки, подходящей платформе.

Это точка доступа playtester'ов: учётная запись с ролью playtester видит только эту страницу (ни Workspace, ни Production) и получает доступ лишь к сборкам открытых ей проектов.

Локальные Changelist

📷 Screenshot · client-changelists
Файлы в checked-out, распределённые по двум локальным changelist (например «default» и «review»).

Сгруппируйте ваши checked-out files в несколько независимых коммитов. Changelist локальны для вашего workspace (никогда не отправляются серверу). Полезно, чтобы:

  • Отделить критическое исправление от текущей работы
  • Готовить несколько отправок параллельно, ничего не смешивая
  • Держать changelist "default" для WIP и "review" для того, что уходит в checkin

Settings

Панель Settings: тема, интервал авто-синхронизации, параллельные загрузки, папка репозиториев по умолчанию.

Глобальные настройки клиента (сохраняются в %APPDATA%/uversion/uVersion/config/config.toml):

НастройкаОписание
Default Server addressПредзаполняет страницу входа. То же разбиение, что и при подключении: фиксированный префикс https://, машина, порт. Может оставаться пустым.
Default UsernameПредзаполняет страницу входа.
Default Repository PathПапка, предлагаемая по умолчанию при клонировании.
ThemeSystem / Light / Dark.
Show hidden filesПоказывает файлы, начинающиеся с ., во вкладке Files.
Auto-sync Interval (seconds)Числовое поле, а не список выбора, выраженное в секундах, а не в минутах. Минимум 0, и 0 отключает автоматическую синхронизацию.
Parallel UploadsЧисло одновременных загрузок на сервер, от 1 до 32.
Parallel DownloadsЧисло одновременных загрузок, от 1 до 32.
Avatar colourВаш цвет в интерфейсе (инициалы на карточках доски, блокировках, активности). В отличие от остальных, эта настройка сохраняется на стороне сервера: она следует за вами с машины на машину, и её видят ваши коллеги.

Панель Unreal

Панель действий Unreal: зелёный значок Plugin 1.0.5, иконка папки, затем Open Editor, Compile, Package, Publish Build, Sync, Status и меню-шестерёнка.

Когда клиент обнаруживает проект Unreal в workspace, справа вверху Workspace появляется отдельная панель действий. Она управляет движком прямо из клиента: открыть редактор, скомпилировать, упаковать, не проходя через IDE. Большинство действий касаются только проектов C++ (чисто Blueprint-проекту компилировать не нужно).

.uproject ищется только на трёх уровнях Обнаружение опирается на файл .uproject (файл, описывающий проект Unreal). Клиент ищет его в корне workspace и до трёх уровней папок ниже. Глубже он его не находит, и вся панель Unreal исчезает без малейшего сообщения: ни ошибки, ни предупреждения, просто отсутствующие кнопки. Если вы не видите ни одного действия Unreal на проекте, который явно им является, почти всегда дело в этом. Поднимите проект ближе к корню workspace.

Значок состояния плагина

В самом левом краю панели значок показывает, на каком этапе находится плагин Unreal для этого проекта. Он кликабелен:

ЗначокЧто означает
Plugin <version> (зелёный)Плагин установлен и актуален для вашей версии Unreal.
Plugin installed (зелёный)Плагин только что помещён в проект.
Update ready (оранжевый)Есть более новая версия. Клиент не устанавливает её сам: закройте Unreal, затем нажмите на значок.
Restart UE (оранжевый)Редактор Unreal открыт. Загруженный плагин нельзя заменить: закройте редактор и нажмите снова.
Set engine path (оранжевый)Путь к движку отсутствует. Клик открывает выбор пути напрямую.
Plugin n/a (оранжевый)Для этого сочетания версии Unreal и системы не опубликовано ни одного бинарника.

Путь к движку

Путь установки Unreal разрешается автоматически из EngineAssociation файла .uproject (реестр Windows, LauncherInstalled.dat или сборка из исходников). Этот путь требуется для всех действий ниже, и автоматическое разрешение особенно не срабатывает на движке, скомпилированном из исходников. Вот где задать его вручную.

1. Открыть меню вторичных действий

В панели нет ни поля ввода, ни кнопки Browse, ни кнопки Auto-detect, которую было бы видно. Единственная точка входа это кнопка в виде шестерёнки, в самом правом краю панели Unreal, сопровождаемая маленьким шевроном, чья подсказка гласит More actions. Ничто в её виде не говорит о движке, и именно поэтому её не находят.

Открытое меню More actions панели Unreal: Generate Project Files, Publish Editor Binaries, затем Force Sync красным с пометкой overwrites local, и Set Engine Path..., чей подзаголовок показывает текущий путь или Not configured.

2. Выбрать Set Engine Path...

Пункт Set Engine Path... последний в меню. Его подзаголовок показывает текущий путь, или Not configured, если его нет: это самый быстрый способ узнать, не отсюда ли проблема. Открывается выбор папки, и выбранный путь сохраняется в .uversion/config.toml workspace.

Симптом, когда его нет Кнопка Package становится серой, а её подсказка меняется на Set Engine Path first. Значок состояния плагина же переходит в оранжевый Set engine path, и клик по нему напрямую открывает тот же выбор.

Open Editor

Запускает редактор Unreal (UnrealEditor) на проекте workspace. Кнопка идемпотентна: редактор может показать своё окно спустя несколько десятков секунд (особенно на macOS / Linux), поэтому второй клик в это время не открывает второй экземпляр. Кнопка показывает «Opening…», пока редактор запускается. Для проекта C++, ни разу не скомпилированного локально, открытие редактора сначала запускает генерацию файлов проекта, затем компиляцию (см. Автоматические действия).

Compile

Workspace с зелёной полосой BUILD SUCCEEDED и встроенной консолью, показывающей вывод Unreal Build Tool.

Компилирует проект (Unreal Build Tool). Вывод показывается в реальном времени во встроенной консоли. Проект C++ должен быть скомпилирован, чтобы редактор мог его открыть и чтобы отразить изменения кода.

Sync и Status

Эти две кнопки живут в одной панели, а не во вкладке Files:

  • Sync: обновляет весь workspace с сервера. Его подсказка указывает число ожидающих файлов, когда они есть. Это настоящий «sync» клиента, который не следует путать с кнопкой Download вкладки Files, приносящей лишь выбранное.
  • Status: обновляет состояние на стороне сервера, включая блокировки других пользователей, и заново обновляет счётчик кнопки Sync.

Меню More actions

Более редкие действия собраны за кнопкой в виде шестерёнки, справа от панели (снимок выше):

  • Generate Project Files: заново создаёт файлы проекта IDE (Visual Studio, Rider). Полезно после добавления или удаления исходных файлов, или после клонирования.
  • Publish Editor Binaries: компилирует, затем публикует бинарники редактора, соответствующие последнему коммиту кода. Ваши коллеги получают их при sync вместо того, чтобы каждый перекомпилировал у себя. На Linux отсутствует.
  • Force Sync: заново скачивает, перезаписывая ваши локальные файлы. Помечено красным в меню, с пометкой overwrites local, и предваряется подтверждением. Оставьте для workspace, которые вы готовы потерять.
  • Set Engine Path...: настройка пути к движку, описанная выше.

Package

Кнопка называется Package; «Package Game» это лишь её подсказка, заменяемая на Set Engine Path first, когда путь к движку отсутствует, при этом кнопка тогда отключена. Она упаковывает игру через RunUAT BuildCookRun и архивирует результат в Packages/{config}/ в корне workspace. Три конфигурации на выбор:

КонфигурацияНазначение
DebugGameОтладочная сборка (полные символы, без оптимизации).
DevelopmentСборка разработки (по умолчанию): оптимизированная, но с инструментами разработки.
ShippingДистрибутивная сборка: оптимизированная, без инструментов разработки.

Папка Packages/ игнорируется по умолчанию (.uversionignore): упакованное не версионируется, оно распространяется через Publish Build.

Publish Build

Публикует упакованную сборку как внутреннюю версию playtest. Она становится доступной для скачивания вашей команде со страницы Games клиента (роль playtester или предоставленный доступ к сборке). Клиент сканирует Packages/{config}/, отправляет файлы (дедуплицированные на стороне сервера), затем регистрирует манифест.

Open project folder

Открывает папку workspace в файловом проводнике системы (Проводник Windows, Finder или xdg-open на Linux).

Stop

Аккуратно прерывает все идущие сборки: компиляцию и упаковку. Кнопка указывает, сколько сборок было остановлено (запущенная в фоне авто-компиляция может быть посчитана вместе).

Автоматические действия

Помимо кнопок, клиент сам запускает некоторые действия Unreal, чтобы проект C++ всегда оставался актуальным и компилируемым:

  • Перед check-in: если файлы кода изменились, проект сначала компилируется. Если компиляция не удаётся, check-in блокируется (код, который не компилируется, не отправляют).
  • После sync: если sync скачал код, клиент заново создаёт файлы проекта, затем перекомпилирует.
  • При первом запуске после клонирования (проект C++): генерация файлов проекта, затем компиляция, прежде чем можно будет открыть редактор.

Эти автоматические сборки сериализуются на блокировке движка (Unreal Build Tool -WaitMutex): они не отказывают друг другу, а выстраиваются в очередь. Кнопка Stop прерывает и их.