Git和SVN的对比

差异

安全性

SVN:较差,定期备份,并且是整个SVN都得备份。Git:较高,每个开发者的本地就是一套完整版本库,记录着版本库的所有信息。

 

权限管理

SVN:SVN的权限管理相当严格,可以按组、个人针对某个子目录的权限控制,每个目录下都会有个.SVN的隐藏文件。Git:Git没有严格的权限管理控制,只有账号角色划分。但Git可以通过分支合并时的审查策略来勉强绕过此问题。

 

仓储大小

SVN代码全记录在服务器中,Git每份仓库clone都拥有代码的全记录,意味着对于SVN而言,服务器的才是全的,你下载下来的可以小一点。而对于Git,你下下来的,和服务器上的是一样的。所以使用SVN,会减少各开发机的物理空间占用。不过这不一定意味着传输时间的减少,因为Git是自带压缩传输的,而SVN没有。

 

分支(branch)的使用范围不一样

Git中,你只能针对整个仓库作branch,而且一旦删除,便无法恢复。而SVN中,branch可以针对任何子目录,它本质上是一个拷贝操作。所以,可以建立非常多、层次性的branch,并且,在不需要时将其删除,而以后需要时只要checkout老的SVN版本就可以了。

 

局部更新,局部还原

SVN由于是在每个文件夹建立一个.svn文件夹来实现管理,所以可以很简单实现局部更新或者还原。假如你只希望更新某些部分,则SVN可以很好实现。同时代码写错了,同时可以很好实现局部还原,当然Git也可以通过历史版本还原,但是无法简单地实现局部还原。

 

对比可以看出:分布式版本管理仅仅是增加了本地库这个概念,其余的概念与集中管理并无区别。SVN在与服务器同步之前无法提交代码,因而本地修改更容易出问题。

 

SVN与Git的区别

  1. Git是分布式的,而SVN是集中式的;
  2. Git把内容按元数据方式存储,而SVN是按文件:因为Git目录是处于个人机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等;
  3. Git分支和SVN的分支不同:SVN会发生分支遗漏的情况,而Git可以同一个工作目录下快速的在几个分支间切换,很容易发现未被合并的分支,简单而快捷的合并这些文件;
  4. Git没有一个全局的版本号,而SVN有;
  5. Git的内容完整性要优于SVN:Git的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

 

SVN的优点

  1. 采用集中式,易于管理,保证安全性;
  2. 管理方便,逻辑明确,理念符合常规思维;
  3. 代码的一致性高;
  4. 适合人数不多的项目开发;
  5. 允许一个文件有任意多的可命名属性,会关注所有的文件类型;
  6. 支持二进制文件,更容易处理大文件;
  7. 支持空目录。

 

SVN的缺点

  1. 服务器压力太大,数据库容量暴增;
  2. 必须连接在服务器上(时刻都得联网操作),否则基本不能工作、提交、对比、还原等;
  3. 不适合开源开发。

 

Git的优点

  1. 适合分布式开发,强调个体;
  2. 公共的服务器压力和数量都不会太大;
  3. 速度快,成熟的架构,开发灵活;
  4. 任意两个开发者之间可以很容易的解决冲突;
  5. 离线工作,管理代码成本低,不需要依赖服务器;
  6. 部署方便,基本上下个命令就可以用;
  7. 良好的分支机制,可以让主干代码保持干净。

 

Git的缺点

  1. 学习成本比较大,学习周期比较长,要求人员素质比较高;
  2. 不符合常规思维;
  3. 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

扫码关注公众号,查看更多精彩内容

posted @ 2024-03-25 19:06  不是公子的小白  阅读(14)  评论(0编辑  收藏  举报