图片描述
这是我们开始学习 Git 的第一节课,主要带大家初识 Git。本节课会从 Git 的诞生、以及 Git 是什么、Git 能做什么这几个方面进行一个简单的介绍,让大家对 Git 有一个初步的了解,为以后的课程做一个铺垫。好了,让我们开始走进 Git 的世界!

1. Git 的前世今生

我们学一样技术或者一种工具,刚开始最好先了解一下它的来龙去脉。虽然无关使用,但通过它背后的故事可能会激发起我们学习它的浓厚兴趣,从这一点来讲还是有实际意义的。

提起 Git,就不得不提起 Linus 和他的 Linux。计算机相关从业者大多都知道,linus 创建了 Linux 系统,但是 Linux 系统并不是由 Linus 一个人完成的,它依赖于广大的开发者源源不断的贡献代码来共同开发维护。那么问题来了,这么多人来共同维护一个系统,当时大家是怎样来保持高效的协作呢?这么多人提交代码,是怎么保证代码不冲突呢?你可能会想到使用过的一些版本控制系统,不过可能要让你失望了,虽然当时有很多版本控制系统像 CVS、SVN 等,但是都被 linus 舍弃了,因为这些集中式的版本控制系统需要联网,而且速度很受影响。所以,很长一段时间内,都是靠 linus 来自己手工合并的(默默送上大拇指)。

但是,Linux 系统越来越庞大,这么下去不是个问题。直到 2002 年左右,BitMover 公司将他们的商业的版本控制系统 BitKeeper 给 Linux 社区免费使用,这下大家的工作量稍微减轻了些。但是好景不长,社区牛人聚集,还没一两个手脚乱动的?有人试图破解 BitKeeper 的协议,但是被 BitMover 公司发现了,于是乎 BitMover 公司一怒之下收回了他们的使用权。

本来单车变摩托,现在又骑单车了。不过,Linus 就是 Linus,怎么可能重走旧路呢,毕竟合并代码手很疼。痛定思痛,没花多久自己用 C 开发了一套分布式版本管理系统,没错就是 Git!

后来 Git 越来越流行,比如程序员大型交友网站 Github 使用的就是 Git 存储。

2. Git 是什么

我们先来看下官方解释:

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

Git is_ easy to learn and has a tiny footprint with lightning fast performance. It outclasses SCM tools like Subversion, CVS, Perforce, and ClearCase with features like cheap local branching, convenient staging areas, and multiple workflows.

简单给大家翻译下,它的意思是说:

Git 是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容。

Git 易于学习,且性能出众。 它的本地分支,方便的暂存区域和多个工作流等功能,其性能优于 Subversion,CVS,Perforce 和 ClearCase 等 SCM 工具。

其实,翻译过来还是有点晦涩难懂。其中一些概念对于新手来说很难真正理解。别着急,我挑其中的重点概念来给大家具体讲解下。

2.1 分布式版本控制系统

分布式版本控制系统是相对于集中式版本控制系统来说的。

集中式版本控制系统首先需要联网,提交文件速度依赖于网络带宽。而且,集中式版本控制系统的版本库是集中存放在中央服务器的,每个人提交内容的时候,需要先提交到中央服务器,然后再从中央服务器拉取别人的修改到自己的本地。

分布式版本控制系统没有中央服务器,每个人本地都是一个完整的版本库,所以也不依赖网络。多个人在自己本机修改同一个文件后,只需把各自的修改推送给对方,就可以互相看到对方的修改了。

基于以上特点可以看出,分布式版本控制系统的安全性比集中式版本控制系统高。因为每个人电脑里都有完整的版本库,你电脑宕机丢失本地修改后,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,那就很难恢复了。

2.2 分支

分支,可以先简单理解成就是一条时间线,对于给 A 老板的文档,每个人每一次提交修改过程都是这条时间线上的一个节点,这些节点共同串成了一条时间线,也就是一个分支。同样,你可以创建一个 B 分支,在 B 分支上进行另一个版本的修改提交。
关于分支的理论与具体操作,我们在后续详细说明。

2.3 快照

Git 与任何其他 VCS 之间的主要区别在于对数据的处理方式。

大多数其他版本控制系统将信息存储为基于文件的更改的列表。这些其他系统保存的是对每个文件所做的更改(通常称为基于增量的版本控制)。如下图,每个版本记录的是文件发生的改变。
图片描述

而 Git 每次提交或保存项目状态时,基本上都会拍下当时所有文件的图片,并存储对该快照的引用。为了提高效率,如果文件没有更改,Git 不会再次存储该文件,而只是指向它已经存储的先前相同文件的链接。Git 更像是一堆快照来处理数据。如下图,每个版本记录的是文件完整的信息。
图片描述

3. Git 能干什么

举个例子,你和多个同事需要写作完成一个 word 文档,每个同事负责其中一部分,那么怎么进行协作编写呢?可能会是各自写完自己的模块后由某个人进行手工整理成你们需要的内容。但这样其实很不方便,所以版本控制系统出现了,它的作用替最后那个人进行整理的。当然,远不止这一个功能,比如你们的文档编写完毕后弄丢了,版本控制系统可以帮忙找回历史文件。再比如,你需要整理多个不同版本的 word 文档给不同的 boss 看,你大可不必备份多份副本,版本控制系统同样可以轻松完成。所有的版本控制系统都是干这些的,像 SVN、CVS 等,当然 Git 也不例外。不同的是,Git 有自己的特点和版本管理方式,后续我们会详细讲解。

4. 总结

好了,今天先带大家初识 Git,我们先从概念上对 Git 有一个大致的了解,后续再通过实际的操作和深入的理论讲解去学习 Git。

本小节知识点回顾:

  • Git 的诞生:绝地求生
  • Git 是什么:如官网所说,fast version control
  • Git 能干什么:主要用来管理多人协作下对文件版本的控制