svn作为一个优秀源码版本的管理工具,可以适合绝大多数项目。但是因为它的采用中心化管理,不可避免的存在本地代码的备份和版本管理问题。也就是说对于尚未或暂无法提交到Subversion服务器的本地代码来说,存在着被误删除和版本更新无法回退两大情形。

git作为一个分布式版本管理工具,可以很好的解决这个问题。因为它的大多数操作是在本地进行的。这里要说的是git是如何做到既可以管理好本地代码又可以与已有的SVN中心库进行同步的。支持去中心化,是Git与生俱来的特性,它在本地保留了从中心服务器clone出来的源码库的全部信息,这样,你在本地修改完代码后便可以直接提交到本地 的代码版本库中。本地代码的备份和版本管理的问题就这样被Git轻而一举的就解决了。而本地源码库与SVN中心源码库的同步操作则是由Git提供的 git-svn工具来完成的。

但Git无法完全取代SVN,很多非纯技术开发公司更倾向于svn:
1.服务器公司统一控制管理
2.安全机制, 不会每个人都拷贝一份, 可以对组员限制, 也可以分配不同组
3.团队合作开发起来传递的数据量不会过大, git因为都是镜像, 如果有个美工传个500mb的psd, 不相关的人员也要去下载, 很浪费流量和更新时间
4.subversion感觉搭建非常简单支持https, 可以外部网络访问, 可以让员工在家办公, 也不用担心传递数据的流量(好邪恶)
5.每个人的电脑大小不一定能装下特别大的项目, 对于svn来讲, 公司配备一个足够大的服务器硬盘就好了, 而且哪个项目完成, 直接删掉本地目录就好, 完全没有保留的必要
6.网游公司, 广告公司这些需要大量媒体设计混合到程序的项目中, 很需要svn这样的服务器.
7.svn相对于git分支确实弱爆了, 但是并不能通过鄙视svn就能把所有人的习惯改过来.

git在这方面来讲更倾向于开源和纯代码开发。

两者设计上的几点不同:
1. svn基于revision,也就是delta,git基于状态,每个commit保存了完整的工作区目录;
2. svn在单分支上是一条revision的时间线,git则是由commits组成的DAG;
3. branch的设计,svn是revision-on-write, git是在DAG上加一个引用。也就是svn的分支从创建时刻起到合并之日前就是一条独立的时间线。而git的分支则是在分分合合的时间线上打的一个个引用;
4. 基于前几点,git得以轻松设计成分布式VCS:远程的服务器的上的内容仅仅是另一个分支而已;

git优势:
1. 分布式 去中心化使得更大的团队的维护变得容易。代码管理不再是分支和commit流程的管理,而是git网络拓扑的管理。谁负责向最终仓库merge,谁再外围负责接受其他用户的pull request。而不管你是否处在管理的核心,你都有权检出和修改整个项目的代码;
2. 分支合并的方便和速度提升。基于revision的版本控制有一个弱点,就是在和合并时要将直至公共祖先前的所有revisions用复杂的算法重演才能完成合并的过程。而基于状态的git在合并时,只需要在公共祖先,两个分支的最新commit间发起一个3-way merge就可以了。因此git的合并速度出奇的快。也因为如此分支创建无以伦比的简单;
3. 微commit和微branch。git可以任意的commit和branch使得VCS对代码的控制可以达到非常细的粒度。每一个小的修改都可以立即commit,每一个小功能/fix都可以branch。这使得测试一个小修改该和drop一个小功能都非常的容易。甚至你可以随便将另外一个分支的某个commit直接打过来用在当前分支上(cherry-pick)。使得用户面临频繁的需求变动也可以轻松的管理代码。

git缺点:
1.目录级别的访问控制,让有的成员只能访问某一目录(通常是模块);
2.直观的版本号;
3.部分检出一个目录,通常是一个模块/分支;

最后附上 TortoiseSVN对比doc、excel文件比较工具设置方法:

