Git入门教程_01_Git基础

本文整理自Git官方的教程。 http://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5-Git-%E5%9F%BA%E7%A1%80

一,Git是什么
     Git最初是linus大神写的用来管理linux开发的工具,可以说是现在程序员必不可少的代码管理神器。它被广泛运用于代码保存与分享、版本控制、团队协作等诸多方面。
     使用Git 的几大好处(功能)如下:
     1,代码一旦提交,就被Git记录在案,可以回到历史上任何一个提交的时刻,查看并编辑代码。
     2,通过分支,能够非常好地维护开发的流程(比如新功能的开发和临时bug的修复),以及在团队成员之间进行协作。(这是下一篇的内容)
     3,绝大多数操作都在本地完成,只有需要读写远程仓库时才需要联网。


二,Git的基本原理

1,使用快照记录文件
     在Git之前的很多版本控制工具(CVS,Subversion,Perforce等)关心的是文件内容的具体差异,即每次记录有哪些文件更新,以及具体更新了什么内容。如下图

Git入门教程_01_Git基础

    
     而Git则只关心数据的整体是否变化,它保存的不是便后变化的差异,而是对文件的整体做快照,记录到微型的文件系统中。每次提交更新时,对于变化了的文件,Git会做一个快照,并保存指向这次快照的索引;而对于没变化的文件,Git会对之前的快照做一个连接。如下图。

Git入门教程_01_Git基础

     让我们来看一下Git在提交的时候具体做了什么。我们假设当前工作目录中有三个文件,我们先将它们暂存,再提交。
     暂存操作:会对每一个文件计算校验和(SHA-1哈希字符串),然后将单独跟前版本的文件快照保存到Git仓库中(Git使用blob类型的对象存储这些快照),并将校验和加入暂存区域。
     提交操作:此时Git会先计算每一个子目录的校验和(本例中为根目录),然后在Git仓库中将这些目录保存为树对象;然后Git创建新的提交对象,包含了提交信息、指向该树对象的指针,这样一来,就可以此后需要的时候找到此次快照的内容。
     此时,从概念上说,仓库中的各个对象保存的数据和相互关系看起来如下图所示:

Git入门教程_01_Git基础


2,Git中的文件状态
     Git眼中的文件分为4中状态:未跟踪的(untracked),已提交的(committed),已修改的(modified),已暂存的(staged)。
     未跟踪的:所有新建的文件,没有使用git add命令添加到Git的跟踪清单中的文件,都处于未跟踪状态。
     已提交的:已经被Git保存了(已经存储了快照),并且没有再做过修改的文件。此时文件时干净安全的。
     已修改的:此前保存了快照,但是又做了新的修改,但还没有被git add命令添加到暂存区域。
     已暂存的:处于跟踪清单中的文件,做了新的修改后,被git add 命令将当前文件的快照添加到了已暂存区域,将在下次提交时保存。

3,Git的工作区域
     和上述的文件的4中状态相对应的,是Git的3个工作区域:工作目录、暂存区域、以及Git目录(本地仓库)
     Git目录:每个项目都有一个Git目录(git clone出来的项目,Git目录就是其中的.git目录),它是Git用来保存元数据和对象数据库的地方,实际上每次克隆镜像仓库的时候,拷贝的就是这个目录的数据。
     工作目录:每次我们从仓库中选中某个版本,并在该版本下工作的时候,实际上就处于工作目录下。工作目录实际上是从Git目录中的压缩对象数据库中提取出来的。
     暂存区域:当我们在工作目录下完成了修改,就需要将快照保存到暂存区域。暂存区域实际上是Git目录中的一个简单的文件。我们最终还需要将暂存区域中的快照转储到Git目录中永久保存起来。

4,Git的工作流程
     综上所述,Git的基本工作流程如下:
     1,在工作目录中修改文件。
     2,对修改后的文件进行快照,保存到暂存区域。
     3,提交更新,将暂存区域中的快照转存到Git目录中。

你可能感兴趣的:(git)