Git起步

1.1 关于版本控制

版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。

1.1.1 本地版本控制系统

文件补丁是一种特定格式的文本文件,记录着对应文本修订前后的内容变化。

1.1.2 集中化的版本控制系统

集中化版本控制系统(Centralized Version Control Systems,简称CVCS,诸如CVSSubversion以及Perforce等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

1.1.3 分布式版本控制系统

分布式版本控制系统(Distributed Version Control System,简称DVCS),诸如GitMercurialBazaar还有Darcs等,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来,

1.2 Git的历史

1.3 Git基础要点

1.3.1 直接快照,而非比较差异

Git和其它版本控制系统的主要差别在于,Git只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。

Git并不保存这些前后变化的差异数据。实际上,Git更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提及更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为了提高新能,若文件没有变化,Git不会再次保存,而只对上次保存的快照作一连接。

Git更像是个小型的文件系统,但它同时还提供了许多以此为基础的超强工具,而不只是一个简单的VCS

1.3.2 近乎所有操作都可本地执行

Git中绝大多数操作都只需要访问本地文件和资源,不用连网。但如果用CVCS的话,差不多所有操作都需要连接网络。因为Git在本地磁盘上就保存着所有有关当前项目的历史更新,所以处理起来速度飞快。

1.3.3 时刻保持数据完整性

在保存到Git之前,所有数据都要进行内容的校验和(checksum)运算,并将此结果作为数据的唯一标识和索引。

Git使用SHA-1算法计算数据的校验和,通过对文件的内容或目录结构计算出一个SHA-1哈希值,作为指纹字符串。该字串由40个十六进制字符(0-9a-f)组成。

Git的工作完全依赖于这类指纹字串,所以你会经常看到这样的哈希值。实际上,所有保存在Git数据库中的东西都是用此哈希值来做索引的,而不是靠文件名。

1.3.4 多数操作仅添加数据

1.3.5 三种状态

对于任何一个文件,在Git内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。

由此我们看到Git管理项目时,文件流转的三个工作区域:Git的本地数据目录,工作目录以及暂存区域。

每个项目都有一个git目录,它是Git用来保存元数据和对象数据库的地方。该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。

从项目中取出摸个版本的所有文件和目录,用以开始后续工作的就叫做工作目录。这些文件实际上都是从git目录中的压缩对象数据库中提取出来的,接下来就可以在工作目录中对这些文件进行编辑。

所谓的暂存区域只不过是个简单的文件,一般都放在git目录中。有时候人们会把这个文件叫做索引文件,不过标准说法还是叫暂存区域。

1.4 安装Git

1.4.1 从源代码安装

Git的工作需要调用curlzlibopensslexpatlibiconv等库的代码,所以需要先安装这些依赖工具。在有yum的系统上或者有apt-get的系统上,可以用下面的命令安装:

$ yum install curl-devel expat gettext-devel \

      openssl-devel zlib-devel

$ apt-get install curl-devel expat gettext-devel \

      openssl-devel zlib-devel

之后,从下面的Git官方站点下载最新版本源代码:

http://git-scm.com/download

然后编译并安装:

$tar -zxf -git-1.6.0.5.tar.gz

$cd git-1.6.0.5

$make prefix=usr/local all

$sudo make profix=/usr/local install

1.4.2 Linux上安装

$yum install git-core

$apt-get install git-core

1.4.3 Mac上安装

(1)下载图形化安装工具,地址:http://code.google.com/p/git-osx-installer

(2)通过MacPorts(http://www.macports.org)安装。

命令:sudo port install git-core +svn +doc +bash_completion +gitweb

1.4.4 Windows上安装

安装文件下载地址:http://code.google.com/p/msysgit

1.5 初次运行Git前的配置

Git提供了一个叫做git config的工具,专门用来配置或读取相应的工作环境变量。而正是由这些环境变量,决定了Git在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:

(1)/etc/gitconfig文件:系统中对所有用户都普遍适用的配置。若适用git config时用--system选项,读写的就是这个文件

(2)~/.gitconfig文件:用户目录下的配置文件只适用于该用户。若适用git config时用--global选项,读写的就是这个文件。

(3)当前项目的git目录中的配置文件(也就是工作目录中的.git/config文件):这里的配置仅仅对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以.git/config里的配置会覆盖/etc/gitconfig中的同名变量。

Windows系统上,Git会找寻主目录下的.gitconfig文件。主目录即$HOME变量指定的目录,一般都是C:\Documents and Settings\$USER。此外,Git还会尝试找寻/etc/gitconfig文件,只不过看当初Git装在什么目录,就以此作为根目录来定位。

1.5.1 用户信息

第一个要配置的是你个人的用户名称和电子邮件地址。

$git config --global user.name "John Doe"

$git config --global user.email [email protected]

如果用了--global选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他的名字或者电子邮件,只要去掉--global选项重新配置即可,新的设定保存在当前项目的.git/config文件里。

1.5.2 文本编辑器

$git config --global core.editor emacs

1.5.3 差异分析工具

还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用vimdiff的话:

$git config --global merge.tool vimdiff

Git可以理解kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge和opendiff等合并工具的输出信息。

1.5.4 查看配置信息

命令:git cinfig --list

1.6 获取帮助

获取帮助命令:

(1)$git help<verb>

(2)$git <verb> --help

(3)$man git-<verb>

<!--EndFragment-->

猜你喜欢

转载自bsr1983.iteye.com/blog/847065