前言
本章主要介绍Git的入门知识。我们首先会讲述版本控制工具的一些背景,然后介绍如何在你在自己的系统上安装、配置和运行Git。学完本章,你就明白Git是怎么来的、为什么需要Git、为什么需要Git,并掌握使用Git的基础知识。
关于版本控制
什么是“版本控制”,为什么需要它?版本控制是一套系统,该系统按时间顺序记录某一个或某一系列文件的变更,让你可以查看其以前的特定版本。本书以软件源代码文件为例子讲解了版本控制的方法,但实际上这种方法对于计算机上几乎所有文件类型都适用。
适用版本控制系统(VCS),你可以将文件或整个项目恢复到先前的状态,还可以对比文件随时间的变更,查看什么人最后做出的更改可能会造成麻烦,谁在何时引入了一个问题,等等。使用版本控制系统通常意味着,如果你把事情搞砸了或是丢了文件,都可以轻而易举的恢复原状。而且,你要为所有这些福利付出的开销也很低。
本地版本控制系统
很多人控制版本的方法是将文件复制到另一个文件目录下(如果他们够聪明,还会给目录加上时间戳)。这种做法之所以常见,是因为它实现起来非常的简单。然而它又非常容易导致错误,你很容易忘记之前所处的目录,不小心写入了错误文件,或者把不该覆盖掉的文件给覆盖掉了。
为了解决这个问题,开发人员在很久以前就开发了一些本地版本控制系统,使简单的数据库来保存文件的所有变更。
RCS
是一个常用的VCS(Verison Control System),至今还部署在许多计算机上。流行的Mac OS X操作系统中,只要你安装了开发者工具,就会包含一个rcs
命令。RCS会在磁盘上以一种特殊的格式保存补丁集(patch set,也就是文件之间的差异)。通过叠加补丁来将文件恢复到某个历史状态。
集中式版本控制系统
另一个主要的问题,是不同操作系统上开发人员之间的协作。为了解决这个难题,集中式版本控制系统(Centralized Version Control System,CVCS)应运而生。像CVS,Subversion以及Preforce这类系统,都有一个包含文件所有修改版本的单一服务器,多个客户端可以从这个中心位置检出文件。多年来,这已成为版本控制的标准。
相比于本地版本控制系统,它的优势就是支持不同系统上的开发人员协作开发,也可以对项目进行管理等。
缺点就是:服务器宕机了,就什么都没有了。
分布式版本控制系统
分布式版本控制系统(Distributed Version Control System,DVCS)就是为了解决CVCS问题而出现的。对于分布式版本控制系统(比如Git、Mercurial、Bazaar或Darcs)来说,客户端并非仅仅是检出文件的最新快照、而是对代码仓库(respository)进行完整的镜像。这样一来,不管是那个服务器出现故障,任何客户端都可以使用自己的本地镜像来恢复服务器。每次检出操作实际上都是对数据的一次完整备份。
Git简史
同许多伟大的事物一样,Git的诞生伴随着些许颠覆式的创新以及激烈地争论。
Linux内核是一个超大规模的开源软件项目。在Linux内核大部分的维护时间里(1991~2002)其更新都是通过传递补丁和归档文件来实现的。在2002年,Linux内核项目开始采用一个叫做BitKeeper的专有分布式版本控制系统。
2005年,Linux内核开发社区与BitKeeper的研发公司关系破裂,该公司收回了软件的免费使用权。这促使Linux开发社区(尤其是Linux之父linus)在汲取BitKeeper使用过程中的经验教训的基础上,开发出了自己的版本控制系统。新系统目标如下:
- 速度快
- 设计简洁
- 对于非线性开发强有力的支持(数以千计的并行分支)
- 完全的分布式设计
- 能够有效地处理像Linux内核这种大型项目
三种状态
在Git中,我文件可处于一下三种状态之一:已提交(committed)、已修改(modified)和已暂存(staged)
。已提交表示数据已经被安全地存入本地数据库中。已修改表示已经改动了文件,但尚未提交到数据库。已暂存表示对已修改的文件的当前版本做出了标识并将其加入下一次要提交的快照中。
由此便引入了Git项目中三个主要的区域
:Git目录、工作目录以及暂存区。
Git目录
是保存Git项目元数据和对象数据库的地方。这是Git最重要的部分,也是从其他计算机中克隆仓库时要复制的内容。
工作目录
是项目某个版本的单次检出。这些文件从Git目录下的压缩数据库内被提取,放置在磁盘上以供使用或修改。
暂存区
是一个文件,一般位于Git目录中。它保存了下次要提交内容的全部相关信息。有时候它也被称为“索引”,不过通常还是叫做暂存区。
Git的提交流程
- 修改工作目录中的文件;
- 暂存文件,将这些文件的快照加入暂存区;
- 提交暂存区中的文件,将快照永久保存在Git目录中。
安装Git
Windows
Linux
我这里使用的是Ubuntu系统
打开终端,输入以下命令
sudo apt-get install git-all
源码安装
因为我前面已经用命令行下载了Git,这里就不展示用源码安装了。下面告诉大家防范
- 将下载下来的文件上传到Linux上的某个路径下
- 下载相关依赖
sudo apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
sudo apt-get install asciidoc xmlto docbook2x
- 进行解压
tar -zxvf git-x.x.x.tar.gz
- 进入Git目录
cd git-x.x.x
- 检查本机系统配置
make configure
- 使配置生效
./configure --prefix=/usr
- 编译
make all doc info
- 安装
sudo make install install-doc install-html install-info
安装完之后,后续的更新可以通过git自身来获得,执行如下命令
git clone git://git.kernel.org/pub/scm/git/git.git
Git的配置
系统配置
cat /etc/gitweb.conf
git config --system
用户个人配置
cat ~/.gitconfig
git config --global
用户身份
上面是我之前配置的,大家自己配置可以使用命令
git config --global user.name "jacky"
git config --global user.email gitisthebest@git.com
也可以使用git config --list
查看所有的配置
个人编辑器
可以使用命令git config --global core.editor <编辑器可执行程序路径>
我是直接使用的vim
,Windows上有Git自带的Git Bash
。
看大家自己的兴趣吧。
帮助
git help config