版本控制系统如何快速生成历史悠久的原始文件?

How do version control systems generate original file with a long history so fast?

我正在 java 中开发一个简单的文本文件版本控制系统。当使用 commit 命令时,我计算最新版本和最后提交的版本之间的差异并存储它。我已经编写了制作差异文件和重新生成原始文件的代码。我觉得这里的问题是,对于非常大的提交历史,我将不得不重新创建最后提交的版本,然后使用 diff。当我签出该文件的先前版本时也会出现这种情况。所以使用我的算法我将不得不使用我的第一次提交(它有所有原始数据而不是差异)然后继续为下一个差异应用再生算法。这会花很长时间。我期待着使它更快、更高效。你能告诉我该怎么做吗?

也不是所有的差异都按照相同的顺序计算 specified.That 如果我有两个文件,file1file2,我计算差异是这样的:diff(file1, file2);diff(file2, file1);。我只保留较小的文件。另一个文件,我删除它。我想知道这是不是一个好方法?

我只需要一些方法来解决这个问题。不是源代码。

假设您有一个巨大的文件,有 10000 行,并且您对该文件进行了多次提交。

如果您想 back/forward 多次提交,您不应该将每次提交都应用到大文件。相反,从第一次提交开始,创建一个包含行号的差异文件。因为当第一次提交添加 X 行时,第二次提交可能删除 X 行。这样你就不必处理文件两次。如果您只保留带有行号的差异文件,则在最后一次提交时您可以开始应用差异。

您可以在此基础上进行各种优化,但根据您的解释,最重要的是不重新创建文件。