【发布时间】:2022-01-29 09:37:51
【问题描述】:
您将如何为单个文件实现版本控制系统?
这个系统的重点是突出同一文件的两个版本之间的变化(几乎是 git 所做的)。
通常最好存储文件的第一个版本,而不是存储整个文档,并且每次“推送”都只会存储每个修改。但是,我们如何才能有效地发现插入、修改、删除甚至两者的混合?
【问题讨论】:
标签: version-control architecture
您将如何为单个文件实现版本控制系统?
这个系统的重点是突出同一文件的两个版本之间的变化(几乎是 git 所做的)。
通常最好存储文件的第一个版本,而不是存储整个文档,并且每次“推送”都只会存储每个修改。但是,我们如何才能有效地发现插入、修改、删除甚至两者的混合?
【问题讨论】:
标签: version-control architecture
有处理单个文件的版本控制系统。可以使用许多现代版本控制系统,例如 Git,并简单地存储一个文件,但一种适用于独立文件的工具是 RCS。
大多数版本控制系统要么采用一系列快照方法,如 Git,要么采用变更集方法,如 Arch 和 RCS。值得注意的是,RCS 使用 reverse deltas;也就是说,仅完整存储文件的最新版本,并且每个较旧的版本都存储为对其后续版本的更改。
在任何一种情况下,检测更改的方法都是diff algorithm。有标准的迈尔斯方法,加上耐心和直方图算法等修改。它们都基于找到最长的公共子序列(可能进行一些修改),然后将不常见的部分表示为插入、删除,或者在某些情况下是修改。
差异中“修改”的概念很难量化,因为我们是否将单行更改视为逻辑上的插入和删除另一行或修改行取决于人类是否读线认为它构成了实质性的变化。因为对软件来说很难衡量人类的意见,所以一些差异生成方法,如统一差异,总是会产生添加和删除,而其他的,如上下文差异,总是认为这是一种修改。
【讨论】: