使用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):

http://www.kernel.org/pub/software/scm/git/docs/howto/separating-topic-branches.txt

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

SVN属于集中化的版本控制系统 这种做法带来了许多好处,特别是相较于老式的本地VCS来说。现在,每个人都可以一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限。

事分两面,有好有坏。这么做最显而易见的缺点是中央服务器的单点故障。若是宕机一小时,那么在这一小时内,谁都无法提交更新、还原、对比等,也就无法协同工作。如果中央服务器的磁盘发生故障,并且没做过备份或者备份得不够及时的话,还会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录,被客户端提取出来的某些快照数据除外,但这样的话依然是个问题,你不能保证所有的数据都已经有人提取出来。 Subversion原理上只关心文件内容的具体差异。每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容。

Subversion的特点概括起来主要由以下几条:

  1. 每个版本库有唯一的URL(官方地址),每个用户都从这个地址获取代码和数据;
  2. 获取代码的更新,也只能连接到这个唯一的版本库,同步以取得最新数据;
  3. 提交必须有网络连接(非本地版本库);
  4. 提交需要授权,如果没有写权限,提交会失败;
  5. 提交并非每次都能够成功。如果有其他人先于你提交,会提示“改动基于过时的版本,先更新再提交”… 诸如此类;
  6. 冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能遇到麻烦的冲突解决。

Git属于分布式的版本控制系统 自2005年诞生于以来,Git日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。它的速度飞快,极其适合管理大项目,它还有着令人难以置信的非线性分支管理系统,可以应付各种复杂的项目开发需求。 与SVN不同,Git记录版本历史只关心文件数据的整体是否发生变化。Git并不保存文件内容前后变化的差异数据。实际上,Git更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git不会再次保存,而只对上次保存的快照作一连接。

简略的说,Git具有以下特点:

  1. Git中每个克隆(clone)的版本库都是平等的。你可以从任何一个版本库的克隆来创建属于你自己的版本库,同时你的版本库也可以作为源提供给他人,只要你愿意。
  2. Git的每一次提取操作,实际上都是一次对代码仓库的完整备份。提交完全在本地完成,无须别人给你授权,你的版本库你作主,并且提交总是会成功。
  3. 甚至基于旧版本的改动也可以成功提交,提交会基于旧的版本创建一个新的分支。
  4. Git的提交不会被打断,直到你的工作完全满意了,PUSH给他人或者他人PULL你的版本库,合并会发生在PULL和PUSH过程中,不能自动解决的冲突会提示您手工完成。
  5. 冲突解决不再像是SVN一样的提交竞赛,而是在需要的时候才进行合并 和冲突解决。

总之,公司的开发团队在进行的项目开发管理时,svn是更好的选择,团队成员共同维护公司的中心版本。

若是开源项目,则git更加适合,每个人都可以维护自己专属的版本,同时有github开源社区支持。

转载于:https://www.cnblogs.com/common1140/p/3952948.html

[转]Git,SVN的优缺点及适合的范围,开源项目?公司项目?相关推荐

  1. svn merger的时候 报远程主机强迫_SVN与Git比较的优缺点差异

    一. 集中式vs分布式 1. Subversion属于集中式的版本控制系统集中式的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最 ...

  2. Git和SVN的优缺点/比较/区别

    SVN优缺点 优点: 1. 管理方便,逻辑明确,符合一般人思维习惯. 2. 易于管理,集中式服务器更能保证安全性. 3. 代码一致性非常高. 4. 适合开发人数不多的项目开发. 缺点: 1. 服务器压 ...

  3. Git 和 SVN 的优缺点?

    Git 和 SVN 的优缺点 Git的优点: ①适合分布式开发,强调个体: ②公共的服务器压力和数量都不会太大: ③速度快, 成熟的架构,开发灵活: ④任意两个开发者之间可以很容易的解决冲突: ⑤部署 ...

  4. git pull 覆盖本地_SVN与Git比较的优缺点差异

    一. 集中式vs分布式 1. Subversion属于集中式的版本控制系统 集中式的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出 ...

  5. git svn cygwin_exception

    git for windows 2.5 版本发布了,更新之后,使用git svn的时候,就出错 git svn rebase Or git svn dcommit After a update git ...

  6. ubuntu11.10+git+svn works

    icehong@icehong-ThinkPad-T410:~/git$ git svn --version git-svn version 1.7.9.2.358.g22243 (svn 1.8.0 ...

  7. git - svn 平滑到 git

    1. 建立自己的git仓库,需要是空git仓库 2. checkout 你的 git仓库 3. svn忽略.git文件,忽略.git  .gitignore 4. 把 .git文件拷到你的 svn仓库 ...

  8. Introduction of Version Control/Git, SVN

    Introduction of Version Control/Git, SVN 什么是版本控制? 你可以把一个版本控制系统(缩写VCS)理解为一个"数据库",在需要的时候,它可以 ...

  9. Android Studio SVN配置忽略文件 1.用Android Studio创建一个项目,会在根目录和Module目录下自动生成.gitignore文件,貌似是Git的配置文件,

    Android Studio SVN配置忽略文件 1.用Android Studio创建一个项目,会在根目录和Module目录下自动生成.gitignore文件,貌似是Git的配置文件,和SVN没有关 ...

最新文章

  1. Python ModuleNotFoundError: No module named ‘xlrd‘
  2. mysql group by 天_MySQL group by语句如何优化
  3. c#执行多句oracle,在Oracle命令C#中执行多次插入表命令
  4. IntelliJ IDEA2017 修改缓存文件的路径(转载:https://www.cnblogs.com/acm-bingzi/p/ideaCachePath.html)
  5. 调用WCF返回Josn的两种方式
  6. Magento重建所有索引方法
  7. android tv nugat,GitHub - GongXunYoung/Android-tv-widget: Android tv,盒子,投影仪 控件
  8. SpringBoot之Thymeleaf
  9. phpstudy运行PHP项目出现404怎么办?
  10. jdbc中mySQL语句单双引号_JDBC: 执行MySQL语句时,bit类型的数值在java代码中应该怎么表示?...
  11. win10双网卡冗余的几种方法
  12. 强大的PyTorch:10分钟让你了解深度学习领域新流行的框架
  13. 连续投影算法_腾讯优图 | 3D结构光摄像头深度算法综述
  14. ARM与x86–蝶变ARM
  15. Matlab数据拟合方法介绍
  16. PPT中插入矢量图(以及从visio直接复制变模糊的处理方法)
  17. mysql stmt fetch,mysql_stmt_fetch 奇怪的问题..
  18. C# Email发送邮件
  19. cairo填充_用 cairo 实现跨平台图形
  20. JS实现图片大小自适应且位置居中,防止图片变形

热门文章

  1. daily scrum 12.2
  2. 适合建索引?不适合建索引?分析
  3. python的顶级库_世界上最顶级的python库,NumpyPandas
  4. 服务器小白-MYSQL基础安装配置
  5. 美国Vitamix亮相2017上海AWE,绽放百年料理机品牌魅力
  6. 向Maven的本地库中添加jar文件
  7. 计算机网络机械特性是指,《计算机网络与通信》第1——3章 习题及思考题
  8. redis怎么开启_关于Redis数据库入门必备的学习点
  9. ubuntu上安装python3.7教程_ubuntu中安装Python3.7
  10. linux url解码,js对url进行编码和解码(三种方式区别)