构建高效版本控制,无需重复存储文件

为每个版本或分叉(fork)存储文件的完整副本会浪费空间。如果你在一个包含十个文件的项目中只修改了一行,你不应该再次保存所有十个文件。

在构建我的 LaTeX Writer 项目时,我遇到了这个问题。我需要一种既能处理版本控制和项目分叉,又不会产生高昂存储成本的方法。

我研究了 GitHub 的工作原理。GitHub 并不会在你每次做出更改时都存储整个仓库。它将内容分开存储,并使用引用来链接文件和提交(commits)。

我使用三个主要组件构建了我的系统:

该系统通过内容哈希(content hashing)工作。当你保存一个文件时,系统会根据内容生成一个唯一的 ID。如果内容已经存在,系统会重用现有的 Blob,而不会创建新的。

这种方法让分叉(forking)变得既简单又廉价。当你分叉一个项目时:

在分叉过程中,没有任何实际的文件内容被复制。你只需要复制少量的元数据记录。

当你编辑一个分叉时,过程依然保持高效:

这种方法具有以下几个优点:

你可以获得类似 GitHub 的功能,而不会带来沉重的存储开销。

来源:https://dev.to/prashant_patil_49/building-github-inspired-version-control-and-forking-without-duplicating-project-files-5aap