2015第28周六SVN和Git相关推荐

  1. SVN、Git和Perforce(P4D)的故事

    版本管理系统的优劣我不想展开了,大家搜索一下就能看到大量这方面的权威讨论和对比,我只想以我的亲身经历,站在系统管理员和一线用户的角度描述一下Git.SVN.P4D这三者对于我们日常研发效率提升的真实感 ...

  2. 命令行操作svn和git和git

    前几天在写代码的时候电脑突然坏掉,老大交代的任务没完成,非常痛恨自己用svn或者git保存代码,相信很多程序员遇到过,硬盘坏掉,存在硬盘中的代码丢失,无法找回的问题,svn和git可谓程序员界的福音, ...

  3. Contest2071 - 湖南多校对抗赛(2015.03.28)

    Contest2071 - 湖南多校对抗赛(2015.03.28) 本次比赛试题由湖南大学ACM校队原创 http://acm.csu.edu.cn/OnlineJudge/contest.php?c ...

  4. SVN和Git 介绍,区别,优缺点以及适用范围

    SVN: SVN是Subversion的简称,是一个开放源代码的版本控制系统,支持大多数常见的操作系统.作为一个开源的版本控制系统,Subversion管理着随时间改变的数据.这些数据放置在一个中央资 ...

  5. 【转】SVN 与 GIT 详细对比

    [转]SVN 与 GIT 详细对比 git和svn的详细对比 近期就[版本管理工具是否进行切换SVN->Git]的问题进行了讨论,于是对svn和Git进行了相关研究,进而梳理出Git的特点(优. ...

  6. Linux 下禅道和 SVN、GIT 集成插件发布

    Linux 下 SVN.GIT 可以和禅道集成了.在版本库中提交代码就可以自动更新关联禅道的任务和Bug.感谢网友张彪的开发. 一.下载地址 1.源代码:https://github.com/easy ...

  7. linux svn权限如何打开文件,如何让 SVN 或者 GIT 保留 Linux 文件权限

    想问一下各位是怎么让 SVN 或者 GIT 保留 Linux 文件权限的. 背景: 十一期间帮朋友解决一个问题,他们的知识库是用 WordPress 搭建的(which is a stupid cho ...

  8. Git迁移 从SVN到Git

    Migrating from SVN to Git 首先我们需要在Stach或者GitHub上新建一个Repository, 拿到它的URL. 接下来参照如下步骤 : At first we shou ...

  9. 如果从SVN到GIT

    本来是题目是从SVN到GIT,但是现在还并没有真正开始做,因为最近工作比较忙. 今天写一下这一段时间对GIT的学习的一些大概的情况的了解和分析. 其实确切地说,并不是从SVN迁移到GIT,因为我并不是 ...

最新文章

  1. 特斯拉致命车祸最新调查结果发布
  2. 实现基于Spring框架应用的权限控制系统(转)
  3. Azure底层架构的初步分析
  4. Codeforces Round #477 (rated, Div. 2, based on VK Cup 2018 Round 3)
  5. c++ shared_ptr的使用
  6. map的生命周期 java,【JAVA面试的艺术】JAVA基础知识阶段三
  7. 环的寻找:寻找无向图中所有存在的环-删除点法
  8. firefox火狐浏览器怎么清除缓存 火狐浏览器清理cookie教程
  9. docker 监控容器的cpu、内存、网络、io情况
  10. css vue 内联_Vue学习之路第十二篇:为页面元素设置内联样式
  11. 点击查看详情显示更多布局
  12. 一对一关系,一对多关系,多对多关系的简单理解
  13. 帝国cms后台界面修改方法 最新版教程
  14. 计算机和人脑在线阅读,人脑与电脑课件.ppt
  15. 网站服务器必备,各种服务器基本必备插件[小白腐竹必看~]
  16. Unity 3D 菜单栏快捷键详解
  17. elementui的el-autocomplete远程搜索组件如何回显结果
  18. 【第181期】恭喜KKasier入职游戏策划:主策和制作人有啥区别
  19. 【Linux】限制进程的CPU使用率
  20. 特种光纤丨光谱分析仪用光纤

热门文章

  1. 一篇不错的讲解Java异常的文章
  2. 【C/C++】拷贝构造函数 赋值运算符的重载
  3. 爬取 wallhaven图片到本地壁纸库
  4. 【转】iphone开发中NSMutableAttributedString/NSAttributedString 富文本设置
  5. operator() error
  6. C++程序的构成和书写形式
  7. [新地址]VS2010详细下载地址!Yeah~!
  8. 842. 将数组拆分成斐波那契序列
  9. ubuntu上安装python3.7教程_ubuntu中安装Python3.7
  10. java 正则判断二进制_用正则表达式判断一个二进制数是否能被3整除