1、毕 业 论 文论文题目: 论述如何做好版本控制 内 容 摘 要近年来,随着网络技术和数据库技术的发展,使得软件规模越来越庞大。多单位、多团队的协作开发使得开发队伍的离散化程度增加,多种数据库和多种开发平台的应用以及软件需求不确定性的增加,使得软件开发过程越来越复杂,作为软件过程中的版本控制管理面临着更多的挑战,使得单纯的版本控制系统在面对复杂的开发环境时显得力不从心。又因为版本控制是一项繁琐的工作,和整个软件的开发活动紧密地联系在一起,所以在实际工作中更需要有得力的工具辅助。从概念上讲,软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、人员、进度、质量、风险等进行分
2、析和管理的活动。实际上,软件项目管理的意义不仅仅如此,进行软件项目管理有利于将开发人员的个人开发能力转化成企业的开发能力,从而能够提高软件开发的质量。那么,随着软件产业的崛起,软件工程技术正吸引着越来越多关注的目光,作为软件工程的一个重要领域,版本控制管理也日益受到人们的重视。版本控制工具各有所长,因而只有根据项目的预算和和开发组织的实际情况出发,正所谓“好用就好” 。在这里,本人就软件市场上的主流版本控制工具做一些介绍和个人的看法。关键词 软件项目管理 版本控制管理 版本控制工具的比较AbstractIn recent years, with the development of netwo
3、rk technology and database technology, which makes software more and more large scale. To coordinate the development of multiple units, multiple team gives rise to discrete degree of development team; increase the various development tools, database and a variety of development platform and the soft
4、ware demand uncertainty, making the software development process more complex, as the software development process in the version control management is facing more challenges, making the simple version the control system is powerless in the face of the complex development environment. And because th
5、e version control is a tedious work, and the entire software development activities closely together, so in the actual work needs to have the right tools. Conceptually, the software project management is to enable software project according to the scheduled cost, schedule, quality of finish, analysi
6、s and management activities on cost, schedule, quality, risks, etc. In fact, the significance of project management software is not only so, software project management will be conducive to the development of the personal development capabilities into enterprise development capabilities, so as to im
7、prove the quality of software development. Then, as the software industry, software engineering technology is attracting more and more attention, as an important field of software engineering, version control management is also increasingly attention. Each one has his good points. Version control to
8、ol, and only according to the actual situation of project budget and development organization, is the so-called “ good is good “. Here, I have the mainstream version of the software on the market control tool to do some introduction and personal views.Key word:Software project management Version con
9、trol management Comparison of version contorltools目 录1 版本控制的基本概念 .21.1 什么是版本控制 .21.2 为什么要版本控制 .22 版本控制的发展史 .32.1 第一代配置管理 .32.2 第二代配置管理 .32.3 第三代配置管理 .43 不同“级别”的版本控制工具 .43.1 “元老级”的 CCC .43.2 RCS3.53.3 SCCS4.53.4 “新秀级”的 Hansky Firefly .53.5 “入门级”的 Visual SourceSafe .53.6 “中坚级”的 Clearcase .53.7 开源软件通用的
10、 CVS 和 SVN .63.7.1 CVS:Concurrent Versions System .63.7.2 SVN:SubVersion .64 技术的潮流大势-开源版本工具 .84.1 选择开源版本控制工具的理由 .84.1.1 服务器端是否和客户端一样看起来很美? .94.1.2 服务器端是否在使用数据库来作版本控制的数据引擎? .94.1.3 是否支持到其他版本控制系统的迁移? .104.1.4 可否定制?是否可以对提交说明(Commit Log)进行检查? .104.1.5 客户端是如何状态保持的? .104.1.6 成本因素 .104.1.7 客户确认软件中没有木马、间谍软件
11、么? .101引言随着软件产业的崛起,软件版本控制日益受到人们的重视,版本控制对软件产品的质量非常重要。版本控制的目的是实现开发团队并行开发、提高开发效率的基础。其目的在于对软件开发进程中文件或目录的发展过程提供有效的追踪手段,保证在需要时可回到旧的版本,避免文件的丢失、修改的丢失和相互覆盖,通过对版本库的访问控制避免未经授权的访问和修改,达到有效保护企业软件资产和知识产权的目的。版本控制的功能在于跟踪记录整个软件的开发过程,包括软件本身和相关文档,以便对不同阶段的软件及相关文档进行表示并进行差别分析,对软件代码进行可撤消的修改,便于汇总不同开发人员所做的修改,辅助协调和管理软件开发团队。因此
12、,我们需要从技术方面进行突破和创新,以此来配合我们的工作需求。21 版本控制的基本概念1.1 什么是版本控制版本控制 1是程序开发、管理必不可少的工具,特别是在多人协作的团队中,适宜的版本控制工具可以提高开发效率,消除很多由代码版本带来的问题。通过使用版本控制技术及工具,可以确保在软件项目开发中不同的开发人员所涉及的同一文档都得到正确的更新。版本控制包括两个方面:一是保证测试人员得到的是最新的版本,二是记录历史版本的测试状态。版本控制是对系统不同版次进行标识和跟踪的过程,而版次则是指一系列版本变迁的其中一个。版本标识的目的是便于对版本加以区分、检索和跟踪,以表明各个版本之间的关系。版本控制的功
13、能在于能跟踪记录整个测试过程,包括测试本身和相关文档,以便对不同阶段的待测软件及相关文档进行标识和差别分析,也便于协调和管理测试团队的工作。版本控制对于测试人员来说,它是不可或缺的工具。测试人员可以通过版本说明文档了解到当前的测试版本中和上一版本有哪些显著的变化。明确了这些情况之后,测试人员可以更加高效,有针对性的执行测试。1.2 为什么要版本控制在前面已经介绍了版本控制的概念,那么这一章节我们重点了解为什么要版本控制。软件开发的混沌(1)版本较多,不知道如何选择一个合适的版本进行下一步的工作?(2)团队经常得不到一个可以工作的版本而苦不堪言?(3)有多个版本而不能很好的整合?(4)用户出现问
14、题,而你却无法获取和重构用户版本?(5)变更 2无法追踪,无法有效的追溯版本的变化?(6)经常处在无法说清楚项目的真实状态。以上这种情况的发生,让开发人员和测试人员都会非常头疼,因为在实际生产环境中,如果没有版本控制工具的协助,在实际工作中我们经常会遇到下面的一些问题:(1)用户权限混乱。所有开发人员和各自负责的模版,在管理权限上没有明确,就会出现如果是别人添加或删除一个文件,又没有文字或邮件说明,你很难发现。甚至出现文件丢失,或新版本代码被同伴无意覆盖等现象。(2)多人修改一个文件。一旦出现这样的情况,很有可能别人辛勤劳动的工作,就会毁于一旦。最原始的办法是手工打开冲突文件,逐行比较,再手工
15、粘贴复制。更高级的做法是使用文件比较工具,但仍省不了繁杂的手工操作,一不小心,甚至会引入新的bug。是一个费力不讨好的工作,效率低,质量不能得以保证。(3)在代码整合期间引入深层 BUG。开发人员互相使用文档,对原有的代码进行复用和修改,又不通知其原有负责模块的同事,使得代码被修改,用途变得不一致,对产品本3身产生更大的影响。(4)项目不同版本发布困难。在产品开发过程中,会频繁的进行版本发布,没有一个好的管理工具,产品质量和进度很难得以保证。(5)测试人员投入人力资源过多,测试时间过长,测试进度缓慢,测试成本增加,从而导致软件质量下降。那么,如果有那么一套系统(1)管理档案(2)救回删除或被覆
16、盖的档案(3)可以从新的版本再出发(4)告诉你个版本间的差异(5)告诉你专案开发的顺序及修改人员(6)冻结程序码,以及在 bug 的同时,修改了其它的 code 而增加更多新的问题(7)从一个人到很多人都可以使用这就是版本控制工具的神奇妙用,因为拥有了版本控制工具就可以有效解决因为代码版本不同引起的各种问题,让我们的开发人员能更多的把精力花费在开发上面,提高软件质量。而不是每次都花费很多时间进行代码整合和解决版本不同带来的各种问题。在实际工作中,就可以及时了解团队中其他成员的进度,轻松比较不同版本之间的细微差别,记录每个文件成长的每步细节,利于后期使用。资料共享,避免以往靠邮件发送文件造成的混
17、乱,人人为我,我为人人。所有成员维护的实际是同一个版本库,无需专人维护所有文件的最新版本;协同工作,大大提高团队工作效率,无论团队成员分布在天涯还是海角。2 版本控制的发展史2.1 第一代配置管理(1)时间:七十年代开始(2)特征:(a)基于文件(File Based)的版本控制。(b)支持 check-out/check-in 模型。(c)简单分支(3)解决问题:文件丢失和覆盖的问题。(4)最佳经验:(a)标识工件,将工件存入安全的版本库。(b)控制并记录对工件的变更。(c)保持稳定,一致的工作空间。2.2 第二代配置管理(1)时间:八十年代中后期4(2)特征:(a)基于项目库将元数据与配置
18、项分开存储管理。(b)从而更好地支持并行开发、团队协作以及过程管理。(3)解决问题:并行开发。(4)最佳实践:(a)支持工件的并行开发。(b)及早集成,经常集成。(c)记录并追踪变更跟请求。(d)保证软件 build 可重现。2.3 第三代配置管理(1)时间:2000 年(2)特征:以活动为中心的组织和集成(3)解决问题:如何在复杂的软件开发中把握变更(4)最佳实践(a)将工件组织成版本化的构件:“构件的引入”有利于逻辑设计和物理实现相对应,提供一种机制来更智能的创建和使用基线;构件是对众多的文件进行合理分类以呈现系统的设计要素可以大大简化项目开发控制,可以通过合理的目录来组织构件 。(b)以
19、活动为中心的组织和集成:建立活动变更集的映射。(c)在项目里程碑处创建基线:更好的标识阶段点和提供开发复用的基准。3 不同“级别”的版本控制工具版本控制在软件项目开发中非常重要,但是不同的项目需要不同的版本控制工具,需要对所有的版本控制工具有一个认识和理解,才能更好的运用到工作中。所谓“工欲善其事,必先利其器” ,因此需要我们从专业角度和实践经验来仔细了解、剖析一下软件版本控制工具。版本控制工具也有“级别”之分,其中有“元老级”的 CCC(Change and Configuration Control) 、RCS(Revision Control System) 、SCCS(Source C
20、ode Control System) , “新秀级”的 Hansky Firefly , “入门级”的 Visual SourceSafe, “中坚级”的 Clearcase,还有开源软件通用的版本控制工具CVS(Concurrent Versions System)和 SVN(SubVersion) 。CVS 在一段时期内几乎成为版本控制工具的“代名词” ,大概有着 30 多年的历史,而 SVN 是 CVS 的理想替代者,并出自同一人之手,被一些人誉为“迄今为止最好用的开源源码版本控制工具” 。3.1 “元老级”的 CCC CCC:Change and Configuration Cont
21、rol。在 20 世纪 60 年代末 70 年代初,软件配置管理的概念开始提出。20 世纪七十年代初期加利福利亚大学的 Leon Presser 撰写了一篇论文,提出控制变更和配置的概念,之后在 1975 年,他成立了一家名为 SoftTool5的公司,开发了自己的配置管理工具 CCC这也是最早的配置管理工具之一。 3.2 RCS3RCS:Revision Control System。诞生于 1980 年,由 WALTER.f.Tichy 于美国的在Indina 州的 Purdue 大学开发,是基于单一文件的版本维护系统。3.3 SCCS4SCCS:Source Code Control S
22、ystem。SCCS 是一种基本的程序源代码版本控制工具,它适用于任何正文文件的版本维护。基于单一文件的版本控制,通常它的软件储藏室和要维护的文件在同一目录下. SCCS 工作时,有一个专门的 SCCS 格式的文件保留其源文件的编码版本,其记录了足够的信息来生成新的版本,并记录了谁对文件有修改权,拥有该版本的“锁”。3.4 “新秀级”的 Hansky Firefly5 Hansky Firefly:作为 H a n s k y 公司软件开发管理套件中重要一员的Firefly,可以轻松管理、维护整个企业的软件资产,包括程序代码和相关文档。Firefly 是一个功能完善、运行速度极快的软件配置管理
23、系统,可以支持不同的操作系统和多种集成开发环境,因此它能在整个企业中的不同团队,不同项目中得以应用。Firefly 基于真正的客户机/服务器体系结构,不依赖于任何特殊的网络文件系统,可以平滑地运行在不同的 LAN、WAN 环境中。它的安装配置过程简单易用,Firefly 可以自动、安全地保存代码的每一次变化内容,避免代码被无意中覆盖、修改。项目管理人员使用Firefly 可以有效地组织开发力量进行并行开发和管理项目中各阶段点的各种资源,使得产品发布易于管理;并可以快速地回溯到任一历史版本。系统管理员使用 Firefly 的内置工具可以方便的进行存储库的备份和恢复,而不依赖于任何第三方工具。3.
24、5 “入门级”的 Visual SourceSafe6Visual SourceSafe:简单易用、方便高效、与 Windows 操作系统及微软开发工具高度集成。3.6 “中坚级”的 Clearcase Clearcase:IBM 旗下 Rational 公司(2003 年被 IBM 收购)的一款重量级的软件配置管理(SCM, Software Configuration Managemen)工具。与 CVS 和 VSS 不同,Clearcase涵盖的范围包括版本控制、建立管理、工作空间管理和过程控制。从最初的软件配置计划,到配置项的确立,从变更控制到版本控制,Clearcase 贯穿于整个软
25、件生命周期。 Clearcase 支持现有的绝大多数操作系统,但它的安装、配置、使用相对较复杂,并且需要进行团队培训。6ClearCase 的核心功能是版本控制,它是对在软件开发进程中一个文件或一个目录发展过程进行追踪的手段。ClearCase 对所有文件系统对象(包括文件、目录和链接)增强了版本控制系统功能。可定版本的文件包括源代码、可执行文件、位图文件、需求文档、设计说明、测试计划、和一些 ASCII 和非 ASCII 文件。目录的版本记录了整个组织基础资源的发展状况,包括源文件的建立、重新命名、重新构造和删除操作等。 这种版本控制系统提供了先进的版本分支和归并功能用于支持并行开发。 3.
26、7 开源软件通用的 CVS7和 SVN3.7.1 CVS:Concurrent Versions SystemCVS 是有着三十年以上的时间的考验。CVS 是开放源代码软件世界的一个伟大杰作,有人认为如今开源成功发展的幕后功臣之一当 CVS 莫属。Linux 的创始人 Linus 就把 Linux 的成功,归因于 CVS。由于 CVS 功能强大,跨平台,支持并发版本控制,而且免费,所以它在全球中小型软件企业中得到了广泛使用。CVS 最大的遗憾就是缺少相应的技术支持,许多问题的解决需要自已寻找资料,甚至是研究源代码。CVS 是一个典型的服务器/客户端软件,有 UNIX 版本的 CVS 、Linu
27、x 版本的 CVS 和 WINDOWS 版本的 CVS。CVS 支持远程管理,项目组分布开发时一般都采用 CVS。 3.7.2 SVN:SubVersionCVS 纵然易用,但也有一些与生俱来的缺点,比如 CVS 不支持文件改名,只对文件控制版本而没有针对目录的管理,等等。之后 CVS 的创始人之一在其现任公司的资助下开发了 SubVersion,用以替代 CVS。SubVersion 的设计目的就是针对 CVS 的一些弱点进行改进。下面从几个具体介绍 Subversion。Subversion 是什么?Subversion 是一个自由/开源版本控制系统,它管理文件和目录可以超越时间。一组文件
28、存放在中心版本库,这个版本库很像一个普通的文件服务器,只是它可以记录每一次文件和目录的修改,这便使你可以取得数据以前的版本,从而可以检查所作的更改。从这个方面看,许多人把版本控制系统当作一种“时间机器”。Subversion 的历史:2000 年,CollabNet,Inc 就开始寻找 CVS 替代产品的开发人员。CollabNet 提供了一个名为 CollabNet 企业版(CEE)的协作软件套件。这个软件套件的一个组成部分就是版本控制系统。尽管 CEE 在最初采用了 CVS 作为其版本控制系统,但是 CVS 的局限性从一开始就很明显,CollabNet 知道,迟早要找到一个更好的替代品。遗憾的是,CVS 已经成为开源世界事实上的标准,很大程度上是因为没有更好的替代品,至少是没有可以自由使用的替代品。所以 CollabNet 决定从头编写一个新的版本控制系统,这个系统保留 CVS 的基本思想,但是要修正其中错误和不合理的特性。2000 年 2 月,他们联系到 OpenSource Development with CVS(Coriolis,1999)的作者 Karl Fogel,并且询问他是否希望为这个新项目工作。巧合的是,当时 Karl 正在与朋友 Jim Blandy 讨论设计一个新的版本控制系统。1995 年时,他们两人曾经开办了一个提