版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做的好处就是简单,但特别容易犯错。有时候会混淆工作目录,不小心写错文件,或者覆盖意外文件。为解决这个问题,人们很久以前的本地版本控制系统,大多采用简单的数据库来记录文件更新的差异。其中最流行的一种叫做 RCS ,它在硬盘上保存补丁集(补丁是指文件修订前后的变化),通过打补丁,计算出各个版本的文件内容。

local

集中化版本控制系统(Centralized Version Control Systems,简称 CVCS),诸如 CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。

centralized

分布式版本控制系统(Distributed Version Control System,简称 DVCS),诸如 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。

distributed

以前绝大多数 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上,直到 2002 年,整个项目组开始启用分布式版本控制系统 BitKeeper 来管理和维护代码。然而开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系于 2005 年结束,他们收回了免费使用 BitKeeper 的权力。于是 Linux 的缔造者 Linus Torvalds 吸取教训,怒创 Git 。

在开始学习 Git 的时候,务必暂时遗忘对其它版本管理系统的认识,避免发生混淆。幸运的是,此时我对其他版本管理系统一无所知。

本栏是我的《 Pro Git 》学习笔记的前半部分。章节根据自己的吸收顺序稍作调整,不少对入门用户来说不必知道的内容,如搭建 Git 服务器等,晦涩难懂,解释起来又连篇累牍,我把它们丢给未来。