Git

Git 入门介绍


Git 概述

什么是 Git

如果你问那些正在使用 Git 工具的人“什么是 Git”,他们大多可能会回答“Git 是一种版本控制系统(Version Control System)”,专业一点的可能会说“Git 是一种分布式版本的版本控制系统”。这样的解释对没接触过 Git 的新手来说是没有任何意义的。到底什么是“版本”?要“控制”什么东西?什么又是“分布式”?接下来就为你一一讲解。

不管你是不是程序员,只要你的日常工作离不开计算机,那么每天可能都要新建、编辑、改动很多的文件。例如,如果你是一名人力资源部门主管,就会创建一个 resume 目录,专门用来保存面试者的资料。

如图 1 所示,随着时间的变化,一开始 resume 目录中只有 3 个文件,过两天增加到 5 个;不久之后,其中的 2 个被修改了;过了 3 个月后又增加到 7 个;最后又删掉了 1 个,变成 6 个。每次 resume 目录的状态变化,不管是新建或删除文件,抑或是改动文件内容,都称为一个“版本”, 如图 1 中的版本 1 ~ 5。而所谓的“版本控制系统”,就是用来记录所有的这些状态变化的,使你可以像搭乘时光机一样,随时切换到过去某一“版本”的状态。
01.png

图 1

简单地说,Git 就像玩游戏的时候可以存储进度一样。例如,为了避免打头目输了而损失装备,或者打倒头目却没有掉落期望的珍贵装备,可以在每次去打头目之前都记录一下,以便在发生状况的时候回到旧进度,再挑战一次。

为什么要学习 Git

先问个问题,大家平常怎样整理或备份文件?

以图 1 为例,最传统也是最方便的方式,便是使用“复制 + 粘贴法”。这样操作之后,可能会出现图 2 所示的画面。
02.png

图 2

虽然一眼就可以看出每个“版本”的用途,但其他信息就不是那么明显了。例如,resume- 2016-05-08 目录中的那两个改动过的文件都改了什么内容?resume-2016-08-22 和 resume-2016-11-28 这两个目录有什么不一样的地方?resume-bak 与其他的目录有什么不同?最麻烦的是,如果这个目录是和其他人共享的,而文件被其他人覆盖了,该怎么处理呢?

如果你在乎这些问题的答案,那么使用“版本控制系统”就是一个很不错的选择。通过这样的系统,可以清楚地记录每个文件是谁在什么时候加进来的、什么时候被修改或删除的。Git 就是这 样一种版本控制系统,也是当前业界最流行的版本控制系统。

无论做任何工作,如果有 Git 帮你保留这些历史记录和证据,那么发生意外状况的时候你就能知道是从什么时候开始有问题的,以及该找谁负责,再也不用自己“背黑锅”了!

Git 与其他版本控制系统的差异

Git 的优点

那么 Git 到底有哪些厉害的地方,会让这么多人选择它呢?

1、免费、开源

2005 年,为了管理 Linux 内核程序代码,Linux 内核的作者 Linus Trovalds 仅用了 10 天时间就开发出了 Git。粗略算来,至今已有十几年的历史了。除了可免费使用外,整个 Git 的源代码也可以在互联网上获取(当然 Git 的源代码也是用 Git 做版本控制的)。

2、速度快、文件体积小

如果使用前面提到的“复制 + 粘贴法”,那么这些备份的目录会占用大量空间。其他的版控系统大多是记录每个版本之间的差异,而不是完整地备份整个目录,所以整个目录的大小不会快速地增加。

Git 的特别之处在于,它并不是记录版本的差异,而是记录文件内容的“快照”(snapshot),可以非常快速地切换版本。

3、分布式系统

对我来说,这可能是 Git 最大的优点了。其他的版本控制系统,比如 CVS 或 SVN 之类的集中式的版控系统(Centralize Version Control),都需要有一台专用的服务器,所有的更新都要与 这台服务器沟通。也就是说,一旦这台服务器坏了,或者处于没有网络连线的环境下,就无法使 用了。

而 Git 是一款分布式的版控系统(Distributed Version Control),虽然通常也会有共同的服务器,但即使在没有服务器或在没有网络的环境下,仍然可以使用 Git 进行版控,待服务器恢复正常运行或移到有网络的环境后再进行同步,不会受到影响。事实上,在使用 Git 的过程中,大多数的 Git 操作在计算机本机上就可以完成。

Git 的缺点

如果非要说 Git 的缺点,那大概就是易学难精。虽然 Git 的指令非常多,而且有的指令有点复杂, 但平常会用到的指令并不多。根据“80/20 法则”,大概 20% 的指令就足以应付 80% 的工作。

除了终端机(或命令提示符)环境下的 Git 指令外,还有很多实用的图形界面工具,让使用者不用输入复杂的指令就可以享用 Git 强大的功能。

常见问题

我是设计师,我也可以用 Git 吗?

基本上,Git 只关心文件的“内容”,所以只要是文件,都可以使用 Git 来管理。只是设计生成的大多是 Photoshop 的 PSD 文件或 Illustrator 的 AI 文件,虽然 Git 也可以管理这些文件,但因为这些文件(二进制文件)不像常规文本文件那样可以一行一行地查看,也就无法那么精准地知道什么人在什么时候改了哪些字。但总体来说,Git 还是帮得上忙的,至少当文件不小心被覆盖或删除的时候,还可以找回旧版本的文件。

Git 就是我之前看到过的 GitHub 吗?

这是很多新手容易有的误会,以为 Git 就是 GitHub(或者认为 GitHub 就是 Git),甚至有的公司在招聘启事上明确写着“会使用 GitHub”。事实上,Git 是一款版本控制软件,而 GitHub 是一个商业网站,其本体是一个 Git 服务器,但这个网站上的应用程序可以让大家通过 Web 操作来完成一些原本需要复杂的 Git 指令才能做到的事。

本文摘自《Git从入门到精通》,经出版社授权转载。

0 个评论

要回复文章请先登录注册