Git和SVN的区别?

十年热恋 提交于 2020-02-02 00:26:11

a、存储方式不一样
  Git按照元数据的方式将文件的一个版本存入了一个类似与K/V数据库,而SVN是按照文件的方式进行一个存储。Git的内部有一个类似于K/V的数据库,我把他理解为是一个Map<K,V>,我们将内容存储到Git的数据库内后,Git会返回一个Key给我们,这个Key是唯一的(把一模一样的内容上传进去,这个key也是唯一的)。演示如下:
  1、使用git init demo命令创建一个Git仓库;
  2、使用cd demo进入demo这个Git仓库下;

 

 

  3、使用echo 'this is demo' >> demo.txt命令创建一个demo.txt文件,并在文件内写入this is demo;使用ls命令查看是否有demo.txt这个文件;使用vim demo.txt查看demo.txt文件内是否为’this is demo’;

 

 

 

 


  4、使用git hash-object -w demo.txt命令将demo.txt文件里面的内容存储进Git的数据库中,其中第二个红色框框的内的值"25b3c07137f646bf05bdd00c42d2a4c5bc831bb7"就是Git的数据库返回给我们的K;

 

 

  5、可以通过git cat-file -p 25b3c07137f646bf05bdd00c42d2a4c5bc831bb7命令去将值取出来;

 

 

  6、再使用命令创建一个demo1.txt文件,里面同样放进去的是"this is demo"看看他们的K是否一样;

 

 

  这就是Git存储数据的方式了,SVN不同,SVN存储数据的方式其实就是把文件复制一份进行存储。
 b、使用方式不一样
  从本地把文件推送到远程服务,SVN只需要commit而Git需要add、commit、push三个步骤。
  使用SVN开发者只要把文件修改了,只要commit其他开发人员就可以直接checkout下来。如下图所示:

 

 

  但是Git就不相同了,Git如果要从本地将修改后的文件提交进入远程仓库再从远程仓库将其他开发者修改后的文件checkout下来需要以下几个步骤:
    1、首先把修改后的文件通过add添加到我们的暂存区;
    2、然后通过commit命令将暂存区的文件提交到本地仓库;
    3、最后通过push命令将本地仓库的文件存入到远程仓库;
    4、要通过clone命令将远程仓库的文件拉到本地仓库;
    5、最后通过checkout将本地仓库的内容取出来;
  Git使用过程如下图所示:

 

 

 c、管理模式不一样
  Git是一个分布式的管理系统,而SVN是远程集中式的管理系统。
  如果说SVN的远程仓库挂掉了,那我的本地项目再也不能做提交,也不能做分支的切换,也不能够干和版本管理相关的任何事情,这就是集中式管理的缺陷了。集中式管理方式如下图所示:

 

 

  在项目内有一个Git仓库,也就是说在本地一个项目包含一个完整Git仓库,Git仓库是在项目内的,远程仓库能干的事情本地的Git仓库也能干。本地仓库和远程仓库通过四种主要传输协议相关联(本地协议、Http协议、SSH协议、Git协议)。Git还支持远程仓库里面的多个远程仓库。

 

 

————————————————
版权声明:本文为CSDN博主「我的茶馆」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/unclemovebrick/article/details/83213065

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!