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/), и требуется хотя бы один: без шаблона ничего не
было бы скопировано.
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. Если всё актуально, панель об этом сообщает.
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. Целевой префикс выводится из
существующего файла в целевом репозитории (обработка репозиториев с подпапкой проекта или без неё).
Частые ловушки
«Publish» неактивна (серая)
Связь неактивна. Сначала включите её. Публикация неактивной связи возвращает явную ошибку.
Файл не обновляется в целевом репозитории
Либо он заблокирован на стороне цели (тогда он пропускается и учитывается как «locked»), либо его содержимое уже идентично (учитывается как «unchanged»). Посмотрите сводку публикации и список pending files.
project_admin не видит вкладку
Это сделано намеренно: распространение требует manage_rules (admin или lead). project_admin не имеет
доступа, даже к своим собственным репозиториям.