软件配置管理及SVN工具使用.doc_第1页
软件配置管理及SVN工具使用.doc_第2页
软件配置管理及SVN工具使用.doc_第3页
软件配置管理及SVN工具使用.doc_第4页
软件配置管理及SVN工具使用.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件配置管理 DW 2010-6-2一、什么是软件配置管理?软件配置管理有多种定义,有把软件配置管理描述为对软件开发组所建立的软件的修改进行标识、组织和控制的艺术,其目标是减少错误,提高生产力。也有从另一个角度对软件配置管理进行了定义的:配置管理能够系统地处理变更,从而使得软件系统可以随时保持其完整性。配置管理又可称为“变更控制”,可以用来评估提出的变更请求,跟踪变更,并保存系统在不同时间的状态。 软件配置管理是一套规范、高效的软件开发基础结构。作为管理软件开发过程有效的方法,SCM早已被发达国家软件产业的发展和实践所证明。SCM可以系统地管理软件系统中的多重版本;全面记载系统开发的历史过程,包括为什么修改,谁作了修改,修改了什么;管理和追踪开发过程中危害软件质量以及影响开发周期的缺陷和变化。SCM对开发过程进行有效地管理和控制,完整、明确地记载开发过程中的历史变更,形成规范化的文档,不仅使日后的维护和升级得到保证,而且更重要的是,这还会保护宝贵的代码资源,积累软件财富,提高软件重用率,加快投资回报。SCM是通往ISO9000和SEI CMM标准的一块基石。在软件开发团队中,正确地采用、实施软件配置管理系统,必将提高生产力,增强对整个项目的控制,改善软件产品的质量,从容面对快速面市和产品质量的双重压力。软件配置管理系统的实施,一般来讲要考虑两个方面的因素:流程和工具。流程和工具是相辅相成的,流程起决定性作用,它确定了管理的规则和方法,工具用来将变更存储在一个中央存储库中,可以重现任一时期的历史版本,一个好的工具可以提高效率,是贯彻实施流程的必要手段。因此,在一个开发团队中,实施配置管理流程比采用配置管理工具更重要,我们需要充分考虑,制定出适合自己企业的配置管理流程,该流程必须与公司的开发规范、质量系统等完全结合。二、配置管理的功能配置管理系统应该具备以下主要功能:并行开发支持:因开发和维护的原因,要求能够实现开发人员同时在同一个软件模块上工作,同时对同一个代码部分作不同的修改,即使是跨地域分布的开发团队也能互不干扰,协同工作,而又不失去控制。修订版管理:跟踪每一个变更的创造者、时间和原因,从而加快问题和缺陷的确定。版本控制:能够简单、明确地重现软件系统的任何一个历史版本产品发布管理:管理、计划软件的变更,与软件的发布计划、预先定制好的生命周期或相关的质量过程保持一致;项目经理能够随时清晰地了解项目的状态。建立管理:基于软件存储库的版本控制功能,实现建立(build)过程自动化。过程控制:贯彻实施开发规范,包括访问权限控制、开发规则的实施等。变更请求管理:跟踪、管理开发过程中出现的缺陷(Defect)、功能增强请求(RFE)或任务(Task),加强沟通和协作,能够随时了解变更的状态。代码共享:提供良好的存储和访问机制,开发人员可以共享各自的开发资源。三、Subversion 简介 Subversion是一个免费的开源的版本管理系统,它是作为CVS(Concurrent Versions System)的取代品出现的。不同于 CVS 只关心文件的内容以及文件是否存在,所有文件、目录的相关操作都是被版本化的,例如文件的改名、拷贝等等;在 Subversion 中,提交操作是不可分割的,修订版本号是基于每次提交操作而非文件。 作为程序开发人员,我们没有必要了解Subversion的所有特性的方方面面,我们的目的是使用它来对我们的project进行方便的简单的版本管理。 1.客户端下载及安装首先,请登录SVN官网 / 下载服务端和客户端TortoiseSVN安装包。装TortoiseSVN,直接运行TortoiseSVN-706-win32-svn-1.4.4.msi按照提示安装即可,不过最后完成后会提示是否重启,其实重启只是使svn工作拷贝在windows中的特殊样式生效,与所有的实际功能无关,为了立刻看到好的效果,还是重新启动机器。 通常使用TortoiseSVN客户端,它是作为一个系统插件存在的。可以看作Windows资源管理器的插件,安装之后Windows就可以识别Subversion的工作目录。2.登陆Subversion获取Subversion目录树浏览,找一个本机工作区,右键TortoiseSVN Repo-browser。 3.输入登陆路径:外网:4/stb1/ST5105/JINLIN/Trunk/app/. (dbase,menu等)内网:48/stb1/ST5105/.按OK键,即可以看到目录树和对应的文件。如上图一样打开目录下的文件,说明你对此文件夹的权限正常。四、Subversion基本操作1.第一次登陆Subversion,系统提示输入用户名和密码,请输入用户名“XXX”和 密码“123456”。可以在“Save authentication”前打勾,记住密码,下次登陆Subversion直接进入。2. 初始化导入来到我们想要导入的项目根目录,在这个例子里是D:MyWork Sample,目录下有若干个文件: 1)右键-TortoiseSVN-Import.2)URL of repository输入“48/stb1/Platform”,点击OK。注意:上传文件时,请添加备注,以便查询!出现如下窗口表示已添加成功:至此初始的数据就已经全部导入到了我们刚才定义的版本库中。3.检出版本Check out,注意检出的目录和本地要正确对应。此检出并不会修改你本地的文件。 1)右键-TortoiseSVN,点OK确定下载文件到本机工作区。五、SVN的各种状态1.更新(update) 在文件夹或文件上右键点击选择“SVN Update”,系统将默认的将所选择的文件夹或文件更新至最新的版本。如果更新到特定的版本,可以使用“TortoiseSVN-Update to revision”,在弹出的窗口中选择“Revision 并输入需更新至的版本号” (注:Subversion的每一次提交对应一个版本库树的快照,所以update至某一个revision,则是update至某一个版本库树的快照。) 2.提交(commit) 一旦我们改变了文件夹下边的某个文件时,TortoiseSVN将文件的标志换成感叹号的标记,此时如果我们希望将变更的文件提交到版本库中时,只需在文件上点击右键,选择“SVN Commit.”,在弹出的窗口中输入提交的信息和选择需要提交的文件(建议在所有修改过的文件的顶层目录做提交,将某一次的修改一次性提交,利用subversion的原子性可以保证项目不会存在不完整的版本)。如图所示: 点击OK之后文件的变更信息便保存到了Subversion的版本库中去了。上传成功后,Subversion会自动给上传文件一个修订版本号。 为了确认我们的修改已被提交到版本库,我们还可以通过右键点击文件,选择“TortoiseSVN-Show Log”,查看上传列表。 注意:上传文件时,请尽量添加备注!3.添加新的文件或文件夹(add)在新文件或文件上右键点击选择“TortoiseSVN-Add.”系统弹出确认窗口点击OK,文件夹会被标上加号,这个时候还未将其加入至版本库中去,需将其提交,右键“SVN Commit.”,此时所选择的文件或文件夹将被全部添加到版本库中去。 4.删除文件或文件夹(delete) 在欲删除的文件或文件夹上右键点击,选择“TortoiseSVN-delete”,然后再提交,则所选择的文件或文件夹便从版本库删除了。 5.重命名(Rename)如需重命名,需由Tortoise来做,不能直接在操作系统上重命名。在欲重命名的文件或文件上右键点击,选择“TortoiseSVN-rename.”,在弹出的窗口中输入新的文件或文件夹名称,点击OK,将会多出一个新命名后的文件或文件夹,再将它们提交。(重命名是一个将原文件夹做一次复制然后删除旧文件夹将新的文件夹提交上去的过程,保留历史记录)。 6.撤销所做更改( Revert )在编缉了某些文件或文件后,如果需要返回修改前的版本,则右键点击,选择“TortoiseSVN-Revert.”进行撤销,将文件恢复到修改前的版本。 7.状态查询( show log ) 显示文件或文件夹的日志信息; 8.浏览版本库(Repo-browser) 9.标签和特殊版本项目 使用copy命令 svn copy http:/yourhost/repos/project/trunkhttp:/yourhost/repos/project/tags/1.0.0 10.更改验证的用户在我们保存验证信息后,如果需要更换另一个用户登录,则需右键点击,选择“TortoiseSVN- setings”,然后从左边的选项中选择“Save Data”,点击后边的Authentication data 旁边的Clear按钮清楚缓存的认证信息,下次访问时便会要求重新输入用户名和密码。六、常犯错误举例1.服务器与本地代码冲突 通常在上传文件到基线库时,开发人员会清除中间文件,如:1) *.tco文件, *.bin文件, *.scc文件,*.src文件; 2)目录 SVN, 目录objs; 3)各种编译器自行生成的临时文件及目录;后续软件工程师在修改本地工程后,准备上传代码时,发现本地代码与服务器代码不统一,图标会由绿勾变成黄色叹号如图:2.文件更新的冲突处理 除了未清除中间文件发生此种情况外,还会出现在版本不统一。所以这又回到了上面提到过的Update和Commit,软件工程师在Commit本地修改的工程前,一定要先Update服务器上的工程,保持本地代码与服务器的一致性。当你Update出现了冲突时,你更新前的文件,没有冲突标志,只是你最新更改的内容。(如果Subversion认为这个文件不可以合并,文件不会创建,因为它和工作文件相同。)冲突的文件内容,在冲突的地方将被使用黄色叹号标志出来,用户自己进行合并的取舍。解决冲突之后,右键选择“TortoiseSVN- resolved.”,Subversion删除冲突所产生的文件,此时你才可以进行提交。( 也可以手动删除此类文件。) 3.上传代码报错举例:七、Linux下subversion简单使用1.SVN安装SVN就是我们在Linux下面使用的subversion客户端,其安装文件在服务器(5)的/public/guoziyun/Software/subversionClient下面,是一个rpm包,安装十分方便。将Esvn.rpm下载到本地后运行rpm ivh Esvn.rpm即完成esvn的安装。在终端输入svn help就可以看到svn的帮助,具体查看某个子命令(如import)的帮助可以输入 svn help import 2.SVN使用我们常用的SVN操作不外乎是提交(commit),导入(import),导出(export),检出(checkout),检入(checkin),添加(add),改名(move),删除(delete)等,下面就针对以上的常用操作分别给出解释和示例。更多更详细的用法请阅读subversion在线帮助:/svnbook/1.1/index.html注:以下出现在各个子命令用法中的PATH指本地路径,URL指subversion服务器版本库路径标识。1)svn importsvn import 将工程导入到subversion服务器用法:svn import PATH URL别名:无描述:import用于subversion服务器上还没有相应版本库的情况,首次上传我们的工程时用的就是import示例:导入IP Camera工程到服务器,命令如下:svn m “DW” import 7109DVR11 /stb1/Linux/ IP_Camera/Trunk备注 本地文件名2)svn exportsvn export 从服务器上导出工程到本地用法:svn export URL PATH如果不指定PATH,则以URL最后一个字串作为目录名导出到当前路径下别名:无描述:export用于从服务器上下载一个纯粹干净的工程到本地,但是不形成工作拷贝,也就是我们看不到.svn的隐藏文件,当然也无法与版本库配合进行版本控制。如果你想要创建个人工作拷贝,那么应使用checkout子命令示例:导出u-boot版本库代码到当前目录下,命令执行完毕后将看到一个u-boot_1.1.2文件夹:svn export /stb1/st7101/Boot/Trunk/u-boot_1.1.2用户认证登录:“svn checkout - -username duanw https:/.” 3)svn checkout svn checkout 从版本库取出一个工作拷贝用法:svn checkout URL PATH如果不指定PATH,则以URL最后一个字串作为目录名导出到当前路径下别名:co描述:checkout用于从服务器上检出一个subversion工程到本地工作拷贝,我们可以看到.svn的隐藏文件。注意和export的区别示例:将u-boot版本库检出到当前目录:svn checkout /stb1/st7101/Boot/Trunk/u-boot_1.1.2svn checkout 4/stb1/st7101/Boot/Trunk/u-boot_1.1.24)svn commitsvn commit 将修改从工作拷贝发送到版本库用法:svn commit PATH别名:ci(其实就是“check in”的缩写,commit即检入命令,与checkout对应)描述:将修改从工作拷贝提交到版本库。注意,必须是工作拷贝才可以使用commit命令。比如我们在工作拷贝里修改了某些.c文件,想更新到服务器,那么就用commit命令示例:提交已修改的工作拷贝u-boot_1.1.2,整体提交,系统会自动检测修改过的文件并逐一发送到版本库。svn m “DW” commit u-boot_1.1.2如果明确指导自己修改过了一两个文件,也可以针对该文件提交,比如修改了工作拷贝的Makefile文件,那么可以这么提交:svn m “DW” commit Makefile如操作此命令,文件冲突则执行:svn ci m “V0.1 2009-08-25” /opt/ u-boot_1.1.25)svn listsvn list 列出版本库目录的条目用法:svn list URL别名:ls描述:ls子命令就像我们常用的shell命令一样,可以列出版本库目录结构示例:查看版本库u-boot_1.1.2信息svn ls /stb1/st7101/Boot/Trunk/u-boot_1.1.26)svn infosvn info 查看路径或是URL信息用法:svn info PATH/URL别名:无描述:info子命令打印的信息包括路径,URL,修订版本,接点类型,最后修改的作者,最后修改的修订版本,最后修改的日期等信息。示例:查看工作拷贝u-boot_1.1.2信息svn info u-boot_1.1.2打印信息如下:Path:u-boot_1.1.2URL:/stb1/st7101/Boot/Trunk/u-boot_1.1.2Repository Root::/stb1/st7101Repository UUID:b4be88db-2044-4f49-9f16-e6ceba8bc92dRevision:486Node Kind:directorySchedule: nornalLast Changed Author:guozyLast Changed Rev:486Last Changed Date:2008-12-23 09:31:31 +0800 (Tue, 23 Dec 2008) 7)svn updatesvn update 更新你的工作拷贝用法:svn update PATH别名:up描述:update子命令更新我们的工作拷贝,如果命令没有指定版本号,则更新到版本库当前最高版本,如果指定版本号,则更新到指定的版本。更新时对于每个项目开头都有一个表示动作的字符,这些字符意义如下:A 添加D 删除U 更新C 冲突示例:更新工作拷贝u-boot_1.1.2svn update更新工作拷贝到某个版本svn update r 4858)svn diffsvn diff 比较两条路径的区别用法:svn diff -r N:M TARGETREV别名:di描述:diff是一条很有用的子命令,用于比较两个修订版本差异,用法灵活复杂,示例中将给出我们常用的几种使用方法示例:(1) 比较版本库和你的当前工作拷贝差异,这是我们最常用的一种方式svn diff u-boot_1.1.2打印内容:Index: u-boot_1.1.2/Makefile=- u-boot_1.1.2/Makefile (revision 487)+ u-boot_1.1.2/Makefile (working copy) -1,4 +1,4 -# test hahaha+# diff # (C) Copyright 2000-2004 # Wolfgang Denk, DENX Software Engineering, wddenx.de. #根据打印内容我们知道:版本库的修订版本号为487, 与工作拷贝的Makefile文件不一样,版本库的Makefile第一行是”test hahaha”,工作拷贝的Makefile第一行是”diff”(2)查看工作拷贝对旧的修订版本的修改,示例查看工作拷贝和之前的485修订版本差异svn diff r 485 u-boot_1.1.2打印内容如下:Index: u-boot_1.1.2/Makefile=- u-boot_1.1.2/Makefile (revision 485)+ u-boot_1.1.2/Makefile (working copy) -1,4 +1,4 -# GZY+# diffient# (C) Copyright 2000-2004# Wolfgang Denk, DENX Software Engineering, wddenx.de.#(3)使用语法,比较修订版本487和488svn diff /stb1/st7101/Boot/Trunk/u-boot_1.1.2487 /stb1/st7101/Boot/Trunk/u-boot_1.1.2488(4)使用-r参数,比较修订版本487和488(效果与上例同)svn diff -r 487:488 /stb1/st7101/Boot/Trunk/u-boot_1.1.2(5)如果有工作拷贝,则不用输入以上那么长的URL(效果与上例同)svn diff -r 487:488 u-boot_1.1.2/(6)如果只是比较指定的某个文件或某几个文件,比如只比较487和488版本的Makefile有何差异,那么可以这样svn diff -r 487:488 old /stb1/st7101/Boot/Trunk/u-boot_1.1.2 Makefile同理,如果有工作拷贝,也可以不用输入这么长的URL:svn diff -r 487:488 old u-boot_1.1.2 Makefile9)svn addsvn add 添加文件,目录或符号链接用法:svn add PATH 别名:无描述:add子命令添加文件,目录或符号链接到工作拷贝并且预订添加到版本库。它们会在下次提交时添加到版本库,如果你在提交之前改变了主意,那么可以使用svn revert取消预订。示例:预订添加test.c文件,那么首先将你的test.c拷贝到你的工作拷贝中的某个目录,然后:svn add test.c此test.c将会在下次commit时添加到版本库,可以使用svn status命令查看其状态。10)svn deletesvn delete 从工作拷贝或版本库删除一个项目用法:svn delete PATH/URL别名:del, remove, rm描述:PATH指定的项目在工作拷贝中会立即删除,在版本库中会在下次提交时删除。注:svn delete 不能删除不再版本控制下的文件或目录URL指定的项目会直接从版本库删除示例:(1) 删除工作拷贝中的test.c文件,并预订在下次提交时从版本库删除svn rm test.c此test.c在工作拷贝中会立即消失,并将在下次commit时从版本库中删除,可以使用svn status命令查看其状态。(2) 直接删除版本库中的test.c文件svn rm /stb1/st7101/Boot/Trunk/u-boot_1.1.2/test.c 注意:如果直接从版本库将test.c文件删除后工作拷贝中仍然保留test.c,那么下次commit时工作拷贝中的test.c并不会添加到版本库。11)svn revertsvn revert 取消所有的本地编辑用法:svn revert PATH别名:无描述:revert恢复所有对文件和目录的修改,并且解决所有的冲突状态。可以用它来取消所有已经做过的预订操作示例:(1) 丢弃对一个文件的修改svn revert test.c(2) 取消预订的操作svn add 1.c 2.csvn revert 1.c 2.c 12) svn status svn status 查看工作拷贝文件和目录的状态用法:svn status PATH别名:stat, st描述:打印工作拷贝文件和目录的状态。如果没有参数,只会打印本地修改的项目(不会访问版本库),使用-show-updates选项,会添加工作修订版本和服务器过期信息。使用-verbose会打印每个项目的完全修订版本信息。status打印内容的第一列指出一个项目的是添加、删除还是其它的修改。 没有修改。A预定要添加的项目。D预定要删除的项目。M项目已经修改了。R项目在工作拷贝中已经被替换了。C项目与从版本库的更新冲突。X项目与外部定义相关。I项目被忽略(例如使用svn:ignore属性)。?项目不在版本控制之下。!项目已经丢失(例如,你使用svn移动或者删除了它)。这也说明了一个目录不是完整的(一个检出或更新中断)。 项目作为一种对象(文件、目录或链接)纳入版本控制,但是已经被另一种对象替代。示例:我们常在commit之前查看status状态,以做到心中有数svn status13)svn mkdirsvn mkdir 创建一个纳入版本控制的新目录用法:svn mkdir PATH/URL 别名:无描述:创建一个目录,名字是提高的PATH或者URL的最后一部分,工作拷贝PATH指定的目录会预订要添加到版本库,而通过URL指定的目录会立即在版本库建立。示例:(1) 在工作拷贝创建一个目录svn mkdir newdir(2) 在版本库创建一个目录svn mkdir /stb1/st7101/Boot/Trunk/u-boot_1.1.2/newdir14)svn copysvn copy 拷贝工作拷贝的一个文件或目录到版本库用法:svn copy SRC DST别名:cp描述:拷贝工作拷贝的一个文件或目录到版本库。SRC和DST既可以是工作拷贝(WC)路径也可以是URL:WC - WC拷贝并且预定一个添加的项目。WC - URL将WC或URL的拷贝立即提交。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论