如果你问那些正在使用Git工具的人“什么是Git”,他们大多可能会回答“Git是一种版本控制系统(Version Control System)”,专业一点的可能会说“Git是一种分布式版本的版本控制系统”。这样的解释对没接触过Git的新手来说是没有任何意义的。到底什么是“版本”?要“控制”什么东西?什么又是“分布式”?接下来就为你一一讲解。
不管你是不是程序员,只要你的日常工作离不开计算机,那么每天可能都要新建、编辑、改动很多的文件。例如,如果你是一名人力资源部门主管,就会创建一个resume目录,专门用来保存面试者的资料。
如图1-1所示,随着时间的变化,一开始resume目录中只有3个文件,过两天增加到5个;不久之后,其中的2个被修改了;过了3个月后又增加到7个;最后又删掉了1个,变成6个。每次resume目录的状态变化,不管是新建或删除文件,抑或是改动文件内容,都称为一个“版本”,如图1-1中的版本1 ~ 5。而所谓的“版本控制系统”,就是用来记录所有的这些状态变化的,使你可以像搭乘时光机一样,随时切换到过去某一“版本”的状态。
图1-1
简单地说,Git就像玩游戏的时候可以存储进度一样。例如,为了避免打头目输了而损失装备,或者打倒头目却没有掉落期望的珍贵装备,可以在每次去打头目之前都记录一下,以便在发生状况的时候回到旧进度,再挑战一次。
先问个问题,大家平常怎样整理或备份文件?
以图1-1为例,最传统也是最方便的方式,便是使用“复制+粘贴法”。这样操作之后,可能会出现图1-2所示的画面。
图1-2
虽然一眼就可以看出每个“版本”的用途,但其他信息就不是那么明显了。例如,resume-2016-05-08目录中的那两个改动过的文件都改了什么内容?resume-2016-08-22和resume-2016-11-28这两个目录有什么不一样的地方?resume-bak与其他的目录有什么不同?最麻烦的是,如果这个目录是和其他人共享的,而文件被其他人覆盖了,该怎么处理呢?
如果你在乎这些问题的答案,那么使用“版本控制系统”就是一个很不错的选择。通过这样的系统,可以清楚地记录每个文件是谁在什么时候加进来的、什么时候被修改或删除的。Git就是这样一种版本控制系统,也是当前业界最流行的版本控制系统。
无论做任何工作,如果有Git帮你保留这些历史记录和证据,那么发生意外状况的时候你就能知道是从什么时候开始有问题的,以及该找谁负责,再也不用自己“背黑锅”了!