2019独角兽企业重金招聘Python工程师标准>>>

版本控制工具: 
提供完备的版本管理功能,用于存储、追踪目录(文件夹)和文件的修改历史,是软件开发者的必备工具,是软件公司的基础设施。版本控制软件的最高目标,是支持软件公司的配置管理活动,追踪多个版本的开发和维护活动,及时发布软件。

一、CVS(Concurrent Versions System):

  • 是开发源码的并发版本系统
  • 它可用于各种平台,包括 Linux 、Unix和 Windows NT/2000/XP等。
  • CVS免费开源,对项目进行版本管理。

功能介绍:

一、 代码统一管理,保存所有代码文件更改的历史记录。对代码进行集中统一管理,可以方便查看新增或删除的文件,能够跟踪所有代码改动痕迹。可以随意恢复到以前任意一个历史版本。并避免了因为版本不同引入的深层BUG。
二、 完善的冲突解决方案,可以方便的解决文件冲突问题,而不需要借助其它的文件比较工具和手工的粘贴复制。 
三、 代码权限的管理。可以为不同的用户设置不同的权限。可以设置访问用户的密码、只读、修改等权限,而且通过CVS ROOT目录下的脚本,提供了相应功能扩充的接口,不但可以完成精细的权限控制,还能完成更加个性化的功能。

四、 支持方便的版本发布和分支功能。

二、SVN(Subversion):

  • SVN全名Subversion,即版本控制系统。SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。

  • SVN是一种集中式文件版本管理系统。

  • 集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上是不可以工作。

(SVN)集中式管理的工作流程:

集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上是不可以工作。 
管理流程如下图: 

三、Git 简介:

  • Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

  • Git 可以保存任何文档,最善于保存文本文档,因为它本来就是为解决软件源代码 (也是一种文本文档)版本管理问题而开发的,提供了许多有助于文本分析的工具。对于非文本文档,Git 只是简单地为其进行备份并实施版本管理。

  • Git是当前最为先进的分布式版本管理控制和源码管理系统。

GIT开发工具的原理(与SVN不同):

分布式与集中式最大的区别: 
在于开发者可以本地提交,每个开发者机器上都有一服务数据库。 
流程如下图: 

分布式vs集中式

分布式版本控制系统最优秀的代表是Git,集中式版本控制系统的最典型代表是SVN,两者区别如下:

集中式,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。

分布式,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。实际工作时,更多采用的是利用服务器来“交换”大家的修改。

小结

Git是一款分布式的版本控制软件,相比SVN,功能更强大,自然而然操作更复杂一些。git在本地也是以git版本库的形式管理,而SVN在本地管理的仅是一个版本库的副本。 
Git和SVN相比,有很明显的一个不同点: 
git你可以在本地做一些修改,然后commit到本地的版本库,最后push到服务器,而SVN只要一commit,更改就已经提交到服务器。

Git简介

Git是什么

Git是目前世界上最先进的分布式版本控制系统(没有之一)

版本控制工具(CVS,SVN,Git): 提供完备的版本管理功能,用于存储、追踪目录(文件夹)和文件的修改历史,是软件开发者的必备工具,是软件公司的基础设施。版本控制软件的最高目标,是支持软件公司的配置管理活动,追踪多个版本的开发和维护活动,及时发布软件。

Git的诞生

很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。

Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?

事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!

你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS(Concurrent Versions System)、SVN(Subversion)

好用,但那是付费的,和Linux的开源精神不符。

不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。

安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。

Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:

Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。

Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。

集中式vs分布式

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

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

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

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

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

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

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

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

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

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

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

git你可以在本地做一些修改,然后commit到本地的版本库,最后push到服务器,

而SVN只要一commit,更改就已经提交到服务器。

安装Git

创建版本库

什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:

$ mkdir learngit

$ cd learngit$ pwd

/Users/michael/learngit

pwd命令用于显示当前目录。在我的Mac上,这个仓库位于/Users/michael/learngit。

如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。

第二步,通过git init命令把这个目录变成Git可以管理的仓库:

$ git initInitialized empty Git repository in /Users/michael/learngit/.git/

瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

转载于:https://my.oschina.net/wuweixiang/blog/1545536

