Компания Epic Games открыла код централизованной системы управления версиями Lore, которая ранее поставлялась в составе инструментария UEFN (Unreal Editor for Fortnite) под именем Unreal Revision Control. Система оптимизирована для использования при разработке проектов, сочетающих исходный код с очень большими нетекстовыми файлами. Например, Lore подходит для разработки компьютерных игр, при создании которых приходится совместно работать над такими ресурсами, как текстуры, 3D-модели и звуковые данные. Так как организация слияния разных версий нетекстовых файлов проблематична, совместная работа над ними организована на уровне выставления эксклюзивной блокировки, не позволяющей одновременно редактировать ресурс нескольким участникам. Код проекта написан на языке Rust и распространяется под лицензией MIT.
Система масштабируется для команд разного размера и может быть запущена как на компьютере разработчика через запуск одного исполняемого файла без внешних зависимостей, так и развёрнута в форме централизованного сервера для координации работы очень больших команд.
Lore состоит из двух систем — подсистема хранения данных и подсистема управления версиями, отвечающая за создание ревизий, веток и операции слияния.
Подсистема хранения формируется из двух хранилищ — постоянное (immutable) хранилище контента с адресацией по хэшам и хранилище в формате ключ/значение для меняющихся метаданных, таких как указатели на ветки. Для хранения данных на централизованном сервере и обеспечения отказоустойчивости могут подключаться различные бэкенды, например, для постоянного хранения можно использовать AWS S3, а для метаданных DynamoDB.
Для отражения состояния репозитория и гарантирования неизменности цепочки ревизий задействована структура «дерево Меркла» (Merkle Tree), в которой каждая ветка верифицирует все нижележащие ветки и узлы благодаря древовидному хешированию. Данные в репозитории адресуются по хэшам содержимого, что упрощает операции сравнения и контроль целостности. Хэш каждой ревизии охватывает связанное с ней состояние, хэши родительских ревизий и хэши данных. Большие файлы хранятся разделёнными на фрагменты.
Предоставляются типичные для систем управления версиями возможности, такие как коммиты, staging-черновики, создание веток и оценка изменений. Среди расширенной функциональности: разграничение доступа участников; разрешение конфликтов; дедупликация на уровне фрагментов; возможность работы с неполной копией рабочего дерева (недостающие данные подгружаются по мере появления необходимости в них); кэширование хранимых данных; легковесные операции создания веток и быстрое переключение между ветками (ветки реализованы через ссылки, которые не приводят к дублированию данных).
מקור: opennet.ru
