版本控制是程序开发、管理必不可少的工具,特别是在多人协作的团队中,适宜的版本控制工具可以提高开发效率,消除很多有代码版本带来的问题。本文首先列举没有版本控制工具时可能遇到的问题,再对主流版本控制工具做概要介绍,之后对作为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。
二、 完善的冲突解决方案,可以方便的解决文件冲突问题,而不需要借助其它的文件比较工具和手工的粘贴复制。
三、 代码权限的管理。可以为不同
=====================================
四、 支持方便的版本发布和分支功能。
基本概念
资源库(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)
更新服务器代码,解决冲
分享到:
相关推荐
总的来说,横向控制和纵向控制是无人驾驶车辆轨迹跟踪的核心技术,而MATLAB提供了强大的工具和平台,帮助工程师们设计、验证和优化这些控制策略。通过深入理解车辆动力学和模型预测控制,我们可以为无人驾驶车辆的...
总之,"自动驾驶横向MPC控制算法MATLAB代码"为自动驾驶研究者和工程师提供了一个实用的工具,有助于推动自动驾驶技术的创新和发展。通过深入学习和实践,不仅可以掌握MPC算法的精髓,还能提升在MATLAB环境下的自动...
在讨论分布式电动车辆横向稳定性模糊滑模控制的知识点之前,我们首先要了解电动汽车的稳定性和其分布式系统的运作模式。电动汽车,尤其是分布式电动汽车,通常是指那些拥有分布在车辆各个轮边的电动机的汽车,这种...
标题中的“代码控制网页内容横向打印”指的是在编程过程中,如何通过编写特定的代码来实现对网页内容的控制,使其适应横向打印的需求。这通常涉及到CSS(层叠样式表)和JavaScript的运用,以调整布局、尺寸和样式,...
在IT领域,特别是控制系统设计和仿真中,横向控制和纵向控制是两个重要的概念。横向控制主要涉及系统在横向维度上的动态行为,而纵向控制则关注系统在纵向维度上的性能。这些概念广泛应用于自动驾驶、无人机飞行控制...
"jQuery刻度尺风格横向时间轴插件timeline"正是一款能够帮助开发者实现这一目标的工具。这款插件以其独特的刻度尺样式,将时间轴信息展示得直观而生动,特别适用于历史事件展示、项目进度跟踪或者任何需要按时间顺序...
然而,如何精确计算因GPS控制网而产生的横向贯通误差,并将误差控制在最小范围,依然是一个值得深入探讨的技术难题。 本文研究的核心内容,即为在隧道洞外GPS控制网引起的横向贯通误差进行严密解算方法的研究。传统...
总的来说,Swiper通过HTML、CSS和JavaScript的集成,为开发者提供了一个强大而灵活的工具,可以轻松创建出美观且功能丰富的横向循环图片展示效果。在实际应用中,你可以根据项目需求调整和扩展Swiper的配置,以实现...
原生JavaScript提供了对浏览器API的直接访问,可以更灵活地控制滚动行为。例如,我们需要监听用户的触摸事件,计算滑动距离,并更新picker组件的状态。同时,为了实现平滑的滚动效果,可以使用requestAnimationFrame...
7. **版本控制**:在团队协作中,模板还可以帮助追踪文档的变化,确保每个版本都与公司的格式要求相符,降低因格式问题导致的误解或混淆。 8. **可访问性**:考虑到无障碍阅读的需求,横向模板在设计时应考虑高对比...
此外,使用版本控制系统(如Git)可以帮助跟踪代码更改,确保在解决重复代码问题时不会丢失任何重要更新。 总之,通过合理地利用函数、类、设计模式以及遵循良好的编程实践,我们可以有效地避免PHP中的横向重复问题...
JavaScript 横向树,或称为组织结构图,是一种数据可视化技术,用于展示层次结构数据。在网页应用中,这种布局常用于展示公司组织架构、项目...在实际项目中,根据需求选择适合的工具和方法,可以大大提升用户体验。
还有提示,这可能是指提供给用户的反馈信息,比如鼠标悬停时显示的工具提示,或者在操作后给出的确认消息。这可以通过HTML的`title`属性,或者使用JavaScript和CSS创建自定义提示实现。 在提供的压缩包中,`div横向...
车辆横向控制是自动驾驶和高级驾驶辅助系统(ADAS)中的关键组成部分,主要任务是确保车辆在行驶过程中的稳定性与安全性。本项目通过MATLAB环境,采用线性矩阵不等式(LMI)方法设计了H无穷车辆横向控制器,用于实现...
这个“EXT3横向菜单”可能是指一个专门针对EXT3文件系统的图形用户界面(GUI)工具,它以横向布局展示菜单选项,便于用户管理EXT3文件系统。 在Linux中,文件系统是非常核心的部分,负责组织和存储数据。EXT3因其...
通过对LQR控制Matlab的深入理解和实践,不仅可以掌握这一强大的控制工具,还能提升在无人驾驶领域解决实际问题的能力。在设计过程中,可以不断调整参数,优化性能,甚至结合其他高级控制策略,如预测控制或滑模控制...
在"顶部横向导航栏的效果"中,ViewPager经常被用作实现这种效果的主要工具。通常,顶部的导航栏会包含一系列的图标或文字,每个代表一个可滑动的页面。当用户点击某个导航项时,ViewPager会自动滑动到相应的页面,...
在IT行业中,Flash是一款历史悠久且曾经非常流行的交互式多媒体开发工具,主要用于创建动画、网页元素以及各种互动体验。本文将详细解析"Flash横向图片效果"这一主题,它涉及到的主要是如何在Flash中实现图片的横向...