Git简单介绍(资料整合)

一、Git版本控制器git

    Git是一个免费、开源的分布式版本控制系统,经过托管代码,用以有效的高速的处理从很小到很是大的项目版本管理,最初的目的是为更好的管理Linux内核开发设计。服务器

二、Git的实现原理分布式

    Git和其余版本控制系统有不小的差异,Git自己关注文件的总体性是否有改变,但多数的CVS或SVN系统则关注文件内容的差别。所以Git更像是一个文件系统,能够直接在本机上获取数据,而没必要链接到主机端获取。工具

三、主要功能学习

    Git是用于Linux内核开发的版本控制工具。与CVS、Subversion一类的集中式版本控制工具不一样,它采用了分布式版本库的作法,不须要服务器端软件,就能够运做版本控制,使得源代码的发布和交流极其方便。Git的速度很快,这对于诸如Linux内核这样的大项目来讲天然很重要。Git最为出色的是它的合并追踪能力。fetch

    实际上内核开发团队决定开始开发和使用Git来做为内核开发的版本控制系统的时候,世界上开源社区的反对声音很多,最大的理由是Git太艰涩难懂,从Git的内部工做机制来讲,的确是这样。可是随着开发的深刻,GHit的正常使用都由一些友善的命令稿来执行,使得其变得很是好用。如今,愈来愈多的著名项目采用Git来管理项目开发,例如:wine、U-boot等。设计

    做为开源自由原教旨主义项目,Git没有对版本库的浏览和修改作任何的权限限制,经过其余工具也能够达到有限的权限控制,好比gitosis、CodeBeamer MR。本来Git的使用范围只适用于Linux/Unix平台,可是在Windows平台下的使用也日渐成熟,这主要归功于Cygwin、msysgit环境,以及TortoiseGit这样易用的GUI工具。Git的源代码也已经加入了对Cygwin与MinGW编译环境的支持,并逐渐完善,为Windows用户带来福音。版本控制

四、Git分支指针

    几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你能够从主线上分离开来,而后在不影响主线的同时继续工做。在不少版本控制系统中,这是个昂贵过程,经常须要建立一个源代码目录的完整副本,对大型项目来讲会花费很长时间。对象

    有人把Git分支模型称为“必杀技特性”,而正是由于它,将Git从版本控制系统家族里区分出来。Git有何特别之处?Git分支能够说是难以置信的轻量级,它的新建操做几乎能够在瞬间完成,而且在不一样分之间切换起来也差很少快。与其余版本控制系统不一样,Git鼓励在工做流程中频繁使用分支与合并,哪怕一天以内进行许屡次都没有关系。理解分支的概念并熟练运用后,你才会意识到为何Git是一个如此强大而独特的工具,并今后改变你的开发方式。

    何为分支?在Git提交时,会保存一个提交(commit)对象,该对象包含一个指向暂存内容快照的指针,包含本次提交的做者等相关附属信息,包含零个或多个指向该提交对象的父对象指针:首次提交是没有直接祖先的,普通提交有一个祖先,有两个或多个分支合并产生的提交则有多个祖先。为直观起见,咱们假设在工做目录中有三个文件,准备将它们暂存后提交。暂存操做会对每个文件计算校验和,而后把当前版本的文件快照保存到Git仓库中,并将校验和加入暂存区域。当使用 git commit 新建一个提交对象前,Git会先计算每个子目录的校验和,而后在Git仓库中将这些目录保存为树对象。以后Git建立的提交对象,除了包含相关提交信息外,还包含着指向这个树对象的指针,如此就能够在未来须要的时候重现这次快照的内容。Git中的分支,其本质上仅仅是指向commit对象的可变指针。Git会使用master做为分支的默认名称。在若干次提交后,你其实已经有了一个指向最后一次提交对象的master分支,它在每次提交的时候都会自动向前移动。Git保存着一个名为HEAD的特别指针,它是一个指向你正在工做中的本地分支的指针(能够看成当前工做分支的别名)。创建一个新的分支,转换到其中进行一些工做,而后再回到原来的分支进行另一些工做,这些改变分别孤立在不一样分支里:咱们能够在不一样分支里反复切换,并在时机成熟的时候进行合并。

    因为Git中的分支实际上仅是一个包含所指对象的校验和的文件,因此建立和销毁一个分支就很是廉价。大多数版本控制软件,在管理分支时采起备份全部项目文件到特定目录的方式,因此根据项目文件的数量和大小不一样,可能花费的时间也会有至关大的差异。而Git的实现与项目的复杂度无关,他永远能够在几毫秒的时间内完成分支的建立和切换。同时由于每次提交都记录了祖先信息,未来要合并分支时,寻找恰当的合并基础的工做就很是容易。

五、Git的功能特性

    从通常的开发者角度来讲,其功能以下:

    一、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。

    二、在本身的机器上根据不一样的开发目的,建立分支,修改代码。

    三、到单机上本身建立的分支上提交代码。

    四、在单机上合并分支。

    五、把服务器上最新的代码fetch下来,而后跟本身的主分支合并。

    六、生成补丁(patch),把补丁发送给主开发者。

    七、看主开发者的反馈,若是主开发者发现两个通常的开发者之间有冲突(他们之间能够合做解决的冲突),就要求他们先解决冲突,而后再由其中一我的提交。若是主开发者能够本身解决,或者没有冲突,就经过。

    八、通常开发者之间解决冲突的方法,开发者之间可使用pull命令解决冲突,解决完冲突后再向主开发者提交补丁。

六、优势:

    一、适合分布式开发,强调个体。

    二、公共服务器压力和数据量都不会太大。

    三、速度快,灵活。

    四、任意两个开发者之间能够很容易解决冲突。

    五、具备本地库,能够离线工做,而后再上传。

七、缺点:

    一、资料少。

    二、学习周期相对而言比较长。

    三、不符合常规思惟。

    四、代码保密性差,一旦开发者把整个库克隆下来就能够公布全部代码和版本信息。

相关文章
相关标签/搜索