Epic Games 已将其集中式版本控制系统 Lore 开源。该系统之前以 Unreal Revision Control 的名称包含在 Unreal Editor for Fortnite (UEFN) 工具包中。Lore 针对开发包含源代码和大型非文本文件的项目进行了优化。例如,Lore 适用于需要协作处理纹理、3D 模型和声音数据等资源的电脑游戏开发。由于合并不同版本的非文本文件存在诸多问题,Lore 通过设置独占锁来组织协作,防止多个贡献者同时编辑资源。该项目的代码使用 Rust 编写,并以 MIT 许可证发布。
该系统可扩展,适用于不同规模的团队,既可以在开发人员的计算机上运行单个可执行文件而无需外部依赖项,也可以部署为集中式服务器来协调大型团队的工作。
Lore 由两个系统组成:数据存储子系统和版本控制子系统,负责创建修订、分支和合并操作。
存储子系统由两个存储引擎组成:一个采用哈希寻址的不可变内容存储和一个用于动态元数据(例如分支指针)的键值存储。可以连接各种后端,将数据存储在集中式服务器上,从而确保容错能力。例如,可以使用 AWS S3 进行持久化存储,使用 DynamoDB 存储元数据。
为了表示存储库的状态并确保版本链的不可变性,我们使用了默克尔树结构。在该结构中,每个分支都使用树状哈希来验证所有底层分支和节点。存储库数据通过内容哈希进行寻址,从而简化了比较和完整性检查。每个版本的哈希值都包含其关联的状态、其父版本的哈希值以及数据哈希值。大型文件以片段的形式存储。
版本控制系统的典型功能包括提交、暂存草稿、分支和变更评估。高级功能包括:用户访问控制;冲突解决;片段级去重;能够处理工作树的不完整副本(根据需要加载缺失数据);存储数据的缓存;轻量级分支操作和分支间的快速切换(分支通过链接实现,不会导致数据重复)。
来源: opennet.ru
