版本控制

概述

透过文档控制（documentation control），能记录任何工程项目内各个模块的改动历程，并为每次改动编上序号。
一种简单的版本控制形式如下：赋给图的初版一个版本等级“A”。当做了第一次改变后，版本等级改为“B”，以此类推。最简单的例子是，最初的版本指定为“1”，当做了改变之后，版本编号增加为“2”，以此类推。
借此，版本控制能提供项目的设计者，将设计恢复到之前任一状态的选择权，这种选择权在设计过程进入死胡同时特别重要。
理论上所有的信息记录都可以加上版本控制，在过去的实务中，除了软件开发的流程，其它的领域中很少有使用较复杂的版本控制技巧与工具（虽然可能为其带来许多好处）。当前已有人开始用版本控制软件来管理CAD电子文件，电路板设计，来补足本来由人手工运行的传统版本控制。

软件版本控制

软件设计师常会利用版本控制来追踪、维护源码、文件以及配置文件等等的改动，并且提供控制这些改动控制权的程序。
在最简单的情况下，软件设计师可以自己保留一个程序的许多不同版本，并且为它们做适当的编号。这种简单的方法已被用在很多大型的软件项目中。该方法虽然可行，但不够有效率。除了必须同时维护很多几乎一样的源码备分外；而且极度依赖软件设计师的自我修养与开发纪律，但这却常是导致错误发生的原因。
有时候，一个程序同时存有两个以上的版本也有其必要性，例如：在一个为了部署的版本中程序错误已经被修正、但没有加入新功能；在另一个开发版本则有新的功能正在开发、也有新的错误待解决，这使得同时间需要不同的版本并修改。
此外，为了找出只存在于某一特定版本中（为了修正了某些问题、或新加功能所导致）的程序错误、或找出程序错误出现的版本，软件调试者也必须借由比对不同版本的代码以找出问题的位置。

软件版本的控制方法

最简单的版本控制就是保留软件不同版本的数份copy，并且适当编号。许多大型开发案都是使用这种简单技巧。虽然这种方法能用，但是很没效率。一是因为保存的数份copy几乎完全一样，也因为这种方法要高度依靠开发者的自我纪律，而常导致错误。因此，有人开发出了将部分或全部版本控制工作自动化的版本控制系统。

差分编码

大部分的版本控制软件采用差分编码：只保留文件相继版本之间的差异，这个方法可以更有效的存储数个版本的文件。

中央式系统与分布式系统

大部分的软件开发案，会有好几个开发人员同时工作。如果两个人员同时要改变同一个文件，而没有管理访问权限，很可能会改写彼此的工作。
所以权限管理控制系统会在两种方法中择一解决：采用中央式系统，由中央权威管理访问权限；或是像分布式系统容许多个单位同时进行，包括同时更动同一文件。
传统上版本控制系统都是采用中央式系统：所有版本控制的工作在一个服务器进行，由中央权威管理访问权限“锁上”文件库中的文件，一次只让一个开发者工作。
2000年后，TeamWare、BitKeeper、和GNU开始用分布式系统：开发者直接在各自的本地文件库工作，并容许多个开发者同时更动同一文件，而各个文件库有另一个合并各个改变的功能。这个方式让开发者能不靠网络也能继续工作，也让开发者有充分的版本控制能力，而不需经中央权威许可。分布式系统仍然可以有文件上锁功能。
分布式系统Linux内核的发明人林纳斯·托瓦兹就是分布式版本控制系统的支持者，他开发了当前被开源社群广泛使用的分布式版本控制系统Git。

文件上锁

文件上锁功能能对高难度的合并（例如大幅更改大文件或文件群的许多部分）提供一些保护，但其他开发者仍然可以绕过版本控制系统改变文件（这本身就是很大的问题）。所以文件上锁功能带来的功效与副作用一直饱受争议。