Epic Games a rendu open source son système de contrôle de version centralisé, Lore, auparavant intégré à l'éditeur Unreal pour Fortnite (UEFN) sous le nom d'Unreal Revision Control. Ce système est optimisé pour le développement de projets combinant code source et fichiers non textuels volumineux. Par exemple, Lore est adapté au développement de jeux vidéo, qui nécessite une collaboration étroite sur des ressources telles que les textures, les modèles 3D et les données sonores. La fusion de différentes versions de fichiers non textuels étant complexe, la collaboration est organisée par la mise en place d'un verrouillage exclusif, empêchant ainsi plusieurs contributeurs de modifier simultanément la ressource. Le code du projet est écrit en Rust et distribué sous licence MIT.
Le système est évolutif pour s'adapter aux équipes de tailles variées et peut être exécuté sur l'ordinateur d'un développeur en lançant un seul fichier exécutable sans dépendances externes, ou déployé en tant que serveur centralisé pour coordonner le travail de très grandes équipes.
Lore se compose de deux systèmes : un sous-système de stockage de données et un sous-système de contrôle de version chargé de créer des révisions, des branches et d’effectuer des opérations de fusion.
Le sous-système de stockage comprend deux moteurs de stockage : un système de stockage de contenu immuable avec adressage par hachage et un système de stockage clé/valeur pour les métadonnées dynamiques, telles que les pointeurs de branchement. Différents services de stockage peuvent être connectés pour stocker les données sur un serveur centralisé et garantir la tolérance aux pannes. Par exemple, AWS S3 peut être utilisé pour le stockage persistant et DynamoDB pour les métadonnées.
Pour représenter l'état du dépôt et garantir l'immuabilité de la chaîne de révisions, une structure d'arbre de Merkle est utilisée. Chaque branche vérifie toutes les branches et tous les nœuds sous-jacents à l'aide d'un hachage arborescent. Les données du dépôt sont accessibles par hachage de contenu, ce qui simplifie les comparaisons et les contrôles d'intégrité. Le hachage de chaque révision englobe son état associé, les hachages de ses révisions parentes et les hachages des données. Les fichiers volumineux sont stockés par fragments.
Ce système offre les fonctionnalités classiques des systèmes de contrôle de version, telles que les commits, la préparation des brouillons, la création de branches et l'évaluation des modifications. Parmi les fonctionnalités avancées, on trouve : le contrôle d'accès utilisateur ; la résolution des conflits ; la déduplication au niveau des fragments ; la possibilité de travailler avec une copie incomplète de l'arbre de travail (les données manquantes sont chargées au besoin) ; la mise en cache des données stockées ; des opérations de branchement légères et une commutation rapide entre les branches (les branches sont implémentées par des liens, ce qui évite la duplication des données).
Source: opennet.ru
