不知道自己是码农的二流码农!
分类: 项目管理
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 上。
Git与CVS的区别
一、Git特点
参见:
在开始学习Git的时候,请不要尝试把各种概念和其他的版本控制系统诸如SubVersion和Perforce等相比拟,否则容易混淆每个操作的实际意义。Git在保存和处理各种信息的时候,虽然操作起来的命令形式非常相近,但它与其他版本控制系统的做法颇为不同。理解这些差异将有助于你准确地使用Git提供的各种工具。
1、直接快照,而非比较差异
Git和其他版本控制系统的主要差别在于,Git只关心文件数据的整体是否发生变化,而大多数其他系统只关心文件内容的具体差异。这类系统(CVS、Subversion、Perforce、Bazaar等等)每次记录有哪些文件做了更新,以及都更新了哪些行的内容,请看下图:
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)组成,类似:24b9da6552252987aa493b52f8696cd6d3b00373。Git的工作完全依赖于这类指纹字符串。实际上所有保存在Git数据库中的东西都是用此哈希值来作索引的,而不是靠文件名。
4、多数操作仅添加数据
常用的Git操作大多数仅仅是把数据添加到数据库。因为任何一种不可逆的操作,比如删除数据,要回退或者重现都会非常困难。在别的VCS中,若还未提交更新就有可能丢失或者混淆一些修改的内容,但在Git里,一旦提交快照之后就完全不用担心丢失数据,特别是在养成了定期推送至其他镜像仓库的习惯的话。
二、概念
1、三种状态
对任何一个文件,在Git中都只有三种状态:已提交(committed)、已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库中;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。
由此,我们看到Git管理项目时,文件流转的三个工作区域:Git的本地数据库目录,工作目录以及暂存区域。
每个项目都有一个git目录,它是Git用来保存元数据和对象数据库的地方。该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。
从项目中取出某个版本的所有文件和目录,用以开始后续工作的叫做工作目录。这些文件实际上都是从git目录中的压缩对象数据库中提取出来的,接下来就可以在工作目录中对这些文件进行编辑。
所谓的暂存区域只不过是个简单的文件,一般都放在git目录中。有时候人们会把这个文件叫做索引文件,不过标准说法还是叫做暂存区域。
2、Git的基本工作流程如下:
a、在工作目录中修改某些文件;
b、对这些修改了的文件作快照,并保存到暂存区域;
c、提交更新,将保存在暂存区域的文件快照转储到git目录中。
所以,我们从文件所处的位置来判断状态:如果是git目录中保存着的特定版本文件,就属于已提交状态;如果作了修改并已放入暂存区域,就属于已暂存状态;如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。
三、操作
1、倒入一个新项目
2、提交修改后的文件
3、查看日志
查看日志如上所述用“log”命令。最简单的查询开发日志的方法就是“git log”。但如果你觉得git log给出的信息太单薄,可以使用“git log -p”,这样git不但会给出开发日志,而且会显示每个开发版本的代码区别所在。
4、分支
5、删除分支
6、在GIT中合作开发
7、历史记录查询