版本控制
一提到版本控制,程序员们就会想到他们工作中用到的各种源代码控制工具,Subversion、Git、Mercurial……实际上源代码之外的许多其他文件也会有版本控制的需要。而版本的想法和对其的管理更是在计算机出现之前的印刷以至手写时代就一直存在。版本是作品生长衍变的徵象。手写和印刷时代的文字作品之还仅是记录它的修改生长。及至计算机和电子文件出现,文件大小、内容复杂程度、版本更新速度都空前增加。除了单纯记录不同版本,版本控制又被提出许多新的功能需求:恢复到任一历史版本、比较两个版本之间的差异、创建多个分支版本、合并不同版本。尤其是对程序员而言,这些功能对于调试错误、了解代码演变、多人合作以及为多个用户和目的开发等任务都大有裨益。
Git
与其他软件工具一样,版本控制系统(VCS即Version Control System,或RCS即Revision Control System)也伴随着实际需要不断演化生长。起初所有被管理文件的数据都保存在本机的存储库(repository)里,后来进化成客户端服务器模式,存储库保存在服务器上,版本控制系统从而由单机版变成了可多人合作的网络版。这样的架构唯一的缺点是只有服务器上保有文件的完整历史数据,每个客户端仅有当前工作的版本。这样在多个版本之间的切换、比较、合并等操作都需要连接服务器查询和传输数据。此外一旦服务器上的存储库被损坏,所有的历史积累将无法挽回。为了更加适应多人自由开发的环境,分布式版本控制系统(DVCS即Distributed Version Control System)诞生了。就像分布式数据库系统在不同节点上有单个数据库的多个副本一样,每个DVCS用户机器上都保存了完整的存储库。在无联网的单机状态下,程序员也能使用版本控制的所有功能,联网时则可以同服务器上的存储库同步。