Git起步
1.1?关于版本控制
版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。
1.1.1?本地版本控制系统
文件补丁是一种特定格式的文本文件,记录着对应文本修订前后的内容变化。
1.1.2?集中化的版本控制系统
集中化版本控制系统(Centralized?Version?Control?Systems,简称CVCS),诸如CVS,Subversion以及Perforce等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
1.1.3?分布式版本控制系统
分布式版本控制系统(Distributed?Version?Control?System,简称DVCS),诸如Git,Mercurial,Bazaar还有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-9及a-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的工作需要调用curl,zlib,openssl,expat,libiconv等库的代码,所以需要先安装这些依赖工具。在有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?johndoe@example.com
如果用了--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-->