章节 ▾ 第二版

1.1 开始 - 关于版本控制

本章将介绍 Git 的入门知识。我们将首先解释版本控制工具的一些背景知识,然后介绍如何在您的系统上运行 Git,最后介绍如何设置它以开始使用。在本章结束时,您应该了解 Git 的存在原因,您为什么要使用它,并且您应该做好使用它的所有准备。

关于版本控制

什么是“版本控制”,您为什么要关心它?版本控制是一个系统,它记录一段时间内对文件或一组文件的更改,以便您可以稍后调用特定版本。对于本书中的示例,您将使用软件源代码作为要进行版本控制的文件,但实际上您几乎可以使用计算机上的任何类型的文件来执行此操作。

如果您是图形或网页设计师,并且想要保留图像或布局的每个版本(您当然会希望这样做),那么使用版本控制系统 (VCS) 是非常明智的选择。它允许您将选定的文件恢复到以前的状态,将整个项目恢复到以前的状态,比较一段时间内的更改,查看谁最后修改了可能导致问题的内容,谁引入了问题以及何时引入的问题,等等。使用 VCS 通常还意味着,如果您搞砸了事情或丢失了文件,您可以轻松恢复。此外,您只需付出很少的开销即可获得所有这些。

本地版本控制系统

许多人选择的版本控制方法是将文件复制到另一个目录(如果他们聪明的话,可能是带有时间戳的目录)。这种方法非常常见,因为它非常简单,但它也极易出错。很容易忘记您所在的目录,并意外地写入错误的文件或覆盖您不想覆盖的文件。

为了解决这个问题,程序员很久以前就开发了本地 VCS,它有一个简单的数据库,可以保存对版本控制下文件的所有更改。

Local version control diagram
图 1. 本地版本控制图

最流行的 VCS 工具之一是名为 RCS 的系统,该系统至今仍在许多计算机上分发。RCS 的工作原理是将补丁集(即文件之间的差异)以特殊格式保存在磁盘上;然后,它可以通过将所有补丁加起来来重新创建任何文件在任何时间点上的外观。

集中式版本控制系统

人们遇到的下一个主要问题是需要与在其他系统上工作的开发人员进行协作。为了解决这个问题,人们开发了集中式版本控制系统(CVCS)。这些系统(例如 CVS、Subversion 和 Perforce)有一个包含所有版本化文件的中央服务器,以及许多从该中央位置检出文件的客户端。多年来,这一直是版本控制的标准。

Centralized version control diagram
图 2. 集中式版本控制图

这种设置提供了许多优点,尤其是相比本地 VCS。例如,每个人都在一定程度上了解项目中其他人在做什么。管理员可以对谁可以做什么进行细粒度的控制,而且管理 CVCS 比处理每个客户端上的本地数据库容易得多。

然而,这种设置也有一些严重的缺点。最明显的是,中央服务器代表着单点故障。如果该服务器停机一小时,那么在这一个小时内,任何人都无法协作或将版本化的更改保存到他们正在处理的任何内容。如果中央数据库所在的硬盘损坏,并且没有保留适当的备份,那么您将失去一切——除了人们碰巧在本地机器上拥有的单个快照之外,项目的整个历史记录都会丢失。本地 VCS 也存在同样的问题——只要您将项目的整个历史记录放在一个地方,您就有失去一切的风险。

分布式版本控制系统

这就是分布式版本控制系统(DVCS)发挥作用的地方。在 DVCS(例如 Git、Mercurial 或 Darcs)中,客户端不仅仅是检出文件的最新快照;相反,他们完全镜像存储库,包括其完整的历史记录。因此,如果任何服务器崩溃,并且这些系统通过该服务器进行协作,那么任何客户端存储库都可以复制回服务器以恢复它。每个克隆实际上都是所有数据的完整备份。

Distributed version control diagram
图 3. 分布式版本控制图

此外,许多这些系统都能够很好地处理具有多个可以使用的远程存储库,因此您可以在同一项目中以不同的方式同时与不同的团队进行协作。这允许您设置集中式系统中不可能的几种类型的工作流程,例如分层模型。

scroll-to-top