您现在的位置是:首页 >学无止境 >Git&SVN区别及选型网站首页学无止境

Git&SVN区别及选型

空空dream 2024-06-17 10:19:00
简介Git&SVN区别及选型

1、结论先行

  • git更适用于纯代码仓库,优势在于分支管理
  • svn则擅长于文件管理,优势在于目录级权限控制

2、版本管理发展历程

3、Git&SVN为何而生

Git出生于2005年,是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
分布式版本控制系统

Subversionchus出生于2000年,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。

4、Git&SVN五大区别

  1. 连接:集中式与分布式
  2. 储存:文件与元数据
  3. 分支:简单分支与多分支
  4. 版本号:顺序编号与hash值
  5. 完整性:部分保存与全保存

4.1、区别一:GIT是支持分布式的,SVN不是


特点:Git中每一位用户都保存一份副本,包括历史记录
Git支持本地提交,svn必须连接服务器
Git支持用户间使用Patch 补丁包协作

  • 优点:两者之间版本控制方式不同,Git可以不断签出合并,可以无中心协作
  • 缺点:浪费资源(如二进制文件),Git无法做到像SVN的权限控制(细分到某文件夹)

4.2、区别二:GIT按元数据存储、SVN是按文件(重点)

  • Git:整体控制
  • SVN:文件控制

svn可以只签出一个文件,但Git一次签出就是整个仓库,如果项目很大,对个人pc要求会很高。Git不利于大文件的版本控制,比如上G的图纸。

Git每一次提交都以全部文件作为一个整体存为快照(id),而SVN则以改变过的文件为标记。

  • SVN使用数据库中revision字段记录文件更改次数(即每一次的修改记录)

SVN

  • Git将保存版本中所有文件的hash值作为一个版本id(回滚时也只需回滚到某id,所以服务器端回滚是很快的)

GIT
切换到分支版本时,svn需要将分支版本文件复制一遍,而Git只需要将仓库版本id复制一遍,所以Git的分支管理比svn六得多


4.3、区别三:GIT分支和SVN的分支不同

svn的分支仅仅是目录的一个版本复制,git则可以多重分支并行
Git分支仅仅是将head复制一份,而SVN则将所有文件复制一份

  • 优点:分支切换方便
  • 缺点:Git学习成本高(复杂),如merge和rebase

这是在代码管理上git比svn强大的原因

4.4、区别四:GIT没有一个全局的版本号,而SVN有

SVN提交的版本以顺序编号,git以hash值编号

Git 中每个克隆(clone)的版本库都是平等的。可以从任何一个版本库的克隆来创建属于自己的版本库,同时你的版本库也可以作为源提供给他人,只要你愿意。

Svn版本号只能增加

git可以任意切换

4.5、区别五:GIT的内容完整性要优于SVN

  1. GIT在内容存储时,同时储存了文件的hash值,一旦受到外部破坏,只要能匹配到hash值就能确定文件是否完整
  2. 深层,尚未理解

5、Git命令简介

  1. Workspace:工作区
  2. Index / Stage:暂存区
  3. Repository:仓库区(本地仓库)
  4. Remote:远程仓库

6、Git四种状态

  1. 未跟踪(Untracked):此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged
  2. 已提交(committed/ Unmodify):提交到本地仓库后的状态,切换分支时不会丢失
  3. 已修改(modified):修改中或修改后未做任何动作,分分钟会丢失
  4. 已暂存(staged):下一次commit会提交

7、Git缺点

1、 安全管理能力不足:SVN的安全控制和权限管理更好,git的分布式特性导致无法做到读控制,而对安全性要求较高的组织完全无法使用这种形式(硬用也可以,管理成本很高)
2、 学习成本高:git 有一定的学习成本,分布式的工作方式,需要转换思维方式,如签出某一文件夹,svn很容易而git较为复杂,而且pull的时候需要
3、 资源浪费:git适合文本存储(设计原意本是管理Linux代码),git因为都是镜像, 如果研发上传一个pcb图, 不相关的人员也要去下载, 很浪费流量和更新时间
4、 版本库只能做整体管理:每一次提交都包含所有文件(但如果仅作为查看使用,可以fetch部分)

8、Git应用场景

  1. 纯代码项目,多分支协作
  2. 小团队,权限不做特殊控制
  3. 可跟踪性要求不高

个人观点:Git、SVN无所谓优劣,适用场景不同而已,适合的才是最好的

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。