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的功能和区别,尚学堂SVN和Git学习视频资料免费下载

    对于软件开发人员来说,版本控制系统再熟悉不过了,所谓版本控制系统就是软件项目开发过程中用于储存开发人员所写代码所有修订版本的软件.目前常见的版本控制系统分为集中式版本控制系统(SVN)和分布式版本控制 ...

  2. MacOS下SVN迁移Git踩坑记

    1. First Blood 之前在Windows环境下进行svn到git的迁移是很简单的,(参考官方文档:https://git-scm.com/book/zh/v1/Git-%E4%B8%8E%E ...

  3. CVS、SVN、Git、GitHub :版本控制系统

    1 1 1 Git常用命令 1 1 1 1 1 1 https://www.codecademy.com/learn/learn-git Learn Git You have now been int ...

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

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

  5. Svn与Git的一些区别(转载)

    把第一条理解到位思想到位了做起来才会有的放矢,其他几条都是用的时候才能体会到 1) 最核心的区别Git是分布式的,而Svn不是分布的.能理解这点,上手会很容易,声明一点Git并不是目前唯一的分布式版本 ...

  6. SVN和git的使用(附github的简单玩法)

    今天简单的总结了下SVN和git的使用,也尝试了下github,应该好好提高下自己的英文水平了,梦想有一天不再使用任何翻译软件. [svn]:集中式的代码管理工具(版本控制工具--版本记录) 1> ...

  7. iOS开发——开发实战篇&版本控制SVN和Git使用详解

     版本控制SVN和Git使用详解     公司的实际开发中,在天朝使用较多的还是SVN,因为SVN是集中式的,在天朝上班你们都懂的!     -----------------svn--------- ...

  8. svn vs git

    SVN和Git比较,哪个好用,适用? GIT和SVN之间的五个基本区别 话说Git的区别

  9. iOS 学习笔记 六 (2015.03.28)常见错误

    2015.03.28 1. property's synthesized getter follows Cocoa naming convention for returning 'owned' ob ...

随机推荐

  1. Robotium -- 针对apk包的测试

    在使用Robotium测试的时候,有时候,测试人员并没有代码权限,而Robotium也可以在只有apk文件进行测试,下面就介绍一下这个过程. 1.设置环境变量 安装jdk环境和sdk环境 2.安装签名 ...

  2. mysql 修复表和优化表

    REPAIR TABLE `table_name` 修复表 OPTIMIZE TABLE `table_name` 优化表

  3. [转] linux 信号量之SIGNAL

    我们可以使用kill -l查看所有的信号量解释,但是没有看到SIGNAL 0的解释. [root@testdb~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) ...

  4. [转] gdb中忽略信号处理

    信号(Signals) 信号是一种软中断,是一种处理异步事件的方法.一般来说,操作系统都支持许多信号.尤其是UNIX,比较重要应用程序一般都会处理信号.UNIX定义了许 多信号,比如SIGINT表示中 ...

  5. C# 在右下角弹出窗口

    窗口代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Da ...

  6. Oracle 空间管理

    表空间:组数据文件的一种途径 分类: 目录表空间(sysaux) 常表空间(system) 系统临时表空间(temp) 用户临时表空间(user) undo表空间 创建表空间: //表空间名为name ...

  7. ASP.Net中的编码与解码

    当javascript传递的参数中有中文时,服务端获得的将是乱码,此时需要用到编码和解码 javascript中编码与解码的三种方法 escape方法返回一个可在所有计算机上读取的编码 String ...

  8. 修复 status 为 unusable 的 index

    以DBA权限登陆,执行以下脚本即可. declare     -- 指向所有 UNUSABLE 状态的 index 的游标      cursor c is        select index_n ...

  9. SQL Server自定义函数( 转载于51CTO )

    用户自定义函数自定义函数不能执行一系列改变数据库状态的操作,可以像系统函数在查询或存储过程等的程序中使用,也可以像相信过程一样能过 execute 命令来执行.自定义函数中存储了一个 Transact ...

  10. oracle 使用 ALTER 操作列

    使用 ALTER TABLE 语句追加, 修改, 或删除列的语法