备份和版本控制之间是否存在根本差异?

29

版本控制与纯备份有何不同?

我们先不考虑其它功能,重点关注版本控制的本质。备份必须达到哪个明确的标准才能被称为VCS? 或者,本质上它们是相同的东西,只是面向不同的市场?

如果存在根本性的区别,那么使某物达到版本控制状态的最低要求是什么?

请注意回答时不要仅列出大多数版本控制系统具有或应具有的功能(如增量压缩、分布式/中央存储库和并发访问解决方案),除非它们实际上按照定义需要成为VCS。

17个回答

29

版本控制的基本思想是管理同一组信息的多个版本。备份的思想是将信息的最新版本复制到安全位置 - 可以覆盖旧版本。


同意。在我看来,这是关键的差异化因素。 - Karim
同意,可能比分支更基本(但不多;)顺便问一下,这是个好问题。 - Ash
5
我对这个定义并不认同。你将备份的使用局限在了一个具体问题上,即在某种数据丢失后进行恢复。备份可以出于各种原因进行,其中保留某物的历史记录是其中之一。在这种情况下,你不能覆盖旧版本。 - unwesen
@unwesen,你觉得“保留某物的历史记录”不属于版本控制的范畴吗? - user64075
10
良好的备份系统应存储多个版本。这很重要,因为数据丢失通常不会立即被察觉到。如果在你注意到自己损坏了一个重要文件时,最新的备份可能已经包含了这个损坏。 - oefe
显示剩余3条评论

10

我看到备份和版本控制之间有几个根本性的区别:

  1. 备份只存储最新版本,即使它们存储多个版本,也不会存储每个版本。而版本控制系统会存储每一个版本。
  2. 备份版本通常已经过时,因为备份记录的不是每次变化,而版本控制系统则记录了所有变化。
  3. 版本控制系统允许同时追踪同一更改的多个替代版本(即分支)。

然而,备份和版本控制系统之间最重要的区别在于,在版本控制系统中,变更具有含义。在备份中,由于某台计算机认为距离上次备份已经x小时,因此创建了一个新版本;而这个变更本身完全没有任何意义。在版本控制系统中,由于某个决定该版本具有自己独特的含义,它有自己不同于所有其他版本的身份。因此,在备份中,所有版本都是相等的(更确切地说:它们同样没有意义),而在版本控制系统中,所有版本都是特殊的(它们具有自己独特的含义)。在版本控制系统中,变更具有实际的历史记录,其中一个事件导致另一个事件发生,而备份中只有一系列无关的事件。

与此密切相关的是变更元数据的概念。在版本控制系统中,每个变更都有一个作者、一个时间戳和最重要的是一个提交信息。这个提交信息记录了为什么进行了变更,换句话说,记录了我在上面一段中提到的“意义”。

强调一下,版本控制系统中的提交历史和特别是提交信息是最重要的数据,而不是代码本身!备份中完全没有这些元数据。


9

版本控制系统与普通备份的区别在于其具备分支和合并的能力。这种能力被称为“多个并发宇宙”。

同时,您也可以参考Eric Sink所写的出色的版本/源码控制指南。


这是真的吗?没有分支,即使是非常有限的版本控制系统,也不能被称为版本控制系统? - user64075
一些版本控制系统,比如维基或Google Docs中的那些,不支持分支和合并;虽然在软件开发领域中非常有用,但我认为这不是版本控制系统的必要特性。 - Miles
分支和合并可以通过复制、差异比较以及适当的命名约定来实现备份。 - Peter Boughton
@viipaloitsija,这只是我在评估版本控制系统时寻找的第一件事情之一。你们都提出了很好的观点,但我发现这是当今VCS不可或缺的功能。 - Ash
@Ash,不可或缺和基本之间有一条微妙的界限。(我不知道这个问题的答案,所以分支/合并也可能是基本的。) - user64075

5

版本控制代表了所有更改的完整历史记录;备份试图确保您不会丢失它。


4

当然,它们之间有一些灰色地带,但我会这样定义:

版本控制是由“写入”操作触发的,而备份通常是由时间间隔触发的。

备份软件可以配置为每秒运行一次,如果没有发生更改,则不存储数据,但在我看来,这还不足以被视为版本控制,因为一个文件可能在一秒钟内更改两次。


一个老问题,但最近一个有关如何存储一个特定文件的决策让我想到了“版本控制”或“备份”的问题。在阅读了这里的信息后,我得出了你的结论。作者知ingly使用“版本控制”来“提交”(我更喜欢这个词而不是“写入”)文件的永久递增历史中的变化。备份则是在文件作者不知情的情况下发生的。为了突显区别,我可能会在文件上工作数周,并且许多版本将被备份保存,但只有一个版本(最终版本)会通过“提交”在vc中保存。 - Stephen Hosking
相反地,我可能会在版本控制下的文件中进行小的更改,只需几分钟即可“提交”。我的更改现在已经在版本控制中,但不太可能在备份中。 - Stephen Hosking

3

以下是一些内容:

  • 备份系统会保存一定时间范围内的备份。版本控制通常会保留所有已创建的版本。
  • 版本控制通常集中在文本文件的版本控制上。
  • 在版本控制系统中,您通常可以立即访问任何文件的任何版本。备份系统可能需要一些时间才能访问您要查找的内容。

3

版本控制有协作功能,备份只是一个快照。

例如:使用版本控制,两个人可以同时编辑同一个文件,系统会智能地将更改合并在一起。但备份呢?哪个版本的文件会胜出呢?备份没有将两个不同的备份合并为一个“真正”的备份。


2

我认为最显著的基本区别是版本控制可以让多个用户轻松地在同一代码上工作,而备份则不行。


2
在我看来,以下是版本控制系统(VCS)的一些最基本功能,这些功能可能不在基本备份中:
  1. VCS应该存储多个版本(而备份可能只存储最新的已知好版本)

  2. 由于第1点,每个版本都应该以某种方式进行标识(日期、标签、版本ID等)

  3. VCS通常可以支持多个并发用户

  4. 用于源代码的VCS通常支持分支、合并、添加注释和查看差异


2
我认为你可以为将备份和版本控制系统合并形成论点,或者将它们视为完全独立的进行论述。但我认为你不能避免谈论版本控制系统的各个特性,因为正是这些特性区别了版本控制系统与备份解决方案:
- 跟踪是谁做出了哪些更改。 - 附加说明每次更改背后的原因的注释。 - (大多数情况下)多个用户可能从非常不同的位置同时访问。
在我看来,这些特性是定义性的。如果忽略它们,版本控制系统本质上与增量备份解决方案相同。
如果您查看分布式版本控制系统,则可能会发现比非分布式版本控制系统更强的分支跟踪概念。也就是说,在任何给定时间可能不止一个主干/分支,而这是我接触过的任何备份解决方案都没有考虑到的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接