版本控制:集中式(SVN) vs 分布式(GIT)

Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢?

先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

central-repo

集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。

那分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

distributed-repo

当然,Git的优势不单是不必联网这么简单,后面我们还会看到Git极其强大的分支管理,把SVN等远远抛在了后面。

CVS作为最早的开源而且免费的集中式版本控制系统,直到现在还有不少人在用。由于CVS自身设计的问题,会造成提交文件不完整,版本库莫名其妙损坏的情况。同样是开源而且免费的SVN修正了CVS的一些稳定性问题,是目前用得最多的集中式版本库控制系统。

除了免费的外,还有收费的集中式版本控制系统,比如IBM的ClearCase(以前是Rational公司的,被IBM收购了),特点是安装比Windows还大,运行比蜗牛还慢,能用ClearCase的一般是世界500强,他们有个共同的特点是财大气粗,或者人傻钱多。

微软自己也有一个集中式版本控制系统叫VSS,集成在Visual Studio中。由于其反人类的设计,连微软自己都不好意思用了。

分布式版本控制系统除了Git以及促使Git诞生的BitKeeper外,还有类似Git的Mercurial和Bazaar等。这些分布式版本控制系统各有特点,但最快、最简单也最流行的依然是Git!

 

 

总结:

1. 主要区别:对历史版本维护的位置

Git本地仓库包含代码库还有历史库,在本地的环境开发就可以记录历史。 而SVN的历史库存在于中央仓库,每次对比与提交代码都必须连接到中央仓库才能进行。

Git 好处在于: 1)自己可以在脱机环境查看开发的版本历史 。2)多人开发时如果充当中央仓库的Git仓库挂了,任何一个开发者的仓库都可以作为中央仓库进行服务。

开发者仓库一般不直接充当中央库,但可以随时创建一个新的中央库然后同步就立刻恢复了中央库。

 

 

2. Git 每一次 commit 是提交到本机的服务器,这个不需要联网。版本管理,就是要方便知道每一个版本,比如回到之前的某个版本,而且回退到某个之前的版本,也是从本机的服务器拿的数据,这些都不需要联网。

而 SVN 的每一次 commit 都需要联网,这就需要网络的等待。 Git只有在Push、pull 的时候需要联网,而我们平时更多的操作应是commit。

 

断网情况下,SVN也能工作,但是由于没有版本控制的记录,当多人修改后就比较难以快速的合并。但是Git都在本地保存了版本记录,所以大家合并起来就方便得多了。

 

 

转自:

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374027586935cf69c53637d8458c9aec27dd546a6cd6000

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Knative 核心概念介绍:Build、Serving 和 Eventing 三大核心组件

为什么80%的码农都做不了架构师?>>> 作者| 阿里云智能事业群高级开发工程师 元毅 Knative 主要由 Build、Serving 和 Eventing 三大核心组件构成。Knative 正是依靠这三个核心组件,驱动着 Knative 这艘 Serverless 巨轮前行。下面让我们来分…

树莓派基金会来号召用键盘生物学家研究企鹅

伦敦动物学会(Zoological Society of London)于2014年,与伍兹霍尔海洋研究所和牛津大学等组织合作监控企鹅的计划Penguin Lifelines有了新进展,伦敦动物学会现与其他动物保护组织合作Penguin Watch项目,邀请民众在网上…

BlockingCollectionT 类实现 列队操作

官方文档 为实现 IProducerConsumerCollection<T> 的线程安全集合提供阻塞和限制功能。 通过 BlockingCollection<T> 实现列队调用函数 建立全局变量 BlockingCollection<string> blockingCollection new BlockingCollection<string>(); 建立调用函数…

Git 版本回退

现在&#xff0c;你已经学会了修改文件&#xff0c;然后把修改提交到Git版本库&#xff0c;现在&#xff0c;再练习一次&#xff0c;修改readme.txt文件如下&#xff1a; Git is a distributed version control system. Git is free software distributed under the GPL.然后尝…

AMD院士站台 异构计算与OpenCL编程师资培训首站清华开讲

摘要&#xff1a;2013年10月14日&#xff0c;“2013年异构计算与OpenCL编程师资培训”在清华大学召开。本活动邀请到AMD、Khronos Group及清华大学的多位并行计算领域专家&#xff0c;与参会者共同探讨OpenCL异构开发和优化技术。 2013年10月14日&#xff0c;由教育部科技发展…

【问题记录】RIDE-1.7.3.1控制台及日志中文乱码处理

RIDE-1.7.3.1运行结果界面展示: 解决方法参考链接&#xff1a; https://blog.csdn.net/panda62/article/details/88535376 转载于:https://www.cnblogs.com/quietCorner/p/11046656.html

GPU Saturday技术沙龙:OpenCL程序员眼中的下一代APU架构

