版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做的好处就是简单,但特别容易犯错。有时候会混淆工作目录,不小心写错文件,或者覆盖意外文件。为解决这个问题,人们很久以前的本地版本控制系统,大多采用简单的数据库来记录文件更新的差异。其中最流行的一种叫做 RCS ,它在硬盘上保存补丁集(补丁是指文件修订前后的变化),通过打补丁,计算出各个版本的文件内容。
集中化版本控制系统(Centralized Version Control Systems,简称 CVCS),诸如 CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。
分布式版本控制系统(Distributed Version Control System,简称 DVCS),诸如 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。
以前绝大多数 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上,直到 2002 年,整个项目组开始启用分布式版本控制系统 BitKeeper 来管理和维护代码。然而开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系于 2005 年结束,他们收回了免费使用 BitKeeper 的权力。于是 Linux 的缔造者 Linus Torvalds 吸取教训,怒创 Git 。
在开始学习 Git 的时候,务必暂时遗忘对其它版本管理系统的认识,避免发生混淆。幸运的是,此时我对其他版本管理系统一无所知。
本栏是我的《 Pro Git 》学习笔记的前半部分。章节根据自己的吸收顺序稍作调整,不少对入门用户来说不必知道的内容,如搭建 Git 服务器等,晦涩难懂,解释起来又连篇累牍,我把它们丢给未来。