版本控制与纯备份有何不同?
我们先不考虑其它功能,重点关注版本控制的本质。备份必须达到哪个明确的标准才能被称为VCS? 或者,本质上它们是相同的东西,只是面向不同的市场?
如果存在根本性的区别,那么使某物达到版本控制状态的最低要求是什么?
请注意回答时不要仅列出大多数版本控制系统具有或应具有的功能(如增量压缩、分布式/中央存储库和并发访问解决方案),除非它们实际上按照定义需要成为VCS。
版本控制与纯备份有何不同?
我们先不考虑其它功能,重点关注版本控制的本质。备份必须达到哪个明确的标准才能被称为VCS? 或者,本质上它们是相同的东西,只是面向不同的市场?
如果存在根本性的区别,那么使某物达到版本控制状态的最低要求是什么?
请注意回答时不要仅列出大多数版本控制系统具有或应具有的功能(如增量压缩、分布式/中央存储库和并发访问解决方案),除非它们实际上按照定义需要成为VCS。
版本控制的基本思想是管理同一组信息的多个版本。备份的思想是将信息的最新版本复制到安全位置 - 可以覆盖旧版本。
我看到备份和版本控制之间有几个根本性的区别:
然而,备份和版本控制系统之间最重要的区别在于,在版本控制系统中,变更具有含义。在备份中,由于某台计算机认为距离上次备份已经x小时,因此创建了一个新版本;而这个变更本身完全没有任何意义。在版本控制系统中,由于某个人决定该版本具有自己独特的含义,它有自己不同于所有其他版本的身份。因此,在备份中,所有版本都是相等的(更确切地说:它们同样没有意义),而在版本控制系统中,所有版本都是特殊的(它们具有自己独特的含义)。在版本控制系统中,变更具有实际的历史记录,其中一个事件导致另一个事件发生,而备份中只有一系列无关的事件。
与此密切相关的是变更元数据的概念。在版本控制系统中,每个变更都有一个作者、一个时间戳和最重要的是一个提交信息。这个提交信息记录了为什么进行了变更,换句话说,记录了我在上面一段中提到的“意义”。
强调一下,版本控制系统中的提交历史和特别是提交信息是最重要的数据,而不是代码本身!备份中完全没有这些元数据。
版本控制系统与普通备份的区别在于其具备分支和合并的能力。这种能力被称为“多个并发宇宙”。
同时,您也可以参考Eric Sink所写的出色的版本/源码控制指南。
版本控制代表了所有更改的完整历史记录;备份试图确保您不会丢失它。
当然,它们之间有一些灰色地带,但我会这样定义:
版本控制是由“写入”操作触发的,而备份通常是由时间间隔触发的。
备份软件可以配置为每秒运行一次,如果没有发生更改,则不存储数据,但在我看来,这还不足以被视为版本控制,因为一个文件可能在一秒钟内更改两次。
以下是一些内容:
版本控制有协作功能,备份只是一个快照。
例如:使用版本控制,两个人可以同时编辑同一个文件,系统会智能地将更改合并在一起。但备份呢?哪个版本的文件会胜出呢?备份没有将两个不同的备份合并为一个“真正”的备份。
我认为最显著的基本区别是版本控制可以让多个用户轻松地在同一代码上工作,而备份则不行。
VCS应该存储多个版本(而备份可能只存储最新的已知好版本)
由于第1点,每个版本都应该以某种方式进行标识(日期、标签、版本ID等)
VCS通常可以支持多个并发用户
用于源代码的VCS通常支持分支、合并、添加注释和查看差异