SVN和Git的真相与误解
前言
网上有非常多的SVN和Git的比较,但是很多都是错误的,下面我们就来列举下那些常见的错误认识,以及svn和git的一些区别,他们有什么优缺点,以便让你更好的理解SVN和Git的当前真实情况,为你的团队挑选合适的工具。
Git仓库远比SVN仓库占用空间小
错误
SVN和Git的差异算法虽然有很多地方的不同,但是最终他们的数据存储都是相同的。最终的情况就是,同样的文件,它们两个存储所占用的空间大小非常相近。
但是当存储的文件大多是二进制文件时(例如,图片、安装包等)SVN存储所占用的空间反而会比Git的小很多,这是因为SVN所使用的差异算法能同时应用到二进制文件和文本文件中
我们测试了WordPress的开源代码,分别使用SVN和Git存储,最终SVN的占用空间是186MB,Git的是169MB,相差只有17MB,具体数据
创建分支在SVN中非常的重
错误,已经是过时的
在很多人印象里,SVN创建分支就是多复制了一份代码,需要非常多的空间和时间。 事实上,从1.0版本(基本已经没人在用这么低的版本了),创建分支的算法已经改变了,分支变得非常的轻量。 即使是非常大的项目中,你也可以随时创建分支来修复一个bug或开发一个新的功能。
我们用 WordPress 的源码对SVN和Git创建分支进行了测试,SVN在创建分支后增长了1308字节的空间占用,Git增加了360字节的空间占用,创建时间上,SVN消耗了0.093秒,Git花费了0.031秒。详细信息
SVN每个目录都会有一个.svn的隐藏目录
错误,已经是过时的
从1.7版本(在2011年发布)之后,已经变成了只会在根目录下存在.svn目录
没人再使用SVN了
错误
SVN还有非常多的公司和团队在用,OPPO、网易、Google等各类互联网大公司都在使用。因为SVN拥有Git无法替代的优势:文件级权限控制
对于公司和团队来说,代码的安全尤其重要,要针对不同职位的人员设置代码的可见范围,SVN的文件级权限控制完美的符合了公司的安全性要求,所以对于看重数据安全的公司来说,SVN是唯一的选择。
Git则是开源项目使用的更多,因为它在每个人的电脑上都存在一份完整的仓库代码,导致无法进行权限控制,也无法像SVN那样只检出部分目录的代码。
分布式的 Git 比集中式的 SVN 更优越
错误,看情况而定
分布式只是实现版本控制的另外一种方法。集中式和分布式都有他们的优缺点,我们应该根据实际情况来判断使用哪个更好。
分布式的缺点:没有权限控制;每个人都需要完全 clone 整个仓库,没法像 SVN 可以只 checkout 需要的子目录;没法锁定文件等等问题
Git 更适合大项目
错误,大项目Git需要分割成多个小的仓库
实际上Git并不适合用来存储大的项目,因为Git需要每个人都clone完整的仓库到自己电脑,2G的代码或许没什么问题,但是如果仓库到了10几G,几百G后,这会是一个非常大的问题。通常这就需要把一个大的仓库才分为多个小的仓库了。但是这就导致了其他几个问题:你需要管理多个仓库;破坏了原有项目的完整性;没法继续跟他们一起使用分支;
相反,SVN则没有仓库大小的限制和担心,因为我们可以按需只检出需要的目录。例如Apache的所有项目都是存储在一个仓库里,这完全没有问题。
Git 有灵活强大的命令行操作
正确,但是对新人并不友好
Git的设计初衷就是一套低级版本控制系统,允许高级用户通过命令玩一些黑科技,但是这并不安全,对初学者也不友好。 Git 也因为没有良好的设计和混乱的命令受到了一些指责:这导致加长了学习曲线和大大增加了公司和团队的成本,特别是大型团队以及团队成员水平不一的情况。比如美术、策划、开发、这类人员,技术水平线不一。 学会Git可能需要一个月,而学会SVN可能只需要1个小时。
Git 对二进制文件存储不友好
正确
Git 因为分布式原因,无法很好的处理二进制文件,他是基于复制模式来管理的,所以并不适合有很多二进制文件的项目,比如图片多的项目。