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(нужны права администратора). CLIuversion.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-портал или страница ошибки были бы сохранены и сделаны исполняемыми, чтобы затем непонятным образом отказать), затем ставит его на место одним движением, что остаётся безопасным, даже если копия уже запущена; - он запускает приложение. Именно этот запуск создаёт запись в меню приложений, поэтому лучше дать ему это сделать. В удалённом сеансе без графического интерфейса он вместо этого показывает точную команду, которую нужно ввести с вашего рабочего стола.
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.
2. Проверьте отпечаток сервера, один раз
Поскольку сервер uVersion по умолчанию самоподписанный, самое первое подключение к данной машине показывает Verify server identity: сравните отпечаток SHA-256 с тем, что дал вам администратор, затем нажмите Trust this server. Вопрос задаётся лишь один раз на сервер, и если он возвращается под красным заголовком Server identity changed, отпечаток изменился: не принимайте, не проверив. См. Отпечаток TLS.
После подключения клиент безопасно запоминает вашу сессию. CLI uversion
и плагины редакторов (Unreal, Rider) автоматически переиспользуют те же учётные данные: вы
больше нигде не вводите пароль заново.
Открыть или клонировать репозиторий
Подключение не открывает никакого проекта: список репозиториев запрашивается явно. Это одно и то же окно служит и для первого клонирования проекта, и для повторного открытия workspace, уже имеющегося на диске.
1. Открыть окно Open Repository
Пока не открыта ни одна вкладка, Workspace показывает No repository selected и кнопку Open Repository. Как только у вас есть хотя бы одна вкладка, тот же экран открывается через + в панели вкладок. Окно перечисляет, по одной карточке на проект, репозитории, к которым у вас есть доступ, с кнопкой Refresh, чтобы заново запросить список у сервера.
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 хранит свои метаданные в
.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
Древовидный вид файлов 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 | Повторно скачивает выбранные файлы с сервера, полезно для восстановления повреждённого локально файла. |
Download. А
Sync, тот, что обновляет весь workspace, живёт в панели Workspace, справа вверху,
рядом с Status.
Вкладка Pending
Файлы, сейчас находящиеся в checked-out, locked вами ИЛИ другим пользователем. Два раздела:
- Your locks: вы можете checkin, revert или release по отдельности
- Other users' locks: вы видите, кто держит блокировку + кнопка Request release, которая создаёт карточку запроса на доске Production (значок
request)
Админы также видят кнопку Force unlock на чужих блокировках, которая делает release блокировки без согласия держателя. Все force unlock фиксируются в аудите.
Вкладка History
Постраничный список коммитов репозитория, с автором, датой, сообщением и изменёнными файлами. Клик по коммиту открывает подробности: полный список файлов коммита с их ревизиями.
Кнопка Get all на каждом коммите скачивает локальную копию всех файлов на этой ревизии (полезно для восстановления стабильного состояния).
Production
Зона Production (отдельный пункт в боковой панели) собирает отслеживание проекта, по репозиториям. Workspace же сосредоточен на файлах (Files, Pending, History).
My tasks
Список карточек, назначенных вам, сведённый по всем репозиториям, к которым у вас есть доступ.
Board
Канбан-доска по репозиториям, столбцы настраиваются (по умолчанию To Do, In Progress, Review, Done). Каждая карточка
несёт приоритет (low / normal / high / urgent), метки, назначенных,
срок, комментарии, ссылки на ассеты или коммиты и изображение обложки.
request.
Dashboard
Кабина продюсера: полоса здоровья проекта (открытые блокеры, ожидающие отчёты playtest), зоны, где концентрируются проблемы, коммиты недели, вес проекта и последняя опубликованная сборка, где каждый блок ведёт на доску или на Games.
Ниже календарная временная шкала: вехи, playtest (разовые или повторяющиеся), релизы и сроки карточек. Повторяющийся playtest автоматически создаёт свою карточку доски при каждом появлении.
Watchlist
Наблюдайте за путями (glob-шаблоны), чтобы получать уведомления о check-in, которые их затрагивают. Каждая запись указывает наблюдаемый путь и отслеживаемые события.
Games
Зона Games перечисляет внутренние сборки playtest, опубликованные для проекта. Каждая сборка указывает свою версию, конфигурацию (DebugGame / Development / Shipping), платформу (Win64 / Mac / Linux), размер и примечания к выпуску, с кнопкой загрузки, подходящей платформе.
Это точка доступа playtester'ов: учётная запись с ролью playtester видит
только эту страницу (ни Workspace, ни Production) и получает доступ лишь к сборкам открытых ей проектов.
Локальные Changelist
Сгруппируйте ваши checked-out files в несколько независимых коммитов. Changelist локальны для вашего workspace (никогда не отправляются серверу). Полезно, чтобы:
- Отделить критическое исправление от текущей работы
- Готовить несколько отправок параллельно, ничего не смешивая
- Держать changelist "default" для WIP и "review" для того, что уходит в checkin
Settings
Глобальные настройки клиента (сохраняются в %APPDATA%/uversion/uVersion/config/config.toml):
| Настройка | Описание |
|---|---|
Default Server address | Предзаполняет страницу входа. То же разбиение, что и при подключении: фиксированный префикс https://, машина, порт. Может оставаться пустым. |
Default Username | Предзаполняет страницу входа. |
Default Repository Path | Папка, предлагаемая по умолчанию при клонировании. |
Theme | System / Light / Dark. |
Show hidden files | Показывает файлы, начинающиеся с ., во вкладке Files. |
Auto-sync Interval (seconds) | Числовое поле, а не список выбора, выраженное в секундах, а не в минутах. Минимум 0, и 0 отключает автоматическую синхронизацию. |
Parallel Uploads | Число одновременных загрузок на сервер, от 1 до 32. |
Parallel Downloads | Число одновременных загрузок, от 1 до 32. |
Avatar colour | Ваш цвет в интерфейсе (инициалы на карточках доски, блокировках, активности). В отличие от остальных, эта настройка сохраняется на стороне сервера: она следует за вами с машины на машину, и её видят ваши коллеги. |
Панель Unreal
Когда клиент обнаруживает проект 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. Ничто в её виде не говорит о движке, и именно поэтому её не находят.
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
Компилирует проект (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 прерывает и их.