摘要&#xff1a;GPU Saturday技术沙龙在北京3WCoffee成功举办。本次活动邀请AMD资深技术人员及清华大学项目研究员就AMD最新的GCN架构、GPU加速计算在挖掘比特币、典型图像算法、深度神经网络算法等领域的分析与应用展开深入讨论。 [CSDN报道] 9月5日&#xff0c;GPU Saturda…

直接取出 post 请求中的 json、得请求体参数、查看 post 请求参数

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 方法如下&#xff1a; try{ServletRequestAttributes requestAttributes (ServletRequestAttributes) RequestContextHolder.getReques…

SparkSQL调优

1、执行计划&#xff08;过往记忆https://www.iteblog.com/archives/2562.html&#xff09; df.explain(true)//显示逻辑计划和物理计划&#xff0c;不加true只显示物理计划 2、逻辑计划优化方法&#xff1a; 谓词下推&#xff0c;列裁剪&#xff0c;常量替换&#xff0c;常量累…

AMD发布APPML源码,构建clMath库

摘要&#xff1a;日前&#xff0c;AMD将加速并行处理数学库&#xff08;Accelerated Parallel Processing Math Library简称APPML&#xff09;开源&#xff0c;内容包含了BLAS和FFT的OpenCL实现&#xff0c;项目托管在GitHub上&#xff0c;命名为clMath&#xff0c;该项目基于A…

最简单的 post 请求发起方式、调用其它系统接口

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 调用其它系统接口&#xff0c;发起一个 post 请求&#xff0c;写法如下&#xff1a; import cn.com.infinitus.yunxiao.jira.vo.EpicV…

CSS基础学习 18.CSS多列

四种常见的浏览器内核&#xff1a; 转载于:https://www.cnblogs.com/songsongblue/p/11050210.html

BGP

BGP&#xff1a;border gateway protocol 边界网关路由协议 路由协议分类&#xff1a;内部网关路由协议IGP&#xff1a;rip ospf isis &#xff08;eigrp&#xff09;外部 网关路由协议EGP&#xff1a;EGP&#xff08;早期淘汰&#xff09; BGP BGP特点&#xff1a;1、针对大型…

OpenCL 2.0发布,带来更强悍的异构计算能力

摘要&#xff1a;Khronos Group本周一发布了OpenCL 2.0&#xff0c;可为显示芯片提供更好的独立性&#xff0c;以便能为通用软件计算出更大的力。该组织已经发布了2.0的临时标准&#xff0c;预计正式版本的发布要等到6个月以后。 Khronos小组于本周一&#xff08;7月22日&…

从一个OutOfMemoryError 学会了分析Java内存泄漏问题

从一个OutOfMemoryError 学会了分析Java内存泄漏问题 以前都是好好的&#xff0c;最近出现了 oom。 问题 开始是&#xff1a; java.lang.OutOfMemoryError: Java heap space 2019-06-14 11:02:41.678 ERROR 13789 --- [nio-8082-exec-3] c.e.p.s.c.c.core.ELDictionaryControll…

Ubuntu安装php7.2

1、使用ppa增加源apt-get install python-software-propertiesapt-get install software-properties-commonadd-apt-repository ppa:ondrej/php2、更新apt-get update3、查看源中PHP7.2版本apt list | grep php 列表中已经包含你想要的PHP版本了4、安装PHP7.2apt-get -y …

会出现 unreachable statement 的可能

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 java编译器把unreachable statement标记为运行时错误&#xff0c;一个unreachable statement就是编译器决定永远不会执行它。 下面的几…

Hadoop+GPU强强联手的性能探索

摘要&#xff1a;Hadoop并行处理可以成倍地提高性能&#xff0c;GPU也日益成为计算任务的重要分担者&#xff0c;Altoros Systems研发团队一直致力于探索HadoopGPU的可能性&#xff0c;以及在实际的大规模系统中的实现&#xff0c;这篇文章就是他们的部分研究成果。 Hadoop并行…

Vue Google浏览器插件 Vue Devtools无法使用的解决办法

1.插件安装不必多说 一定要用Vue.js 开发版 Vue.min.js 在控制面板就不会显示 2.本地调试 用的是file://协议 修改插件允许访问文件网址 打上对勾 转载于:https://www.cnblogs.com/116970u/p/11052987.html

JVM原理探究及调优方法论

1 此文目的 本文不准备从盘古开天地开始讲述JVM的种种&#xff0c;相关的文章网上太多了&#xff0c;大多也无非转来转去&#xff0c;连图都差不多。笔者只整理个提纲挈领的学习路线指南&#xff0c;并对自己学习过程中遇到的坑和容易混淆和忽视的地方作个总结。 2 JVM内存模型…