Действительно ли нужна новая система контроля версий? Да, считает Epic Games, и сразу же её предоставляет: игровая студия опубликовала на GitHub(открывается в новом окне) свою собственную разработку Lore. Она должна быть прежде всего более современной, чем устоявшиеся системы, такие как Git, и лучше соответствовать требованиям, например, разработчиков игр. Они часто работают с большими бинарными файлами для моделей и текстур.
Однако именно они являются слабым местом, например, Git, для чего существует отдельное решение(открывается в новом окне). Lore предоставляет соответствующую поддержку сразу и должна быть лучше, особенно в дедупликации, то есть в предотвращении дублирования хранящихся файлов. Система здесь полагается не на эвристики, а присваивает индивидуальные идентификаторы файлов. Кроме того, Lore изначально рассматривает все файлы как чистые бинарные файлы. Текстоориентированные функции, такие как выделение изменений, реализованы поверх этого.
Управление версиями и хранилище при этом являются двумя отдельными подсистемами, благодаря чему Lore особенно хорошо подходит для использования в распределённых системах. Система хранения может также использоваться независимо от версионирования, например, для доставки бинарных файлов. Уровень хранения и транспорта не заданы жёстко, а реализуются через бэкенды.
Более современный Git
Также в Lore так называемые разрежённые проверки (sparse checkouts), при которых большие файлы загружаются только по мере необходимости, должны быть более гибкими, чем в Git. Кроме того, в дизайне учтены некоторые новые разработки.
При чтении проектного документа(открывается в новом окне) создаётся впечатление, что система контроля версий Epic — это более современный Git: Lore также является контентно-адресуемой (content addressed), для чего используются хеши версионированных файлов. Историю версий обе системы отображают через дерево Меркла(открывается в новом окне). В качестве хеш-функции Lore использует Blake3(открывается в новом окне), что считается очень надёжным и хорошо поддаётся распараллеливанию.
Lore написан на Rust, связь с сервером осуществляется исключительно через API (интерфейс прикладного программирования). Это должно гарантировать, что все функции доступны независимо от используемого для доступа инструмента. Утилита командной строки, например, просто преобразует текстовые команды в соответствующие вызовы API. Привязки API существуют для C#, Go, Javascript и Python. Код опубликован под лицензией MIT, но в настоящее время ещё находится в разработке, поэтому интерфейсы и форматы хранения могут измениться.