版本控制工具(CVS、SVN、GIT)简介相关推荐

  1. 小汤学编程之JavaEE学习day07——版本控制工具:SVN、GIT

    一.SVN 1.SVN介绍     2.SVN安装     3.SVN操作 二.GIT 1.GIT介绍     2.集中式和分布式     3.GIT的基本使用     4.GIT时光机     5. ...

  2. (50)FPGA面试技能提升篇(版本控制工具Clearcase、Git)

    1.1 FPGA面试技能提升篇50(版本控制工具Clearcase.Git) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试技能提升篇50(版本控制工具Cl ...

  3. Git 分布式版本控制工具01:Git介绍+下载+安装

    1. 前言 1.1 什么是Git Git 是一个分布式版本控制工具,通过Git 仓库来存储和管理源代码文件文件. 在IDEA开发工具中可以集成Git: 集成后在IDEA中可以看到Git相关图标: 可以 ...

  4. 版本控制概述|VSS/CVS/SVN/Git比较|Windows下SVN搭建详细介绍

    版本控制介绍 常用版本控制技术 vssVisual SourceSafe cvsConcurrent Versions System svnSubversion git 区别转自网络 SVN使用简介 ...

  5. 【版本工具】cvs,svn,git等版本工具区别

    ##1. 什么是版本控制工具 来自维基百科:版本控制是维护工程蓝图的标准作法,能追踪工程蓝图从诞生到定案的过程. 此外,版本控制也是一种软件工程技巧,借此能在软件开发中,确保由不同人所编辑的同一代码文 ...

  6. (一)版本控制工具(svn)

    1.SVN是什么 svn是一个集中式的版本控制工具 2.SVN解决什么问题 SVN Repository可以是自己计算机上的一个目录,或者是随身碟(不建议这样用).当然也可以是公司的服务器. SVN有 ...

  7. CVS/SVN/GIT

    CVS/SVN 集中式的版本控制系统 版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器.中央服 ...

  8. 版本控制工具:SVN和Maven的区别

    构建工具-maven,版本控制工具-svn. 一.只有svn的情况 首先考虑没有maven的情况.这样的话,项目组每个开发人员,都需要在本地check out所有的源码. 每次提交之前,需要先更新周边 ...

  9. 版本控制工具CVS使用经验介绍

    CVS(Concurrent Versions System),并发版本系统的意思,主流的开放源码网络透明的版本控制系统,用于在多人开发环境下的源码的维护.CVS对于从个人开发者到大型.分布团队都是有 ...

最新文章

  1. Mac搭建Git服务器—开启SSH
  2. MediaSource 非当前窗口
  3. Android自定义圆形进度条
  4. 活动目录的备份与还原
  5. Linux中重要文件
  6. 重装vcenter后恢复原来制作的模板!
  7. poj1091:跳蚤【容斥原理】
  8. cmder 神器 +curl
  9. Java中SimpleDateFormat用法详解
  10. 【并行计算-CUDA开发】GPGPU OpenCL/CUDA 高性能编程的10大注意事项
  11. Python使用matplotlib可视化模拟龟兔赛跑折线图
  12. 鸟哥的Linux私房菜-合集
  13. 2021低压电工考试题初训复审
  14. 【labelme】数据标注工具
  15. AD2016 交互式网表 InteractiveHtmlBomForAD插件安装教程
  16. 博主力推!!NRF52832 BLE 抓包sniffer来了!附带安装使用说明
  17. 选中文本弹出对话框效果(如百度文库)
  18. 化繁为简、敏捷迭代,轻量化小程序时代已然到来
  19. android 圆形渐变背景,android实现圆形渐变进度条
  20. 十年数据标注:缺席的独角兽与走不出的围城

热门文章

  1. 大小不固定的图片、多行文字的水平垂直居中
  2. 50. Pow(x, n)(递归,穷举)
  3. 机器学习实战13-卷积神经网络
  4. mysql中什么是选择引擎_Mysql 应该选择什么引擎
  5. 7-100 倒数第N个字符串 (15 分)
  6. java ajax 更改头像_ajax+node实现头像更改
  7. JAVA输出1 10与5相乘的结果_完美起航-用java数组展示计算机的多位数相乘
  8. [bzoj1355][Baltic2009]Radio Transmission_KMP
  9. Atitit 硬件 软件 的开源工作 差异对比
  10. Android Learning:数据存储方案归纳与总结