Git学习(完)

Git快速入门(02)Git体系概述

2019-06-09  本文已影响11人  郭艺宾

Git概述

Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

目前在互联网公司中,版本控制工具是必不可少的协作工具,用的最多的可能就是SVN,GIt,CVS等几个。前几年SVN是大头,现在差不多SVN和GIt都占很重的分量。CVS可能在C#开发的时候用的多些。

Git和SVN的区别:

1.  存储方式不一样

2.  使用方式不一样

3.  管理模式不一样



Git和SVN存储方式的区别

GIT把内容按元数据方式存储,文件每个版本的变化存储在类似k/v的文件数据库中,可以理解为类似Map的数据结构,每次把内容(value)放到数据库中,会返回一个唯一的key,是根据内容来的,如果插入重复的内容,返回的key也是一样的,而SVN是按原文件方式存储(新版svn已改成元数据存储)

关于上面的元数据,我们来看一个例子(此处用到的命令后面会详细说),我们先来创建并进入一个Git仓库:

创建一个文件demo.txt,并写入内容 demo text:

大家知道,git新增和提交文件的时候,是添加(add),提交(commit),那么它实际执行的操作是什么呢?它实际上是把数据存储到了一个类似hash的数据库里面,它实际执行了下面这样一个命令:

存储使用的命令是:

git   hash-object  -w  文件名

返回的是一个key。上面说了git是把内容以元数据的方式存储在类似key-value数据库中,执行存储命令返回的就是key,那么通过上面的key我们也能查到存储的内容(value):

查询使用的命令是 :

git  cat-file  -p  [key]

那么我们修改一下文件内容,会有什么变化呢?看一下:

可以看到,返回的key发生了变化,key存储的 内容也发生了变化,大家可以想象如果进行回滚操作只要改变指向的key就可以了,非常快速。这种就是按照元数据的方式进行存储。存储的也只是文件每个版本里面变化的内容,而不是文件本身。

而svn是每个版本都会拷贝保存一份文件,比如三个版本会分别存储为demo.txt.version1,demo.txt.version2,demo.txt.version3,回滚的时候直接把文件拷贝回来,可以想象大文件回滚的速度,相信用过svn的都有感受。

关于元数据好处,不止这个,下面分析原理的时候再详细说。

Git和SVN使用方式的区别

从本地把文件推送远程服务,SVN只需要commint(当然提交前要先更新),使用比较简单,拉取代码只需要checkout,就能从远程仓库把内容拉取下来。 而GIT就完全不一样了,提交到远程仓库需要 add(添加到暂存区)、commint(提交到本地仓库)、push(推送到远程仓库) 三个步骤,拉取远程代码需要clone(克隆)和checkout(切换分支)操作,并且GIt作为分布式版本控制,还有很多使用方式是svn不具备的(git比svn麻烦多了,但是依然推荐git,这是版本管理发展的一个趋势)。

svn使用过程(下载和上传只有一步):

git使用过程(有很多步):

Git和SVN管理模式不一样

git 是一个分布式的版本管理系统,而要SVN是一个单体式远程集中式的管理系统(现在说起单体式感觉就是比不过分布式,不过实际上git确实比svn要优秀,能更好的适应各种规模的项目)。

集中式管理,当远程挂掉的时候,本地就彻底与仓库断开了,无法做一些提交,切换分支,以及和版本管理相关的其它操作,整个仓库就挂掉了。这也是集中式版本管理的一个缺陷。

分布式管理,与集中式在管理上完全不同,git也比svn要复杂很多。远程git仓库和每个本地开发的电脑上的项目中都有一份完整的仓库。远程仓库能做的事情,本地仓库同样能做。比如代码提交,版本回滚,分支的一些操作,标签的一些操作,等等。挂掉一个不影响,哪怕是挂掉了远程中央git仓库,也不影响本地开发,照样可以先提交到本地,等从新连接上远程后再推送。

git主要有四种传输协议,来支持与远程仓库进行连接,有本地协议,git协议,http协议(包含亚协议),ssh协议这几个,后面会非常详细的介绍四种协议。本地仓库只要网络正常就可以通过其中一种协议直接与远程仓库进行连接,同步代码,其它项目提交的代码也可以连接到仓库推送过来,进行交互。

而且git支持多个远程仓库,这也是与svn的一个很大的不同。比如像Linux系统开发这种全世界级别的大型项目,每个国家都有各自的代码仓库,当其中一个提交再进行同步的时候,就需要把代码连接到多个仓库推送,这种情况就充分体现了git在大型项目中的优势。多个仓库在代码备份中也可以用到,如下图:

通过管理上可以看出,在管理小项目上,git和svn优势不明显,但是可以想象在管理大项目的时候,git具备很大的优势。

我们的交流基地,“JAVA互联网技术交流:789650498”欢迎小伙伴们一起来交流:

上一篇 下一篇

猜你喜欢

热点阅读