版本控制系统如何快速生成历史悠久的原始文件?
Posted
技术标签:
【中文标题】版本控制系统如何快速生成历史悠久的原始文件?【英文标题】:How do version control systems generate original file with a long history so fast? 【发布时间】:2020-01-20 15:16:05 【问题描述】:我正在用 java 开发一个简单的文本文件版本控制系统。当使用 commit 命令时,我计算最新版本和最后提交的版本之间的差异并存储它。我已经编写了代码来制作差异文件并重新生成原始文件。问题在这里,我觉得对于非常大的提交历史,我将不得不重新创建最后提交的版本,然后使用 diff。当我签出文件的先前版本时也会出现这种情况。所以使用我的算法我将不得不使用我的第一个提交(它具有所有原始数据而不是差异),然后继续为下一个差异应用重新生成算法。这需要很长时间。我期待着让它更快更高效。你能告诉我该怎么做吗?
也不是所有的 diff 都按照指定的顺序计算。也就是说,如果我有两个文件,file1
和 file2
,我会这样计算 diff:diff(file1, file2);
和 diff(file2, file1);
。而且我只保留较小的文件。另一个文件,我删除它。我想知道这是否是一个好方法?
我只需要一些方法来解决这个问题。不是源代码。
【问题讨论】:
【参考方案1】:假设您有一个巨大的文件,有 10000 行,并且您对该文件有很多提交。
如果您想要返回/转发多个提交,则不应将每个提交都应用到大文件。相反,从第一次提交开始,使用行号创建一个差异文件。因为当第一次提交添加第 X 行时,第二次提交可能会删除第 X 行。这样您就不必处理文件两次。如果您只保留带有行号的差异文件,则在最后一次提交时您可以开始应用差异。
您可以在此基础上进行各种优化,但根据您的解释,最重要的是不重新创建文件。
【讨论】:
好的,所以我创建了这些差异文件的差异文件。是的,我认为这会奏效。谢谢。以上是关于版本控制系统如何快速生成历史悠久的原始文件?的主要内容,如果未能解决你的问题,请参考以下文章