介绍、相关概念理解及安装

1. 简介

git 是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

说白了就是一个版本控制工具,帮助大家管理自己的代码。

2. 概念

了解下面的内容对于掌握 git 非常重要。

2.1 直接记录快照,而非差异比较

git 和其它版本控制系统(包括 Subversion 和近似工具)的主要差别在于 git 对待数据的方法。概念上来区分,其它大部分系统以文件变更列表的方式存储信息。这列系统(CVS、Subversion、Preforce、Bazaar 等等)将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。

file

git 更像是把数据看作是对小型文件系统的一组快照。每次你提交更新,或在 git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。git 对待数据更像是一个 快照流 。

file

2.2 近乎所有操作都是本地执行

在 git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。比如要浏览项目的历史,git 不需要外连到服务器去获取历史,然后显示出来——它只需直接从本地数据库中读取。你能立即看到当前版本与一个月前的版本之间引入的修改,git 会查找到一个月前的文件做一次本地的差异计算,而不是由远程服务器处理或从远程服务器拉回旧版本再来本地处理。这也意味着你离线或者没有 VPN 时,几乎可以进行任何操作。

2.3 保证完整性

git 中所有数据在存储前都计算校验和,然后以校验和来引用。这意味着不可能在 git 不知情时更改任何文件内容或目录内容。若你在传送过程中丢失信息或损坏文件,git 就能发现。git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。实际上,git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。

2.4 一般只添加数据

你执行的 git 操作,几乎只往 git 数据库中增加数据。很难让 git 执行任何不可逆操作,或者让它以任何方式清除数据。这使得使用 git 成为一个安心愉悦的过程,因为我们可以尽情做各种尝试,而没有把事情弄糟的危险。

2.5 三种状态

git 有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。已提交表示数据已经安全的保存在本地数据库中。已修改表示修改了文件,但还没有保存到数据库中。已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

由此引入 git 项目中的三个工作区域的概念:git仓库、工作目录以及暂存区域。

file

git 仓库目录是 git 用来保存项目的元数据和对象数据库的地方。这是 git 中最重要的部分,从其他计算机克隆仓库时,拷贝的就是这里的数据。

工作目录是对项目的某个版本独立提取出来的内容。这些从 git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。

基本的 git 工作流程如下:

  1. 在工作目录中修改文件。
  2. 暂存文件,将文件的快照放入暂存区域。
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 git 仓库目录。

如果 git 目录中保存着的特定版本文件,就属于已提交状态。如果做了修改并已放入暂存区域,就属于已暂存状态。如果自上次取出后,做了修改但还没有放到暂存区域,就是已修改状态。

2.6 命令行

git 有多种使用方式。你可以使用原生的命令行模式,也可以使用 GUI 模式,这些 GUI 软件也能提供多种功能。只有在命令行下才能执行 git 的所有命令,大多数 GUI 软件只实现了 git 所有功能的一部分以降低操作难度。如果你学会了在命令行下如何操作,那么在操作 GUI 软件时应该也没什么问题。

3. 安装

3.1 在 Linux 上安装

例如在 CentOS 上使用 yum 安装:

yum install git

也可以采用编译源码的方式,需要安装 git 依赖库:curl、zlib、openssl、expat。

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

安装编译工具:

yum install gcc perl-ExtUtils-MakeMaker

安装好所有必要依赖,可以从 Kernel.orgGitHub 下载源码。

接着,编译并安装:

tar -zxvf git-2.10.0.tar.gz
cd git-2.10.0
make configure
./configure --prefix=/usr/local/git
make && make install

配置下环境变量:

echo 'export PATH=$PATH:/usr/local/git/bin' >> /etc/bashrc
source /etc/bashrc

3.2 在 Windows 上安装

git官网 进行下载。

3.3 初次配置

安装 git 后,你会想要做几件事来定制你的 git 环境。每台计算机上只需要配置一次,程序升级时会保留配置信息。你可以在任何时候再次通过运行命令来修改它们。

git 自带一个 git config 的工具来帮助设置控制 git 外观和行为的配置变量。这些变量存储在三个不同的位置:

  1. /etc/gitconfig:包含系统上每个用户及它们仓库的通用配置。如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。
  2. ~/.gitconfig~/.config/git/config:只针对当前用户。可以传递 --global 选项让git读写此文件。
  3. 当前使用仓库的 git 目录中的 config 文件(.git/config):针对该仓库。

每个级别覆盖上一级别的配置,所以 .git.config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。

在 Windows 系统中,git 会查找 $HOME 目录下(一般情况下是 C:\Users\$USER)的 .gitconfig 文件。git 同样会寻找 /etc/gitconfig 文件,但只限于安装 Git 时所选的目标位置。

然后需要设置你的用户名称和邮箱地址:

git config --global user.name "ilaoniu"
git config --global user.email ilaoniu@qq.com

再次强调,如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, git 都会使用那些信息。当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。