您现在的位置是:首页 >学无止境 >Git&SVN区别及选型网站首页学无止境
Git&SVN区别及选型
1、结论先行
- git更适用于纯代码仓库,优势在于分支管理
- svn则擅长于文件管理,优势在于目录级权限控制
2、版本管理发展历程
3、Git&SVN为何而生
Git出生于2005年,是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
分布式版本控制系统Subversionchus出生于2000年,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。
4、Git&SVN五大区别
- 连接:集中式与分布式
- 储存:文件与元数据
- 分支:简单分支与多分支
- 版本号:顺序编号与hash值
- 完整性:部分保存与全保存
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字段记录文件更改次数(即每一次的修改记录)
- Git将保存版本中所有文件的hash值作为一个版本id(回滚时也只需回滚到某id,所以服务器端回滚是很快的)
切换到分支版本时,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
- GIT在内容存储时,同时储存了文件的hash值,一旦受到外部破坏,只要能匹配到hash值就能确定文件是否完整
- …
- 深层,尚未理解
5、Git命令简介
- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(本地仓库)
- Remote:远程仓库
6、Git四种状态
- 未跟踪(Untracked):此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged
- 已提交(committed/ Unmodify):提交到本地仓库后的状态,切换分支时不会丢失
- 已修改(modified):修改中或修改后未做任何动作,分分钟会丢失
- 已暂存(staged):下一次commit会提交
7、Git缺点
1、 安全管理能力不足:SVN的安全控制和权限管理更好,git的分布式特性导致无法做到读控制,而对安全性要求较高的组织完全无法使用这种形式(硬用也可以,管理成本很高)
2、 学习成本高:git 有一定的学习成本,分布式的工作方式,需要转换思维方式,如签出某一文件夹,svn很容易而git较为复杂,而且pull的时候需要
3、 资源浪费:git适合文本存储(设计原意本是管理Linux代码),git因为都是镜像, 如果研发上传一个pcb图, 不相关的人员也要去下载, 很浪费流量和更新时间
4、 版本库只能做整体管理:每一次提交都包含所有文件(但如果仅作为查看使用,可以fetch部分)
8、Git应用场景
- 纯代码项目,多分支协作
- 小团队,权限不做特殊控制
- 可跟踪性要求不高
个人观点:Git、SVN无所谓优劣,适用场景不同而已,适合的才是最好的