Epic Games har open sourcet sit centraliserede versionskontrolsystem, Lore, som tidligere var inkluderet i Unreal Editor for Fortnite (UEFN) toolkit under navnet Unreal Revision Control. Systemet er optimeret til brug i udvikling af projekter, der kombinerer kildekode med meget store ikke-tekstfiler. For eksempel er Lore velegnet til computerspiludvikling, hvilket kræver samarbejde om aktiver såsom teksturer, 3D-modeller og lyddata. Da det er problematisk at flette forskellige versioner af ikke-tekstfiler, organiseres samarbejdet ved at indstille en eksklusiv lås, der forhindrer flere bidragydere i at redigere ressourcen samtidigt. Projektets kode er skrevet i Rust og distribueres under MIT-licensen.
Systemet er skalerbart til teams af varierende størrelser og kan køres på en udviklers computer ved at køre en enkelt eksekverbar fil uden eksterne afhængigheder eller implementeres som en centraliseret server til at koordinere arbejdet i meget store teams.
Lore består af to systemer: et datalagringsundersystem og et versionskontrolundersystem, der er ansvarligt for at oprette revisioner, forgreninger og flette operationer.
Lagringsundersystemet består af to lagringsmotorer: et uforanderligt indholdslager med hash-adressering og et nøgle-/værdilager til dynamiske metadata, såsom branchpointers. Forskellige backends kan tilsluttes for at gemme data på en centraliseret server og sikre fejltolerance. For eksempel kan AWS S3 bruges til persistent lagring og DynamoDB til metadata.
For at repræsentere arkivets tilstand og sikre revisionskædens uforanderlighed anvendes en Merkle-træstruktur, hvor hver gren verificerer alle underliggende grene og noder ved hjælp af trælignende hashing. Arkivets data adresseres af indholdshashes, hvilket forenkler sammenligninger og integritetskontrol. Hashen for hver revision omfatter dens tilhørende tilstand, hashes for dens overordnede revisioner og datahashes. Store filer gemmes i fragmenter.
Der tilbydes funktioner, der er typiske for versionskontrolsystemer, såsom commits, staging drafts, branching og ændringsevaluering. Avanceret funktionalitet omfatter: brugeradgangskontrol; konfliktløsning; deduplikering på fragmentniveau; muligheden for at arbejde med en ufuldstændig kopi af arbejdstræet (manglende data indlæses efter behov); caching af lagrede data; lette forgreningsoperationer og hurtig skift mellem grene (grene implementeres via links, hvilket ikke fører til dataduplikering).
Kilde: opennet.ru
