Chinaunix首页 | 论坛 | 博客
  • 博客访问: 915579
  • 博文数量: 40
  • 博客积分: 995
  • 博客等级: 准尉
  • 技术积分: 830
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-10 11:09
个人简介

不知道自己是码农的二流码农!

文章分类

全部博文(40)

文章存档

2013年(4)

2012年(35)

2011年(1)

分类: 项目管理

2012-08-22 17:40:01

(分布式版本控制)简介

文档名称

Git(分布式版本控制)简介

创建时间

2012/8/20

修改时间

2012/8/22

创建人

Baifx

简介(收获)

 

Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。

Windows下的Git请看这里:

Git Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得 BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如,X.org 最近就迁移到 Git 上来了,很多 Freedesktop.org 的项目也迁移到了 Git 上。

GitCVS的区别

  • 分支更快、更容易。
  • 支持离线工作;本地提交可以稍后提交到服务器上。
  • Git 提交都是原子的,且是整个项目范围的,而不像 CVS 中一样是对每个文件的。
  • Git 中的每个工作树都包含一个具有完整项目历史的仓库。
  • 没有哪一个 Git 仓库会天生比其他仓库更重要。

一、Git特点

参见:

 

在开始学习Git的时候,请不要尝试把各种概念和其他的版本控制系统诸如SubVersionPerforce等相比拟,否则容易混淆每个操作的实际意义。Git在保存和处理各种信息的时候,虽然操作起来的命令形式非常相近,但它与其他版本控制系统的做法颇为不同。理解这些差异将有助于你准确地使用Git提供的各种工具。

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

       Git和其他版本控制系统的主要差别在于,Git只关心文件数据的整体是否发生变化,而大多数其他系统只关心文件内容的具体差异。这类系统(CVSSubversionPerforceBazaar等等)每次记录有哪些文件做了更新,以及都更新了哪些行的内容,请看下图:

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

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

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

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

       举个例子,如果要浏览项目的历史更新摘要,Git不用跑到外面的服务器上去取数据,而直接从本地数据库读取。所以任何时候你都可马上翻阅,无需等待。如果想要看当前版本的文件和一个月前的版本之间的差异,Git会取出一个月前的快照和当前文件做一次差异运算,而不用请求远程服务器来做此事,或者把老版本的文件拉到本地作比较。      

       3、时刻保持数据完整性

       在保存到Git之前,所有数据都要进行内容的校验和(checksum)计算,并将此结果作为数据的唯一标识和索引。换句话说,不可能在你修改了文件或目录之后,Git一无所知。这项特性作为Git的设计哲学,建在整体架构的最底层。所以如果文件在传输时变得不完整,或者磁盘损坏导致文件数据缺失 Git都能立即察觉。

       Git使用SHA-1算法计算数据的校验和,通过对文件的内容或目录的机构计算出一个SHA-1哈希值,作为指纹字符串。该字符串由40个十六进制字符(0-9以及a-f)组成,类似:24b9da6552252987aa493b52f8696cd6d3b00373Git的工作完全依赖于这类指纹字符串。实际上所有保存在Git数据库中的东西都是用此哈希值来作索引的,而不是靠文件名。

       4、多数操作仅添加数据

       常用的Git操作大多数仅仅是把数据添加到数据库。因为任何一种不可逆的操作,比如删除数据,要回退或者重现都会非常困难。在别的VCS中,若还未提交更新就有可能丢失或者混淆一些修改的内容,但在Git里,一旦提交快照之后就完全不用担心丢失数据,特别是在养成了定期推送至其他镜像仓库的习惯的话。

       二、概念

       1、三种状态

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

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

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

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

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

       2Git的基本工作流程如下:

       a、在工作目录中修改某些文件;

       b、对这些修改了的文件作快照,并保存到暂存区域;

       c、提交更新,将保存在暂存区域的文件快照转储到git目录中。

       所以,我们从文件所处的位置来判断状态:如果是git目录中保存着的特定版本文件,就属于已提交状态;如果作了修改并已放入暂存区域,就属于已暂存状态;如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

       三、操作

   1、倒入一个新项目

        2、提交修改后的文件

   

       3、查看日志

       查看日志如上所述用“log命令。最简单的查询开发日志的方法就是“git log。但如果你觉得git log给出的信息太单薄,可以使用“git log -p”,这样git不但会给出开发日志,而且会显示每个开发版本的代码区别所在。

   4、分支

       5、删除分支

       6、在GIT中合作开发

       7、历史记录查询

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

阅读(2291) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~