软件工程课程设计报告-版本控制工具综述

导读:如果你根本就不熟悉版本控制,你最好首先阅读一下有关版本控制的其他介绍,Subversion提供:1.版本化的目录,但是Subversion实现了一个可以跟踪目录树更改的“虚拟”版本化文件系统,文件和目录都是有版本的,2.真实的版本历史,因为CVS只记录单个文件的版本,要么全部提交到版本库,防止部分修改提交到版本库,4.版本化的元数据,属性也是随时间的流逝而纳入版本控制的,Subversion在

软件工程课程设计报告-版本控制工具综述

你会不太明白所有的特性,如果你根本就不熟悉版本控制,你会瞪着眼无所适从,你最好首先阅读一下有关版本控制的其他介绍。

Subversion提供: 1.版本化的目录

CVS只记录单个文件的历史,但是Subversion实现了一个可以跟踪目录树更改的“虚拟”版本化文件系统,文件和目录都是有版本的。

2.真实的版本历史

因为CVS只记录单个文件的版本,对于拷贝和改名—这些文件经常发生的操作,会改变一个目录的内容—在CVS中并不支持。在CVS里你也不可以用一个完全不同的文件覆盖原来的同名文件而又不继承原来文件的历史。通过

Subversion,你可以对文件或是目录进行增加、拷贝和改名操作,也可以新增一个具有干净历史的文件。

3.原子提交

一系列的改动,要么全部提交到版本库,要么一个也不提交,这样可以让用户构建一个所要提交修改的逻辑块,防止部分修改提交到版本库。

4.版本化的元数据

每一个文件或目录都有一套属性—键和它们的值,你可以建立并存储任何键/值对,属性也是随时间的流逝而纳入版本控制的,很像文件的内容。

5.可选的网络层

Subversion在版本库访问方面有一个抽象概念,利于人们去实现新的网络机制,Subversion可以作为一个扩展模块与Apache结合,这给了Subversion在稳定性和交互性方面很大的好处,可以直接使用服务器的特性—认证、授权和传输压缩等等。也有一个轻型的,单独运行的 Subversion服务,这个服务使用自己的协议可以轻松的用SSH封装。

6.一致的数据操作

Subversion表示文件是建立在二进制文件区别算法基础上的,对于文本(可读)和二进制(不可读)文件具备一致的操作方式,两种类型的文件都压缩存放在版本库中,区别信息是在网络上双向传递的。

7.效率的分支和标签

分支与标签的代价不与工程的大小成比例,Subversion建立分支与标签时只是拷贝整个工程,使用了一种类似于硬链接的机制,因而这类操作通常只会花费很少并且相对固定的时间。

8.可修改性

Subversion没有历史负担,它由一系列良好的共享C库实现,具有定义良

16

好的API,这使得Subversion非常容易维护,可以轻易的用其他语言操作。

9.Subversion的架构

俯视Subersion的设计,可以看出,一端是保存你所有纳入版本控制的数据的Subversion版本库,在另一端是你的Subvesion客户端程序,管理着所有纳入版本控制数据的本地影射(叫做“工作拷贝”),在这两极之间是各种各样的版本库访问(RA)层,一些使用电脑网络通过网络服务器访问版本库,一些则绕过网络服务器直接访问版本库。 2.7.3 CVS与SVN比较

表1-1

比较项目 是否依赖系统账号 可否对分支授权 权限控制 是否支持LDAP认证 是否支持图形化账号管理 用户可否获取忘记口令,修改口令 是否支持目录文件名变更 分支管理 二进制文件 事物 处理 换行符 创建分支时间 分支可见查询难易程度 二进制优化 二进制文件标识 二进制文件(图形文件)被破坏程度 是否支持原子提交 修改提交说明 可否指定换行符类型 是否检查换行符设定, 避免跨平台开发带来的混乱 功能扩展 网络带宽 网络带宽占用程度 是否有脱机命令 CVS 依赖 否 否 否 否 否 耗时 难 否 手工 易破坏 否 单个文件 否 否 CVSROOT 高 否 SVN 不依赖 是 是 是(集中管理平台) 是(集中管理平台) 是 快 易 是 自动 不易破坏 是 是 是 是 hooks 脚本 低 是 3 大势所趋——开源版本控制工具

通过第二章对各种版本控制工具的介绍,相信你对版本控制工具有了初步的了解。那么怎样来论定它们的优劣呢?

3.1选择开源版本控制工具的理由

17

先来看下CVS的基本工作模式: CVS服务器(源代码文档库) 版本 同 步 开发者3 开发者2 开发者1

图1-4

CVS在服务器端维护代码文档库,不同的开发者在本地机器上建立对应代码树,并利用CVS保持本地代码文档同代码文档库的一致。当由于多个开发者对文件的同时修改造成本地与库中的代码文件冲突时,CVS报告并协助解决冲突代码 的合并问题。普通开发者对CVS的使用方法如下: Check out(获取) Merge(合并) Conflict(冲突) Modify Update (修改) (更新) No Conflict(冲突) Commit Update (提交) (更新) Export(导出) 图1-5

Check out命令只需在开始建立本地代码树时使用一次,其后更新本地代码则使用update命令。update命令比较服务器和本地代码库的区别,并把本地代

18

