51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

SVN和Git的真相与误解

前言 {#前言}

网上有非常多的SVN和Git的比较,但是很多都是错误的,下面我们就来列举下那些常见的错误认识,以及svn和git的一些区别,他们有什么优缺点,以便让你更好的理解SVN和Git的当前真实情况,为你的团队挑选合适的工具。

Git仓库远比SVN仓库占用空间小 {#Git仓库远比SVN仓库占用空间小}

错误

SVN和Git的差异算法虽然有很多地方的不同,但是最终他们的数据存储都是相同的。最终的情况就是,同样的文件,它们两个存储所占用的空间大小非常相近。

但是当存储的文件大多是二进制文件时(例如,图片、安装包等)SVN存储所占用的空间反而会比Git的小很多,这是因为SVN所使用的差异算法能同时应用到二进制文件和文本文件中

我们测试了WordPress的开源代码,分别使用SVN和Git存储,最终SVN的占用空间是186MB,Git的是169MB,相差只有17MB,具体数据

创建分支在SVN中非常的重 {#创建分支在SVN中非常的重}

错误,已经是过时的

在很多人印象里,SVN创建分支就是多复制了一份代码,需要非常多的空间和时间。 事实上,从1.0版本(基本已经没人在用这么低的版本了),创建分支的算法已经改变了,分支变得非常的轻量。 即使是非常大的项目中,你也可以随时创建分支来修复一个bug或开发一个新的功能。

我们用 WordPress 的源码对SVN和Git创建分支进行了测试,SVN在创建分支后增长了1308字节的空间占用,Git增加了360字节的空间占用,创建时间上,SVN消耗了0.093秒,Git花费了0.031秒。详细信息

SVN每个目录都会有一个.svn的隐藏目录 {#SVN每个目录都会有一个-svn的隐藏目录}

错误,已经是过时的

从1.7版本(在2011年发布)之后,已经变成了只会在根目录下存在.svn目录

没人再使用SVN了 {#没人再使用SVN了}

错误

SVN还有非常多的公司和团队在用,OPPO、网易、Google等各类互联网大公司都在使用。因为SVN拥有Git无法替代的优势:文件级权限控制

对于公司和团队来说,代码的安全尤其重要,要针对不同职位的人员设置代码的可见范围,SVN的文件级权限控制完美的符合了公司的安全性要求,所以对于看重数据安全的公司来说,SVN是唯一的选择。

Git则是开源项目使用的更多,因为它在每个人的电脑上都存在一份完整的仓库代码,导致无法进行权限控制,也无法像SVN那样只检出部分目录的代码。

分布式的 Git 比集中式的 SVN 更优越 {#分布式的-Git-比集中式的-SVN-更优越}

错误,看情况而定

分布式只是实现版本控制的另外一种方法。集中式和分布式都有他们的优缺点,我们应该根据实际情况来判断使用哪个更好。

分布式的缺点:没有权限控制;每个人都需要完全 clone 整个仓库,没法像 SVN 可以只 checkout 需要的子目录;没法锁定文件等等问题

Git 更适合大项目 {#Git-更适合大项目}

错误,大项目Git需要分割成多个小的仓库

实际上Git并不适合用来存储大的项目,因为Git需要每个人都clone完整的仓库到自己电脑,2G的代码或许没什么问题,但是如果仓库到了10几G,几百G后,这会是一个非常大的问题。通常这就需要把一个大的仓库才分为多个小的仓库了。但是这就导致了其他几个问题:你需要管理多个仓库;破坏了原有项目的完整性;没法继续跟他们一起使用分支;

相反,SVN则没有仓库大小的限制和担心,因为我们可以按需只检出需要的目录。例如Apache的所有项目都是存储在一个仓库里,这完全没有问题。

更多阅读:Google为什么存储百万行代码在一个仓库中

Git 有灵活强大的命令行操作 {#Git-有灵活强大的命令行操作}

正确,但是对新人并不友好

Git的设计初衷就是一套低级版本控制系统,允许高级用户通过命令玩一些黑科技,但是这并不安全,对初学者也不友好。 Git 也因为没有良好的设计和混乱的命令受到了一些指责:这导致加长了学习曲线和大大增加了公司和团队的成本,特别是大型团队以及团队成员水平不一的情况。比如美术、策划、开发、这类人员,技术水平线不一。 学会Git可能需要一个月,而学会SVN可能只需要1个小时。

Git 对二进制文件存储不友好 {#Git-对二进制文件存储不友好}

正确

Git 因为分布式原因,无法很好的处理二进制文件,他是基于复制模式来管理的,所以并不适合有很多二进制文件的项目,比如图片多的项目。


赞(2)
未经允许不得转载:工具盒子 » SVN和Git的真相与误解