`
isiqi
  • 浏览: 15949297 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

版本控制工具横向比较

阅读更多

版本控制是程序开发、管理必不可少的工具,特别是在多人协作的团队中,适宜的版本控制工具可以提高开发效率,消除很多有代码版本带来的问题。本文首先列举没有版本控制工具时可能遇到的问题,再对主流版本控制工具做概要介绍,之后对作为Java开发者首选的版本控制工具CVS的历史、功能、概念做详细的介绍;最后在Eclipse+CVS环境中,以CVS使用的一个完整流程为例,介绍如何正确的使用CVS工具。

为什么要使用版本控制工具?

如果没有版本控制工具的协助,在开发中我们经常会遇到下面的一些问题:

一、 代码管理混乱。如果是别人添加或删除一个文件,你很难发现。没有办法对文件代码的修改追查跟踪。甚至出现文件丢失,或新版本代码被同伴无意覆盖等现象。

二、 解决代码冲突困难。当大家同时修改一个公共文件时,解决代码冲突是一件很头疼的事。最原始的办法是手工打开冲突文件,逐行比较,再手工粘贴复制。更高级的做法是使用文件比较工具,但仍省不了繁杂的手工操作,一不小心,甚至会引入新的bug。

三、 在代码整合期间引入深层BUG。例如开发者A写了一个公共函数,B觉得正好可以复用;后来A又对这个公共函数进行了修改,添加了新的逻辑,而这个改动的却是B不想要的。或者是A发现这个公共函数不够用,又新做了一个函数,B却没有及时获得通知。这些,都为深层BUG留下隐患。

四、 无法对代码的拥有者进行权限控制。代码完全暴露在所有的开发者面前,任何人都可以随意进行增、删、改操作,无法指定明确的人对代码进行负责。特别是产品的开发,这是极其危险的。

五、 项目不同版本发布困难。特别是对产品的开发,你会频繁的进行版本发布,这时如果没有一个有效的管理产品版本的工具,一切将变得非常艰难。

上面只是列举了一些没有版本控制系统可能带来的问题,特别是对大型项目和异地协同开发有了一个合适的版本控制工具,它可以有效解决因为代码版本不同引起的各种问题,让我们的开发人员能更多的把精力花费在开发上面。而不是每次都花费很多时间进行代码整合和解决版本不同带来的各种问题。

主流版本控制工具介绍

现在,有很多优秀的版本控制工具供我们选择,下面就五种主流的版本控制工具做简单的介绍。

Starteam

是一个集合了版本控制、构建管理(Build Management)和缺陷跟踪系统为一体的软件,并且具有强大的图形界面,易学易用;但管理复杂、维护困难。2002年底被Borland公司收购。

PVCS Version Manager

是美国的MERANT公司软件配置管理工具PVCS 家族中的一个组成部分,它能够实现源代码、可执行文件、应用文件、图形文件和文档的版本管理;它能安全地支持软件并行开发,对多个软件版本的变更进行有效的控制管理。

ClearCase(CC)

是ROSE构件的一部分,目前最牛的配置管理工具,主要应用于复杂的产品发放、分布式团队合作、并行的开发和维护任务。可以控制word, excel,powerpoint,visio等文件格式,对于不认识的格式可以自己定义一种类型来标识。

Visual SourceSafe(VSS)

简单易用、方便高效、与Windows操作系统及微软开发工具高度集成。

CVS(Concurrent Versions System)

是开发源码的并发版本系统,它是目前最流行的面向软件开发人员的源代码版本管理解决方案。它可用于各种平台,包括 Linux 、Unix和 Windows NT/2000/XP等等。

前面三种是重量级的商业版本控制工具,更适合庞大的团队和项目,并且价格不菲。Visual SourceSafe是微软的产品,当然只能用在windows平台并与微软的开发工具无缝集成。CVS免费开源,并且几乎所有开源项目都是使用CVS进行版本管理,无疑,它是我们Java开发者最优选择。

CVS的历史、功能、基本概念的介绍

历史

CVS 诞生于 1986 年,当时作为一组 shell 脚本而出现;1989年3月,Brian Berlinor用C语言重新设计并编写了CVS的代码;1993年前后,Jim Kingdon最终将CVS设计成基于网络的平台,开发者们能从Internet任何地方获得程序源代码。截至目前最新版本是2004年12月13日发布的1.12.11。

功能介绍

一、 代码统一管理,保存所有代码文件更改的历史记录。对代码进行集中统一管理,可以方便查看新增或删除的文件,能够跟踪所有代码改动痕迹。可以随意恢复到以前任意一个历史版本。并避免了因为版本不同引入的深层BUG。

二、 完善的冲突解决方案,可以方便的解决文件冲突问题,而不需要借助其它的文件比较工具和手工的粘贴复制。

三、 代码权限的管理。可以为不同的用户设置不同的权限。可以设置访问用户的密码、只读、修改等权限,而且通过CVS ROOT目录下的脚本,提供了相应功能扩充的接口,不但可以完成精细的权限控制,还能完成更加个性化的功能。

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

基本概念

资源库(Repository)

CVS的资源库存储全部的版本控制下的文件copy,通常不容许直接访问,只能通过cvs命令,获得一份本地copy,改动后再check in(commit)回资源库。而资源库通常为与工作目录分离的。CVS通过多种方式访问资源库。每种方法有不同目录表示形式。

版本(Revision)

每一个文件的各个版本都不相同,形如1.1, 1.2.1,一般1.1是该文件的第一个revision,后面的一个将自动增加最右面的一个整数,比如1.2, 1.3, 1.4...有时候会出现1.3.2.2,原因见后。revision总是偶数个数字。一般情况下将revision看作时CVS自己内部的一个编号,而tag则可以标志用户的特定信息。

标签(Tag)

用符号化的表示方法标志文件特定revision的信息。通常不需要对某一个孤立的文件作tag,而是对所有文件同时作一个tag,以后用户可以仅向特定tag的文件提交或者checkout。另外一个作用是在发布软件的时候表示哪些文件及其哪个版本是可用的;各文件不同revision可以包括在一个tag中。如果命名一个已存在的tag默认将不会覆盖原来的;

分支(Branch)

当用户修改一个branch时不会对另外的branch产生任何影响。可以在适当的时候通过合并的方法将两个版本合起来;branch总是在当前revision后面加上一个偶数整数(从2开始,到0结束),所以branch总是奇数个数字,比如1.2后面branch为1.2.2,该分支下revision可能为1.2.2.1,1.2.2.2,...

冲突(Conflct)

完全是纯文本的冲突,不包含逻辑上的矛盾。一般是一份文件,A做了改动,B在A提交之前也做了改动,这样最后谁commit就会出现冲突,需要手工解决冲突再提交。

CVS与eclipse集成开发

前面对CVS的历史、功能、概论等理论知识做了介绍。下面我们将使用最流行的Java IDE Eclipse中内置的CVS工具,以一个完整开发流程,介绍实际环境中CVS的正确使用。关于CVS系统的安装,不是本文的内容,您可以从附录的链接中获取安装的介绍资料。

常用的CVS控制命令

Check Out(检出)

把源文件从cvs源代码仓库中取出,缺省的版本是最新的版本,你也可以选择指定的版本。在每次更改源代码之前,需要Check Out最新的版本,再起基础之上对源代码进行修改。将代码目录checkout到指定目录下,所有文件都是read-write。

Check In(检入)

把源代码加入到cvs源代码仓库中,每一个添加进代码库中的文件的版本是 1.1。以后每次修改文件重新ci以后,此文件的版本递增为1.2 ,1.3.……。在每次对源代码修改之后,需要Check In,提交最新版本的源代码。

Synchronize with Repository(与资源库同步,简称同步)

使本地更改与资源库同步,它会列出本地和资源库之间不同的所有文件。

Add to Version Control

将新的文件加入到版本控制之中。

Add to .cvsIgnore

将文件设置到版本控制之外,这样该文件或目录中的文件的更改在CVS中不可见,即使同步也无法发现。

CVS正确使用步骤

一、 同步(Synchronize)

就是将本地更改与服务器同步,同步之后可以清晰的看到上一捡出(Check Out)版本之后本地、服务器上的最新改动。这是非常有用的,特别是敏捷开发,强调集体拥有代码。有了同步功能,你可以全局把握项目的代码,可以很方便的跟踪公共模块代码的任何改动。

具体操作:在Eclipse的资源视图(Resource Perspective)或者Java视图(Java Perspective)中,选中要同步的目录,点击右键选择"Synchronize with Repository",之后它将显示同步的视图。

同步之后,它有四种Mode可以选择,见上图绿色框框里按钮。从做到右分别为:

Incoming Mode:表示修改是来自服务器,对应于更新(update)操作。
Outgoing Mode:表示修改是来自本地,对应提交(commit)操作。
Incoming/ Outgoing Mode:本地和服务器修改都在该模式(Mode)中显示。
Conflicts Mode:显示本地和服务器修改的冲突文件。

二、 更新(update)

比较简单,选择Incoming Mode,再选中要更新的文件,右键选择update操作。

三、 解决冲突并合并(solve conflct and merge)

如果有冲突文件,冲突文件不能更新。你必须先解决冲突再操作。选中冲突的文件,再点右键选择"Open in Compare Editor",用比较工具打开该文件。

比较器(Compare)视图,左边版本底的是本地文件(Local File),右边是远程服务器文件(Remote File)。使用"Select Next Change"按钮(绿框中的第一箭头向下按钮),逐一查看不同点。如果不同点标识为黑色框框,则不用管它。如果是蓝色框框,则需要手工调整。如上图,不同点是蓝色框框,将鼠标放到两个不同点的中间小方框中,则凸出一个向右的按钮,并显示提示信息"Copy Current Change from Right to Left",意思是将右边服务器的不同点覆盖到左边的本地文件。点中此按钮。重复这样的操作,将所有服务器上的更改拷贝到本地。

如果有一行代码,本地和服务器都同时做了修改。这时,修改点则显示红色框框。这时,你就必须手工做正确的修改。全部修改完成,保存本地文件。
此时,如果修改点没有了蓝色的框框,就可以开始做合并(merge)操作了。操作也很简单,选择该文件,点击右键,选择"Mark as merged"。

注意:必须确保没有蓝色框框,即完全拷贝了服务器的修改才可以做合并(merge)操作,否则会覆盖服务器上的代码。

四、 提交(commit)

更新服务器代码,解决冲突之后,首先要查看本地文件修改之后是否有错误。如果有,当然首先解决错误,再提交。

分享到:
评论

相关推荐

    代码控制网页内容横向打印

    NULL 博文链接:https://samir007.iteye.com/blog/461854

    基于PreScan、ROS、Simulink实现自动驾驶控制算法(横向控制采用Stanley,MPC).rar

    1、资源内容:基于PreScan、ROS、Simulink实现自动驾驶控制算法(横向控制采用Stanley,MPC).rar 2、适用人群:计算机,电子信息工程、数学等专业的学习者,作为“参考资料”参考学习使用。 3、解压说明:本资源...

    基于天棚和地棚混合阻尼的高速车辆横向减振器半主动控制 (2013年)

    针对上述问题,在Adams/Rial中建立了轨道车辆单节拖车的整车模型,利用Matlab/Simulink工具,结合天棚阻尼控制和地棚阻尼控制特点,研究了混合阻尼控制对高速列车横向振动的抑制作用。结果表明,混合天棚阻尼控制...

    工控安全职业证书技能实践:内网横向渗透测试与实战.docx

    GKAQZYZSJNSJ-028内网横向渗透测试与实战课程级别 信息安全专业工业互联网安全方向 实验概述 首先在VMware通过新建虚拟机的方式,使用系统镜像文件,安装好WinServer2008和Win7,以及win2000sever,都按照推荐或默认...

    控制系统仿真入门PPT

    适合初学控制理论仿真的同学入门,最大的特点是简单:问题简单、模型简单、方法简单。实现了智能小车横向跟踪目标轨迹的控制。分别用PID和模糊控制工具箱开发了控制器。

    考虑横向剪切变形简支矩形中厚板的屈曲分析 (2011年)

    基于考虑横向剪切变形中厚板的几何方程、物理方程及平衡方程,建立关于一个中面挠度和两个中面转角为独立变量的中厚板大挠度弯曲的位移型控制微分方程,从而获得中厚板小挠度屈曲的位移型控制微分方程.该方程退化为...

    CheeseTools:自行开发的横向移动代码执行工具

    该工具基于 CsExec,但旨在允许对服务创建进行额外控制,特别是: 创建(搜索服务是否存在,如果不存在,尝试创建) 启动(搜索服务是否存在并停止,如果是这种情况尝试启动它;如果没有,尝试创建它并启动它) ...

    matlab最简单的代码-HumanControl:人体横向控制和处理自行车的模型

    该软件为在横向平坦地面操纵中控制自行车的人实现了人为操作员控制模型。 自行车模型基于线性Whipple自行车动力学模型。 该控制器基于交叉模型的原理,并包括基本的视觉预览。 该模型能够跟踪地平面中的任意路径。 ...

    禅道项目管理软件发布 v4.3 beta版本.zip

    禅道开源项目管理软件4.3.beta版本于08月05日正式发布,该版本主要完善批量操作、api和扩展的例子。调整插件管理功能。完善测试管理功能。 注:该版本为BETA版本,不建议用于生产环境 一、修改记录 完成的需求...

    实验一 AD17设计环境认识.docx

    (1) 视图/工具栏:用于控制工具栏的显示和隐藏。如:视图/工具栏/没有文档工具 选中与否效果 (2) 视图/工作区面板:用于控制工作面板的打开与关闭。如:视图/工作区面板/system/ 库,便可显示和隐藏库面板 (3...

    c616普通车床的数控改造—横向进给系统的毕业设计.doc

    1 前言 1.1数控技术与数控机床 1.1.1数字控制与数控技术 数字控制(Numerical Control NC)是一种借助数字、字符或其它符号对某一工作过程(如加工、测量、装配等)进行 可编程控制的自动化方法。 数控技术...

    街机扫描线_v7(正式版)

    控制条的操作:1.拖拽滑块 2.在滑块左右两侧的选择区域也可拖拽,或单击[增减为1]或按住[每次增减为1]. [默认按钮] 将默认配置写入 自定义配置文件.ini 文件中并显示出来. 加载自定义配置文件:进入控制台时,程序将默认...

    js 实现div里面的内容滚动,并可以通过按钮控制

    NULL 博文链接:https://yangpanwww.iteye.com/blog/984155

    分布式架构的电信客户关系管理系统的研究与实现

    本文除了集中式架构向分布式微服务框架改造,还做了以下改造工作:提高代码管理的可靠性、稳定性:系统代码的管理工具由原来的集中式版本控制系统svn 切换成到目前流行的分布式版本控制系统gitlab。新系统在安全自主...

    华报智能报表工具

    华报智能报表工具(ReportAll)是开发人员最理想的报表工具,具有全新的设计思想,对中国式报表和很多复杂报表有很强的针对性,他将“对象摆放”类和“电子表格”类报表开发工具完美融合,使用种类丰富且功能强大的...

    串口调试工具

    8:监控窗口可以设定横向和纵向以及层叠排列方式。 9:支持手工单次向每个串口发送测试命令。 10:可以统计每个串口的发送接收信息 版本信息 2016-12-15 2.0.1.9:集成北斗RDSS调试环境。 2016-12-08 2.0.1.7:...

    element-hl:基于elementui 2.13.2修改了部分源码的版本

    基于element ui 2.13.2版本链接文件安装npm install element-ui -S特别感谢元素ui团队执照1.0.0桌子修改表格scrollEvent增加了一个表格的滚动外部事件tableBodyScroll table模块:增加了一个noCalcScrollX:控制是否...

    Rotation - 强大的屏幕方向管理v26.1.1专业版

    Rotation是Android控制设备方向的工具。它提供了Android支持的所有模式,并且可以根据应用程序或各种事件进行配置,例如通话、锁定、耳机、充电和底座。应用程序具有特定模式并不重要,它完全覆盖应用程序和系统设置...

    Exce百宝箱——2012版本.rar

    【创建多版本打开方式】:如果安装了多个版本的Office,本工具可助您任意选择Excel文件的打开方式。通过文件右键的“发送到”菜单执行 【生成2003样式菜单】:Excel 2007或者Excel 2010专用,可以产生2003样式的菜单来...

Global site tag (gtag.js) - Google Analytics