Git和Svn的区别有哪些?

Posted FinTech技术创新

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git和Svn的区别有哪些?相关的知识,希望对你有一定的参考价值。

最近一直有人问我们Git和Svn的区别,为此我们进行了简单总结,同大家交流及分享。

Git和Svn最大的区别包含两方面

一是版本控制机制,Git是分布式的,Svn是集中式的。 

Git跟Svn一样有自己的集中式版本库和Server端,但Git更倾向于分布式开发,会在本地克隆(clone)完整的版本库,并在本地操作,即使没有网络也一样可以Commit、查看历史版本记录、创建项目分支等,等网络再次连接上Push到Server端。

二是分支创建及合并机制。Git是轻量级的,Svn比较重。在Git创建分支时会生成源文件的类似“指针”,并不是真正的文件,这样每个工作成员可任意在本地版本库开启多个分支,而不会影响其他人;而Svn的分支是一整个目录,拥有完整的实际文件,如果工作成员想要开启新的分支,那将会影响“全世界”,每一次修改也需要其他人重新切分支及下载。

了解如上两方面,那么就很容易理解如下五点不同

1. Git更适合持续集成、交付所需的版本管理模式,当上线功能发生变更时,可以快速、方便地进行分支筛选和合并,当然这也取决于任务拆解的合理度,而使用Svn一般需要进行拆代码等复杂工作。

2. Git把内容按元数据方式存储,而Svn是按文件。因为.git目录是克隆版的本地版本库,它拥有中心版本库上所有内容,例如标签、分支、版本记录等,并可在OffLine状态下可以看到所有的Log,而Svn不可以。

3.Git可以非常方便地对提交内容进行修改,比如,本地提交之后发现,某地方的标点符号忘记了,选择“修改上次提交”即可,而Svn的修改则要麻烦很多。

4. Git 克隆一个完整项目的速度非常快,Svn比较慢。我们以克隆一份拥有5个分支的完整项目以及版本库来说,Svn是同时复制5个版本的文件,也就是说重复5次同样的动作。而Git 只是获取文件的每个版本的元素,然后只载入主要的分支(master)。克隆一个拥有将近一万个提交(commit),5个分支,每个分支有大约1500个文件的 SVN,耗了将近一个小时!而Git只用了区区的1分钟。

5. Git 的内容完整性要优于Svn。因为Git 在commit(存储在本地)或者push(上传到远程仓库)之前,通过对文件的内容或目录的结构计算出一个 SHA-1哈希值,作为指纹字符串进行内容的校验,并将此结果作为数据的唯一标识和索引,在远程仓库接受到commit的文件之后,会再计算一遍哈希值然后跟传递过来的哈希值做比较,如果不一致,说明文件在传输时变得不完整,或者磁盘损坏导致文件数据损坏。另外在 Git 数据库中的东西都是用此哈希值来作索引,而不是靠文件名。

当然,相比Svn,Git也有如下缺点

1、 Git没有一个全局版本号,而Svn有。目前为止这是跟Svn相比Git缺少的最大的一个特征。

2、Git 没有严格的权限管理控制,一般通过系统设置文件读写权限的方式来做权限控制。

3、Git工作目录只能是整个项目。比如 checkout,建分支,都是基于整个项目的。而Svn 可以基于项目中的某一个目录

最后总结一下,工具只是手段,起决定和重要作用的还是人,没有最好的,只有最适合的工具,应按你的需要进行适当选型,并勇于优化和改变现有工作模式。好了,关于Git和Svn的不同就介绍在这里,如果你也有相关的想法和感悟,欢迎交流和投稿哈。




以上是关于Git和Svn的区别有哪些?的主要内容,如果未能解决你的问题,请参考以下文章

git和svn的区别

Git 与 SVN 区别

GIT和SVN的区别

Git和SVN的区别,哪个好?

Git和SVN之间的区别

GIT和SVN的区别(面试)