源控制系统的算法?

Mic*_*tum 13 .net c# algorithm version-control

我需要编写一个简单的源代码控制系统,并想知道我将用于文件差异的算法是什么?

由于许可证问题,我不想查看现有的源代码.我需要在MPL下获得许可,因此我无法查看任何现有系统,如CVS或Mercurial,因为它们都是GPL许可的.

为了给出一些背景知识,我只需要一些非常简单的函数 - 文件夹中的二进制文件.没有子文件夹,每个文件的行为都像它自己的存储库.没有元数据,除了一些权限.

总的来说非常简单,我唯一担心的是如何只存储文件从修订版到修订版的差异,而不会浪费太多空间但也没有太低效(也许存储每个X更改的完整版本,有点像视频中的关键帧?)

Gre*_*ill 6

Patience Diff是一种很好的算法,用于查找两个可能对人有意义的文件之间的增量.这通常比天真的"最长公共子序列"算法提供更好的结果,但结果是主观的.

话虽如此,许多现代版本控制系统在每个阶段存储完整的文件,并在以后仅在需要时计算实际差异.对于二进制文件(可能不是非常可压缩的),您可能会发现存储反向增量可能最终会更有效.


Jas*_*rue 5

最长公共子序列算法是类似diff的工具使用的主要机制,可以由源代码控制系统利用.

"Reverse Deltas"是一种常见的存储方法,因为您主要需要从最新版本开始向后移动.


Mah*_*aga 5

如何查看Subversion的源代码?它在Apache License 2.0下获得许可