内容


了解 Git 的工作方式,而不仅仅是了解命令

Git,自我提醒

Comments

Git 是一种常用的分布式源代码库。它是由 Linux 创作者 Linus Torvalds 创建的,旨在管理 Linux 内核源代码。GitHub 等整体服务都是基于它创建的。甚至 IBM 的 DevOps Services 和 IBM Rational Team Concert™ 源代码库也使用它。因此,如果您想在 Linux 领域中编写程序,或者是结合使用 IBM 的 DevOps Services 和 Git,则对 Git 有很好的了解会很有帮助。

当我开始使用 Git 时,我拥有 Concurrent Versions System (CVS) 和 Apache Subversion (SVN) 方面的经验,因此我试着从这些经典源代码库系统方面来了解它。这种思考方式让我对 Git 的能力了解有限。从那时起,我对 Git 的了解逐渐增加,本文是一种 “自我提醒” 方式的记录,提醒自己 Git 的工作方式并向新手介绍 Git。我假设您了解其他经典源代码库(比如 CVS 或 SVN)的工作方式。

基础知识

从经典源代码库中的一个基本示例开始,如图 1 所示。在经典源代码中,会将包含文件和子文件夹的文件夹视为内容进行处理(CVS 和 Git 实际上不会处理文件夹,仅处理路径位置下的文件)。存储库包含所有内容版本,而工作目录是修改代码的位置。将代码从存储库签出(checkout)到工作目录,并将在此工作目录中所做的更改提交给存储库中的新内容版本。

图 1. 经典源代码库工作区处理
将提交发送给存储库,并签出检索结果
将提交发送给存储库,并签出检索结果

每次提交创建一个来自之前修改的版本的新子内容版本,如图 2 所示。内容存储为一系列版本,也称为快照,由提交操作创建的父子关系进行链接。提交的父版本和子版本之间的信息更改称为变更集

此系列版本称为分支。在 SVN 中,主要流称为 trunk;在 CVS 中它通常称为 HEAD;在 Git 中它通常称为 master。可以在实施项目中使用分支来分离特定功能开发,或者使用分支维护旧版本。

图 2. 在经典存储库中创建新版本
签出内容,更改,然后提交
签出内容,更改,然后提交

到目前为止,Git 看起来很像此类经典源代码库,是吧?不幸的是,相似之处到此就结束了。CVS 和 SVN 的一个主要特点是它们拥有一个中央存储库。Git 是分布式的。多个存储库可以在软件开发中一起工作,实际上,每个开发人员的存储库与任意基于服务器的 Git 存储库的工作和通信方式相同。

Git 如何工作?

一旦您真正了解了 Git,会发现它的主要原则非常简单。

首先,Git 以快照方式处理内容,每个提交一个快照,并且知道如何在两个快照之间应用或回滚变更集。这是一个重要的概念。在我看来,了解应用和回滚变更集的概念让 Git 更容易理解,且使用起来更加简单。

这是真正的基本原理。其他一切都是由此衍生的。下面深入介绍一下 Git。

使用 Git