码树中过时的文件自动更新。当完成对代码的修改之后,在提交代码之前同样需要使用update命令,以获取他人并行修改的的代码。如果出现冲突(即对同一文件同时进行了修改),CVS将在本地代码中把两者都保留并标记出来,要求开发者处理冲突。在冲突不存在或已解决的情况下,使用commit命令将服务器代码更新为本地代码。CVS要求为更改提供注释,并自动为更新的文件处理版本编号。当软件需要正式发布时,使用export命令导出不包含CVS设置信息的源代码树。

即使不用拿CVS的升级版SVN,就算是拿没有目录版本控制功能的 CVS 来和商业的版本控制工具相比,我们也有充足的选择开源版本控制工具的理由:

(1)服务器端和客户端一样看起来很美

有一些商业软件的服务器端简直就像是一个垃圾场,用流水号命名的文件名,一个目录下成千上万个文件。CVS以文件为核心,即面向文件的管理方式,项目文件可以方便地组合和移植。

(2)服务器端不使用数据库来作版本控制的数据引擎

为了支持目录的版本控制工具,大多数商业软件选择了一个最为简单和直接的解决方案——数据库,用数据库将文件名和版本库对应。但是引入数据库,服务器的稳定性、可维护性大大下降,成为管理员的噩梦。增量备份计划难以实现,不知道什么时候会出现数据库崩溃。

(3)支持到其他版本控制系统的迁移

对于商业软件,这个答案是否定的。如果允许将版本库导出到其他版本控制系统,简直就是将自己好不容易积累的客户拱手相让。

(4)可定制,可以对提交说明(Commit Log)进行检查,每一次的提交事件都能够收到邮件通知

CVS 的 CVSROOT 脚本扩展,以及 SVN 的 Hooks 钩子脚本,可以让用户充分发挥想像的空间。而商业版本控制工具,有此功能的微乎其微。

(5)客户端的状态保持

熟悉 CVS 和 SVN 的用户应该知道工作目录下的 CVS 和 .svn 隐含目录的作用,就是用于记录版本控制状态信息的。而很多商业软件并没有这个机制,而是靠服务器端来维护此记录:哪台主机、检出哪个版本的代码、存储到哪个目录。这么做的一个弊病就是工作目录不能自由在硬盘中移动,系统重装导致的状态丢失。

(6)成本因素

一是软件采购成本。商业软件版本控制工具十几万美金,而且是和用户数目挂钩的。二是学习成本。商业软件版本控制工具的部署范围非常有限,不能保证

19

新员工一定熟悉该系统,但是如果选择开源的版本控制工具,那么员工的培训费,可能就可以省下了。

(7)客户确认软件的安全性能

客户肯定不会去购买你竞争对手开发的版本控制工具,那么您为什么还会相信其他闭源的版本控制工具呢?

再优秀的版本控制工具都是软件项目开发中的一部份,况且,一个项目的完成并不仅仅涉及版本控制工具,还包括其他的一些工具。一个软件项目的开发成功需要涉及工具的使用,开发人员资源的管理等因素。但是,选择一款优秀的、适合开发团队和项目需求的版本控制工具能够提高开发工作效率和代码的优质性。对于版本控制工具的选择,秉持的一个原则是:“不选贵的,只选对的。”

4总结

通过这次的软件工程课程设计,我比较熟练的掌握了软件工程的基本思想以及软件开发的基本流程。我受到了一次用专业知识、专业技能分析和解决问题的全面系统的锻炼。并且在综合知识的选用方面,在应用软件开发的基本思想、方法方面,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步。为日后成为合格的应用型人才打下良好的基础。这次在指导老师的帮助下,在同学的帮助下,基本上完成了设计任务,在软件的设计方面也有了一定的提高,熟练掌握了SVN版本控制工具的使用,为今后走上工作岗位打下了专业基础。

在这次的课程设计中,让我深刻认识到版本控制工具的妙用,开始我只是以完成任务的心态去学习版本控制软件的使用。但随着慢慢深入的学习和使用,再结合以前编程时因没有试用版本控制软件而造成的种种麻烦,终于让我体会到了版本控制工具的无穷妙用。由于现在的软件开发项目几乎都是多个开发人员共同负责同一个软件文档的开发,每个人在各自的机器上有整个软件文档的备份,并对之实施编程开发,在分别完成各自任务之后,再通过文本比对工具将各自机器上的不同版本的程序整合到一台机器上,故对我们这些有可能会从事软件开发工作的人来说,掌握软件控制工具是我们的必备技能之一。让我也体会到进行软件开发不是一件简单的事情,它需要设计者具有全面的专业知识、缜密的思维、严谨的工作态度以及较高的分析问题、解决问题的能力,而我在很多方面还有欠缺。在以后的学习过程中我会从这次课程设计中汲取教训并寻求高效率优方法的学习态度不断充实自我完善自我。

参考文献

1.张海潘 《软件工程》 北京清华大学出版版社 2003

2. Linux系统下的版本控制 http://www.csharpwin.com/dotnetspace/11024r3917.shtml

3. CVS和SVN的比较 http://wenku.http://wxphp.com//view/42a590104431b90d6c85c7c4.html

20

4. 软件管理版本 http://hi.http://wxphp.com//songyl525/item/a9cc218f7011b8c9b17154c9

http://baike.http://wxphp.com//view/2942399.htm 5. SVN教程 http://www.99191.com

6. http://v.youku.com/v_show/id_XMzA5NDQzNjg0.html

21

五星文库wxphp.com包含总结汇报、外语学习、行业论文、IT计算机、计划方案、考试资料、资格考试、word文档、旅游景点、人文社科以及软件工程课程设计报告-版本控制工具综述等内容。

本文共5页12345