zoukankan      html  css  js  c++  java
  • SVN和Git区别

    SVN和Git的区别

    SVN和Git都是比较常用和熟悉的版本控制器,各自有着自己的优势和实用场景,今天就着两种版本控制器来说说。

    SVN:

    SVN是Subversion的简称,是一个开放源代码的集中式版本控制系统,支持大多数常见的操作系统。比Git早些出来,目前来说,大多是开发人员都是比较熟悉这款工具的。TortoiseSVN这款辅助软件相信很多人都用过。

    工作流程

    集中式管理的工作流程如下图:

    Git:

    是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git是为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。是一款比较进阶的代码控制器。

    工作流程

    下图是经典的git开发过程。

    SVN的特点:SVN对中文支持好,操作简单,使用没有难度,美工人员,产品人员,测试人员,实施人员都可轻松上手。使用界面统一,功能完善,操作方便。

    (1)SVN的部署比较方便,拥有一个服务器主仓库,开发人员都相当于是客户端,设计理念上比较简洁,容易让人理解和接受,适合中小型代码项目。

    (2)使用的时候,首先开发人员都需要从预先的url仓库获取代码到本地,然后大家集中向url仓库提交代码。最终的版本就是这个仓库。

    (3)提交代码的时候先建议update,否则可能多个开发人员对同一个文件提交引起代码冲突。

    (4)如果中央服务器宕机,开发人员将不能及时进行代码提交,如果中央服务器瘫痪可能导致数据和日志丢失。


    Git的特点:对程序源代码进行差异化的版本管理,代码库占极少的空间。易于代码的分支化管理。不支持中文,图形界面支持差,使用难度大。不易推广。

    (1)Git设计的原理比SVN要复杂一些,开发人员学习和理解的成本略高,它不是一个集中式的管理方式,引入了分布、分支等多个概念。

    (2)分布式也就是说当从服务器检索好代码到本地的时候,本地会自动创建一个仓库,本地的仓库和服务器的仓库的地位是一样的。

    (3)提交代码的时候一般是先提交(commit)到本地仓库,然后在push到服务器仓库进行合并(merge)。

    (4)当没有网络的环境下,依然可以方便本地仓库的提交代码和查看代码的历史日志。服务器就算宕机和故障,代码恢复也是轻而易举。

    (5)可以在本地灵活创建分支,然后提交到服务器上,多个分支来进行版本分化。


    两种版本控制器的选择:

    其实无论是哪一种版本控制器,都能够满足基本的协同需求,首先是看团队成员对版本的熟悉程度来选择。其次建议代码量过大的程序还是使用Git安全性比较高,同时一般情况下,两种版本控制器都会用,SVN一般用来管理项目,放设计图,各种文档和资料,这种东西没有必要弄得那么麻烦,而且本来就是需要大家共享且改动不大,其次Git专门用来管理代码。

    适用范围

    1)适用对象不同。Git适用于参与开源项目的开发者。他们由于水平高,更在乎的是效率而不是易用性。SVN则不同,它适合普通的公司开发团队。使用起来更加容易。

    2)使用的场合不同。Git适用于通过Internet,有多个开发角色的单个项目开发,SVN适合企业内部由项目经理统一协调的多个并行项目的开发。

    3)权限管理策略不同。Git没有严格的权限管理控制,只要有帐号,就可以导出、导入代码,甚至执行回退操作。SVN则有严格的权限管理,可以按组、按个人进行针对某个子目录的权限控制。区分读、写权限。更严格的,不支持回退操作。保证代码永远可以追踪。

    4)分支(branch)的使用范围不一样。Git中,你只能针对整个仓库作branch,而且一旦删除,便无法恢复。而SVN中,branch可以针对任何子目录,它本质上是一个拷贝操作。所以,可以建立非常多、层次性的branch,并且,在不需要时将其删除,而以后需要时只要checkout老的SVN版本就可以了。

    5)基于第三点,Git适用于单纯的软件项目,典型的就是一些开源项目,比如Linux内核、busybox等。相反,SVN擅长多项目管理。比如,你可以在一个SVN仓库中存放一个手机项目的bsp/设计文档/文件系统/应用程序/自动化编译脚本,或者在一个SVN中存放5款手机项目的文件系统。git中必须建立n(项目数)*m(组件数)个仓库。SVN中只需要最多n或者m个就可以了。

    6)Git使用128位ID作为版本号,而且checkout时要注明是哪个branch,而SVN使用一个递增的序列号作为全局唯一的版本号,更加简明易懂。虽然可以使用gittag来建立一些文字化的别名,但是毕竟那只是针对特殊版本。

    7)可跟踪性,git的典型开发过程为:建立分支,进行开发,提交到本地master,删除分支。这样做的后果是以前的修改细节会丢失。而在SVN下做同样的事情,不会丢失任何细节。这里是一个有趣的链接,表明了git下典型的工作方式:(以master为核心,不断创建新branch,删除旧branch):

    8)局部更新,局部还原。SVN由于是在每个文件夹建立一个.svn文件夹来实现管理,所以可以很简单实现局部更新或者还原。假如你只希望更新某些部分,则svn可以很好实现。同时代码写错了,同时可以很好实现局部还原,当然git也可以通过历史版本还原,但是无法简单地实现局部还原。

  • 相关阅读:
    【TypeScript】TypeScript中的数据类型
    正则表达式
    约束和异常处理
    面向对象-成员
    初识面向对象
    内置函数二
    生成器和生成器表达式
    函数名的运用
    函数
    文件操作
  • 原文地址:https://www.cnblogs.com/hua-nuo/p/12858494.html
Copyright © 2011-2022 走看看