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

Wiki

Распространение

Копирование файлов (плагины, общий контент) из исходного репозитория в целевой по шаблонам путей. Публикация, переотображение, пропуск блокировок.

Введение

Распространение копирует файлы (плагин, пакет общего контента) из исходного репозитория в целевой, ограничиваясь шаблонами путей. Оно создаёт новые ревизии в целевом репозитории, поэтому обычная инкрементная синхронизация распространяет контент клиентам. Это способ поделиться одним и тем же плагином между несколькими проектами без ручного копирования.

Доступ и роли

Модель доступа, отличная от других вкладок Распространение не защищено так же, как другие вкладки. Оно требует возможности manage_rules, которой обладают admin и lead в масштабе всего сервера. project_admin, не обладающий никакой возможностью, доступа не имеет. А lead может связать любой репозиторий с любым другим.

Создание связи

1. Открыть вкладку Distribution

Вкладка Distribution находится в ряду SERVER: связь соединяет два репозитория, поэтому она не зависит от репозитория, выбранного в ряду PROJECT. Нажмите + New Link вверху справа: откроется окно New Distribution Link.

2. Выбрать источник, цель и пути

Source Repository — это репозиторий, из которого берутся файлы, Target Repository — репозиторий назначения: выбранный источник исчезает из списка целей, связь не может замкнуться на себя. Path Patterns принимает один шаблон на строку (например Plugins/MyPlugin/, Content/SharedAssets/), и требуется хотя бы один: без шаблона ничего не было бы скопировано.

Окно New Distribution Link: меню Source Repository и Target Repository, область Path Patterns (one per line), заполненная двумя шаблонами, и кнопки Cancel и Create Link.

3. Подтвердить с помощью Create Link

Связь сразу появляется в списке. Связь, уже существующая между теми же двумя репозиториями, отклоняется (конфликт): отредактируйте существующую, а не создавайте вторую.

Шаблоны путей

Шаблон соответствует пути, если он встречается где-либо внутри него (поиск по типу «содержит»). Поэтому шаблон Plugins/uVersion соответствует DefaultProject/Plugins/uVersion/Source/Foo.cpp независимо от префикса проекта. Завершающий слеш ничего не меняет.

Публикация

1. Найти связь и её действия

Каждая связь занимает одну строку списка: source → cible, её шаблоны в виде пилюль, кто её создал и дату последней публикации. Действия сгруппированы справа в строке: Show pending files (значок файла), Publish history (часы), Publish, переключатель, который включает или отключает связь, и удаление.

2. Проверить, что будет отправлено

Show pending files разворачивает под строкой список отличающихся файлов с их исходной ревизией и итогом в заголовке (Pending Files (N)). Каждый несёт своё состояние: new, modified или locked. Если всё актуально, панель об этом сообщает.

Панель Pending Files, развёрнутая под строкой связи: пути, помеченные как new, modified или locked, с их исходной ревизией, и над списком зелёный баннер, оставленный последней публикацией.

3. Опубликовать

Кнопка Publish выполняет копирование. Зелёный баннер подытоживает: «Published: X source files found, Y updated, Z skipped (locked), W unchanged». Кнопка отключена, пока связь неактивна, и публикация неактивной связи возвращает явную ошибку.

Заблокированный в целевом репозитории файл пропускается, а не перезаписывается. Файл с идентичным содержимым (тот же хеш) считается неизменным и пропускается. Публикация атомарна (одна транзакция).

Publish history (часы) затем даёт последние 50 публикаций: сколько файлов обновлено и пропущено, кем и когда.

Переотображение и ревизии

Путь переписывается под цель: uVersion убирает всё, что предшествует совпавшему шаблону, затем добавляет префикс, обнаруженный в целевом репозитории. Пример: источник DefaultProject/Plugins/uVersion/foo.cpp, шаблон Plugins/uVersion, целевой префикс CineDroneStudio/CineDroneStudio/Plugins/uVersion/foo.cpp. Целевой префикс выводится из существующего файла в целевом репозитории (обработка репозиториев с подпапкой проекта или без неё).

Нумерация ревизий Распространяемые ревизии используют глобальный счётчик выше текущей ревизии цели, чтобы инкрементная синхронизация их подхватила. Поэтому история по файлу может «прыгать» (напр. rev 1, затем rev 200): это косметика. Чанки общие (без дублирования данных, лишь увеличение счётчика ссылок).

Частые ловушки

«Publish» неактивна (серая)

Связь неактивна. Сначала включите её. Публикация неактивной связи возвращает явную ошибку.

Файл не обновляется в целевом репозитории

Либо он заблокирован на стороне цели (тогда он пропускается и учитывается как «locked»), либо его содержимое уже идентично (учитывается как «unchanged»). Посмотрите сводку публикации и список pending files.

project_admin не видит вкладку

Это сделано намеренно: распространение требует manage_rules (admin или lead). project_admin не имеет доступа, даже к своим собственным репозиториям.