Spoločnosť Epic Games sprístupnila svoj centralizovaný systém správy verzií Lore, ktorý bol predtým súčasťou sady nástrojov Unreal Editor for Fortnite (UEFN) pod názvom Unreal Revision Control. Systém je optimalizovaný na použitie pri vývoji projektov, ktoré kombinujú zdrojový kód s veľmi veľkými netextovými súbormi. Lore je napríklad vhodný na vývoj počítačových hier, ktorý vyžaduje spoluprácu na materiáloch, ako sú textúry, 3D modely a zvukové dáta. Keďže zlučovanie rôznych verzií netextových súborov je problematické, spolupráca je organizovaná nastavením exkluzívneho zámku, ktorý bráni viacerým prispievateľom v súčasnej úprave zdroja. Kód projektu je napísaný v jazyku Rust a je distribuovaný pod licenciou MIT.
Systém je škálovateľný pre tímy rôznych veľkostí a možno ho spustiť na počítači vývojára spustením jedného spustiteľného súboru bez externých závislostí alebo ho nasadiť ako centralizovaný server na koordináciu práce veľmi veľkých tímov.
Lore sa skladá z dvoch systémov: subsystému ukladania dát a subsystému riadenia verzií, ktorý je zodpovedný za vytváranie revízií, vetiev a zlučovacích operácií.
Úložný subsystém pozostáva z dvoch úložných systémov: úložiska nemenného obsahu s hašovacím adresovaním a úložiska kľúč/hodnota pre dynamické metadáta, ako sú napríklad ukazovatele vetiev. Na ukladanie údajov na centralizovanom serveri a zabezpečenie odolnosti voči chybám je možné pripojiť rôzne backendy. Napríklad AWS S3 je možné použiť na trvalé úložisko a DynamoDB na metadáta.
Na reprezentáciu stavu repozitára a zabezpečenie nemennosti revízneho reťazca sa používa štruktúra Merkle Tree, v ktorej každá vetva overuje všetky podkladové vetvy a uzly pomocou stromového hashovania. Dáta repozitára sú adresované pomocou hashov obsahu, čo zjednodušuje porovnávanie a kontrolu integrity. Hash každej revízie zahŕňa jej priradený stav, hashy jej nadradených revízií a hashy dát. Veľké súbory sú uložené vo fragmentoch.
Poskytujú sa funkcie typické pre systémy správy verzií, ako sú commity, pripravované koncepty, vetvenie a vyhodnocovanie zmien. Medzi pokročilé funkcie patrí: riadenie prístupu používateľov; riešenie konfliktov; deduplikácia na úrovni fragmentov; schopnosť pracovať s neúplnou kópiou pracovného stromu (chýbajúce údaje sa načítavajú podľa potreby); ukladanie uložených údajov do vyrovnávacej pamäte; ľahké operácie vetvenia a rýchle prepínanie medzi vetvami (vetvy sú implementované prostredníctvom odkazov, čo nevedie k duplikácii údajov).
Zdroj: opennet.ru
