软件配置管理相关概念.ppt_第1页
软件配置管理相关概念.ppt_第2页
软件配置管理相关概念.ppt_第3页
软件配置管理相关概念.ppt_第4页
软件配置管理相关概念.ppt_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

1 1软件配置管理 SCM 相关概念 9 1 1版本管理不同产品的简单介绍配置管理软件分类 软件的版本管理 CVS是软件版本管理的工具 构件管理缺陷和跟踪管理产品介绍 1 高端产品如 RationalclearCase2 中端产品如 PVCS pvcsversionmanager pvcstracker Perforce 3 低端产品vss 1 2CVS概述 cvs是什么cvs是ConcurrentVersionsSystem的缩写 是强大而复杂的现代版本控制系统 cvs的特点免费 作为开放源代码的世界杰作 CVS是免费的 在中国 北京国联捷讯信息技术有限公司 为需要CVS技术支持的公司提供咨询 跨平台 CVS支持所有的操作系统 而且作为典型的客户 服务器模式的软件 CVS支持跨平台开发 cvs可以用在AIX HPUX Solaris SUNOS Linux Windows 等不同的平台上开发应用 而共用一个CVS服务器 强大的分布式开发支持 CVS一直以支持分布式开发作为其基本特征 支持并行开发 允许多个开发人员对同一个文件进行开发工作 并对多个开发者的工作进行整合 强大的可塑性 不论是一个源代码组成的项目开发管理 还是代码量超过几百兆的项目 均管理自如 触发器及定制功能 这种功能帮助开发者将CVS和变动 跟踪系统紧密集成 以形成完整的软件配置管理系统 SCM 1 3CVS的安装和配置 在unix linux平台上安装CVS服务器安装是超级用户执行的 假设选择一台Linux服务器 假设主机名为hostcvs 在cvs权威网站www cvshome org上下载包cvs 1 11 1p1 tar gz 在linux中可能已经包含后CVS 运行 root hostcvs root gzip dvfcvs 1 11 1p1 tar gz root hostcvs root tar xvfcvs 1 11 1p1 tar进入目录cvs 1 11 1p1 运行 root hostcvs root configure root hostcvs root make root hostcvs root makeinstall 如果未报错误 则CVS服务器安装OK了 whereiscvs指定CVS仓库cvs仓库 Repository 是保存软件资源的设备 可以根据需要选择一目录作为库的位置 如 cvsap 用超级用户建相应目录 mkdir cvssrcmkdir cvssrc masterCVS服务器的初始化在确定CVS仓库位置后 就可以初始化CVS服务器 在初始化的过程中CVS创建其文件系统 并产生原始内容 在目录 cvsap目录下 以超级用户身份在提示符下执行 root hostcvs root root hostcvs root cvs d cvssrc masterinit其中的目录project为项目源代码的资源目录 执行命令 root hostcvs root ls cvssrc masterCVSROOT root hostcvs root ls a cvssrc master CVSROOT该目录下是原始内容 如果该目录为空 则初始化失败 用户组和用户帐号的设立用户组和帐号的设立原则 进行配置管理的用户和进行开发的用户分别设立不同的用户组 如 cvsadmin和cvsuser两个组 在两个不同组上建立管理用户和开发用户 CVS的权限设定的原则是 CVS用户必须拥有对 cvsap src master CVSROOT目录及其中所有文件的读权限 CVS用户必须拥有对 cvsap src master CVSROOT目录下history文件的写权限 CVS用户如果希望对系统中的模块 如 project 代码等资源的修改 必须对该目录有写权限 对于普通的开发用户应该设为 对 cvsap src master CVSROOT目录及其下的所有文件有读权限 对 cvsap src master CVSROOT history下的文件有写权限 对某个项目 模块 下的文件有读写权限 如 project 区分管理员和普通用户的权限设定1 添加cvsadmin用户组2 添加cvsuser用户组3 添加CVS管理员帐号到cvsadmin4 添加CVS普通用户到cvsuser5 让cvs管理员拥有对配置目录及其下文件的读写权限 同时给cvs的普通用户对配置目录及其下文件的读权限 root cvshost root chgrp Rcvsadmin cvsap src master CVSROOT root cvshost root chmod R064 cvsap src master CVSROOT6 给cvs普通用户对目录 cvsap src master project的读写权限 root cvshost root chgrp Rcvsuser cvsap src master project root cvshost root chmod R060 cvsap src master project CVS的口令服务器CVS口令服务器配置的目的是使cvs用户的远程计算机能访问CVS服务器 其方法分两步 以超级用户在hostcvs服务器上的 etc services的文件中添加一行 cvspserver2401 tcp 最简单的方法是执行命令 echocvspserver2401 tcp etc services 注意 端口号2401不要重 这种方式是IBMUNIX系统 如果使用的是Redhat6 2及以前的版本或使用inetd超级服务器的UNIX版本 用超级用户在 etc inetd conf文件中添加一行 加在末尾 cvspserverstreamtcpnowaitroot usr local bin cvscvs f allow root cvsworkpserver 如果是Redhat7 1或其他新版本的Linux 则用超级用户身份打开 etc xinetd conf文件 并在文件中添加 servicecvspserver port 2401socket type streamwait nouser rootserver usr bin cvsserver args f allow root cvssrc masterpserverbind 本机器的IP地址 启动inetd xinetd超级服务器配置好的口令服务器是包在inetd xinetd超级服务器内的一个程序 启动的方法为用超级用户登陆 执行命令 root hostcvs root unsetHOME用来清除超级用户的 HOME的环境变量 否则执行CVS命令会出错 root hostcvs root etc rc d init d inetdrestart也可能是 etc init d inetdrestart 或者 root hostcvs root etc init d xinetdrestart至此 CVS服务器安装和配置工作完成 如果是HPUNIX则启动超级口令服务器的方法为 ps ef grepinetd找出inetd进程的进程号kill HUP让inetd进程重新读入配置文件使得CVS服务生效测试CVS口令服务器在cvshos服务器上 执行如下命令 root cvshost root telnetlocalhost2401 客户端的安装和配置介绍CVSROOT环境变量设置格式 19页 客户端的Unix linux的安装和CVS服务器安装过程相同 这里不再赘述 CVSforunix linux客户端的永久配置方法为 sh ksh 用编辑器打开 HOME bash profile文件添加 CVSROOT pserver cloud1 10 60 40 34 src masterexportCVSROOTcsh 用编辑器打开 HOME cshrc文件 在文件的末尾添加 setenvCVSROOT pserver public 192 168 25 6 cvssrc master其中的public为客户端的用户在服务器端的帐户 用户名 CVSforWinCVS的永久配置为 在窗口中选择Admin Preferences并在General选项卡中输入 如图 关于unix linux客户端的临时配置 sh bash test linuxtest exportCVSROOT pserver public 192 168 25 6 cvsap src mastercsh test linuxtest setenvCVSROOT pserver public 192 168 25 6 cvsap src master 测试远程访问CVSforunix linux test linuxtest cvslogincvspassword WinCVS Admin Login输入口令即可 在VisualStudio中集成CVS 23 1 4CVS工作原理及基本命令 仓库的概念已经描述 在CVS库中CVS以一种特殊的文件格式 RCS 来保存这些资源 仓库按照目录和文件结构组织 仓库中每个目录对应一个项目 如 和cvsap src master在同一层次的目录除CVSROOT外 其他每个目录都应该是不同的项目 其保存了各个版本的文件 并记录了版本的修改信息 统一文件的不同版本之间具有派生关系 在版本库中只存储不同版本间的改动 从而节约空间 29页 工作拷贝是指每个开发人员在开发过程中拥有一个独立于其他开发人员的整个软件项目的全部代码的拷贝 在客户端 它和主拷贝 仓库 构成了CVS客户 服务器模式 工作拷贝的每个目录中有一个CVS目录 其下的文件是cvs管理控制文件 31页 cvs命令的格式 cvs cvs option command command option 如 your client cvs Qchecktest可以用命令 cvs help commands来查看cvs的命令 在winCVS中在commandlinesetting菜单中输入命令即可 Init命令 初始化版本库 如 cvs d cvsap src masterinitimport命令从客户端登陆服务器 在客户端有目录 如 test 其中有源文件和子目录 将目录test下的内容加入服务器作为一个项目 如 project test 即一个baseline 命令为 your client cdtestyour client cvslogin loggingintoyourserver cvspassword 你的服务器端cvs帐户口令 your client cvsimport m initialimport testSSEstart该命令将当前目录 包含子目录 下的所有内容 都放进CVS系统中 其中 m表示在命令中要加注释内容test为该项目名称SSE为厂商标识start为版本标记没有冲突表示创建新的项目仓库成功 在WinCVS中可以在菜单中实现 checkout命令checkout命令是将我们选定的CVS服务器上指定仓库中的一个项目代码取到本地的工作目录下 如果要将仓库中的test项目的代码取到本地个人目录下 执行 your client cd HOMEyour client cvscheckouttest项目代码会保存在个人目录 HOME test下供你个人开发或修改 当你打开checkout出的源代码所在的目录 会发现代码中的每个目录 包括每个子目录 中均有名为CVS的子目录 这些目录并不属于代码 它是CVS系统使用的目录 其中保存着CVS管理文件 这是工作拷贝与普通目录文件的不同 这些文件对于CVS很重要 所以不要随便的改变或移动 删除这些CVS目录及其中的文件 解释CVS子目录中的文件 43页 注意 这里的test为用户的目标目录 根据用户client端的配置 CVSROOT pserver public 192 168 25 6 cvsap src master 命令cvscheckouttest从服务器的库中 即将目录 cvsap src master test下的所以内容包括子目录检出到客户机的 HOME test目录下 同时生成目录test 当然 也可以检出单个文件 diff命令CVS能将你工作的拷贝中的源代码文件与仓库中的版本进行比较 发现差异 45页 如 your client cvsdifftest cyour client cvsdiff ctest c该命令能看到对照的结果 应该注意的是显示内容中的 表示添加行 表示修改 其余的显示内容和UNIX系统中的diff命令显示相仿 your client cvsdiff r1 1 r2 1test c该命令比较库中两个不同版本文件差异 commit命令提交操作会改变仓库内容 提交之后 代码成为整个系统的一个部分了 由于软件的复杂性 需要对提交进行控制 所以在提交时应当遵循一定的流程 进行一定的软件质量保证 SQA 工作 这些工作包括评审 review 提交报告等 提交源代码的命令为 your client cvscommit m addstringvariableandheaderstring h test c注意 如果输出类似以下内容的结果即提交失败 此时应该用update命令更新个人工作目录下的源代码 cvscommit Up to datecheckfailedfor test c cvs commitaborted correctaboveerrorsfirst 这里的 m 后面的是CVS注释 CVS强制要求用户在任何一次提交 导入等操作时加入注释 养成注释的习惯非常重要 CVS支持中文注释 如果不在命令行中加入注释 那么CVS将自动启动默认编辑器 请用户输入注释 只有用户保存注释并退出这个编辑器之后 提交才能成功 update命令该命令既可针对单个文件 也可针对一个目录 或者整个项目 更新单个文件your client cvsupdatetest c执行上述命令后 用户当前工作目录中的文件test c的内容与仓库中的最新版本完全相同了 因为在你checkout该文件后 在修改该文件的过程中可能他人已经修改并提交了该文件 即你的修改不是基于库中最新版本 所以 你必须先update 再提交该文件才能提交成功 不过可能有冲突要解决 原因是对同一个文件的同一处代码进行了不同的修改 解决冲突的办法就是通过编辑文件 修改发生冲突的部分 对于逻辑问题CVS无法发现 所以版本冲突的处理应该与软件开发中的需要相结合 另外 可以通过more命令看以下合并后的文件 如 moretest c 更新整个项目your client cvsupdate执行上述命令后 用户当前工作拷贝中属于本项目的所有文件与仓库中的最新版本完全相同了 需要注意其警告信息 log命令每次提交一个CVS操作时 必须填写日志信息 否则拒绝提交 日志信息可以在命令行中加 m 参数表示 如果日志过长 可以不用 m 参数而直接运行 CVS会弹出一个编辑器 让用户在编辑器中输入注释信息 CVS对注释信息没有长度限制 这种日志信息是CVS进行软件变化跟踪的一种机制 每个版本均有日志信息 用户可以查看某个文件的全部历史日志记录 也可以指定查看某个版本或某个日期的日志记录 查看日志信息使用命令 cvslog 53页 查看文件test c全部日志 使用命令 your client cvslogtest c查看test c文件1 2版本的日志 使用命令 your client cvslog r1 2test c再如 cvslog d 2002 06 01 2002 07 01 2002 08 01 2002 09 01 共享日志在有时很有用 如果一个提交命令一次提交多个文件时 这些文件共享一个日志信息 如果你希望将几个文件一起提交 并且在之后能发现这些文件是同时提交的 则只有相同的日志信息能帮助你实现这一点 如 没空格 your client cvscommit m fixedbugno 8888 test cMakefileyour client cvslogtest cMakefilestatus命令该命令是查看已经checkout出来的文件信息 如 your client cvsstatustest cyour client cvsstatus vtest c 同时能查看tag和branch 版本回退 55页 如果用户提交了一个错误的版本 而不希望错误的版本是当前最新版本 一个简单的方法就是回退 方法之一 首先更新到最新版本 再取出旧版本重新提交 按下列秩序执行命令 your client cvsupdateyour client cvs Qupdate p r1 2test c test c 该命令不能在windows上执行 上面命令假设 现错误版本号为1 3 正确版本号为1 2 该命令中 Q 是不输出无关的信息 注意不要执行命令cvsupdate r1 2test c这样会出现问题 your client cvscommit m revertedtorevision1 2 test ccvsdiff r1 2 r1 4test c结果可以看出两个版本是否相同方法之二 用命令 your client cvsupdate j1 3 j1 2test c将1 3版本与1 2版本之间的差异补到1 3版本上去 your client cvsstatustest c查看checkout出的1 3版本的状态 已经在本地修改 your client cvscommit m revertedtorevision1 2 test cyour client cvsdiff r1 2test c在项目中添加新的目录和文件命令 add将工作目录中新加的目录和文件添加到cvs库中的方法 在工作目录中创建目录和文件后才能进行 加文件的第一步 your client cvsaddnewfile执行第二步 your client cvscommit m added newfile 加目录 不管目录是否为空目录 只需一步 your client cvsaddnewder注意 目录中的文件需要分别加入 删除文件命令 remove必须先删除工作目录中的该文件 删除前应该将修改过的本文件提交保存 作为仓库中的新版本 命令如下 第一步 your client rmoldfile 该命令不能在windows上执行 your client cvsremoveoldfile上两步可以合并 your client cvsremove foldfile第二步 your client cvscommit m removed oldfile大家可以按步骤看一下工作目录cvs目录下的Entries文件有什么变化 对删除的目录因为cvs不对目录进行版本控制 所以和删除文件不同 没有一个专门的命令 例如 要删除目录olddir your client ls aolddirtest ctest1 ctest pcyour client cdolddiryour client ls atmp ctmp1 c以下是删除目录olddir的命令 your client cvsremove ftmp ctmp1 cYour client cvscommit m removed tmp ctmp1 cyour client cd your client cvsupdate Pyour client cvsupdate 所有空目录均从工作目录中删除 这时目录olddir从工作目录中消失注意 此命令不会将库中新添加的目录取到工作目录中 可执行命令 your client cvsupdate d 清除 删除 文件和目录名的更改因为cvs对文件和目录的更名缺乏支持 所以必须中其他方法处理 该文件makefile名的方法一为 your client mvmakefilemakefile mkyour client cvsremove fmakefileyour client cvscommit m removedforrenaming makefileyour client cvsaddmakefile mkyour client cvscommit m addedasarenamedversionofmakefile makefile mk方法二 在服务器上直接操作 root cvshost root cd cvsap src master test root cvshost root mvmakefile vmakefile mk v这种改法的危险 确保没人访问该文件 不知道什么时候执行的修改 无法获得文件在改名前的旧版本 改目录名的方法也有两种 方法一 在工作目录中创建新目录 将旧目录下除cvs目录外的所有文件和子目录移到新目录下 然后删除旧文件 在添加新目录 并添加文件 your client mkdirnewdiryour client mvoldnew newdiryour client cdolddiryour client cvsremove f your client cvsupdate Pyour client cvsupdateyour client cd your client cvsaddnewdir 方法二 root cvshost root cd cvsap src master test root cvshost root mvolddirnewdir这种方法是禁止任何人访问数据库 且方法危险 步主张使用 1 5测试环境 进入测试环境步骤 在个人的pc机上启动linux或windows操作系统 配置好客户端 在linux系统中也可以用startx进入画面操作系统 而后用自带的终端操作命令 在windows系统中直接启动WinCVS即可 服务器的IP地址 10 40 52 64 服务器中cvs用户为du cloud du cloud 管理用户 usera b c usera b c 为开发用户 可以按照前面讲的命令去进行练习 1 6CVS的高级主题版本标签和版本分支1 6 1版本在配置管理的语境里 版本的概念应该是revision 而不是version 版本的编号可以系统自己编 也可以用户自定义版本号 在系统自己编号时 如果项目中添加新文件 该文件不版本号码的第一位与本目录下版本号码最高的文件第一位相同 第二位是1 如 一个目录下有三个文件其版本号为1 5 2 8 5 14 那么新添加的文件版本号应该是5 1 如果用户自己给某个版本编号 则这个版本编号必须大于项目中的所有文件的版本号 1 6 2版本标签 tag 版本标签是符号化的版本号码 具有直观 易于记忆和管理的优点 用于阶段式 里程碑 的版本标记 是连接项目中不同文件不同版本的手段 例子 通过WinCVS展示版本标签标签的设定 Du cloud linuxtest cvstagrel 1 0 1test c 注意 很少给单个文件设标签 给目录下所有文件贴标签 Du cloud linuxtest cvstagbaseline 1标签的删除 重命名和移动删除 Du cloud linuxtest cvstag dbaseline 1重命名 Du cloud linuxtest cvstag rbaseline 1baseline 2 Du cloud linuxtest cvstag dbaseline 1移动 Du cloud linuxtest cvstag r1 6 Fbaseline 1test c我们将test c的标签从旧版本1 5移到新版本1 6上 标签的命名baseline 1 20030623Release 20030522Nightly 20030321等 标签的查看 Du cloud linuxtest cvsstatus vtest c Du cloud linuxtest cvsstatus v确定标签要贴的位置 Du cloud linuxtest cvstag cbaseline 1贴标签时注意不要遗忘已经修改但没有提交的文件 按约定贴标签 仓库中直接给模块加标签 按日期贴标签 下例是将模块test的所有文件在20030624号0时0分前提交的最后一个版本贴上标签 Du cloud linuxtest cvsrtag D20030624nightly 20030624test按版本号 已经有的标签贴新标签 Du cloud linuxtest cvsrtag rnightly 20030624 老tag rel 2 1test 贴新标签但test下新加程序不挂到标签上 Du cloud linuxtest cvsrtag fnightly 20030624test 将test下新加的程序的最新版本强制的挂到nightly 20030624上 Du cloud linuxtest cvsrtag r1 5rel 2 1test Du cloud linuxtest cvsrtag f1 5rel 2 1test附着性标签1 引起附着性标签的命令有 cvsupdate rtag 标签号 cvsupdate Ddate 更新到不晚于date的最新版本 cvsupdate rx y 版本号 test ccvscheckout rtag 标签号 cvscheckout Ddate date之前最近的版本 cvscheckout rx ytest c2 附着性标签在版本分支中的使用 保持版本分支号与标签有直接的关系 也就是标签附着在分支号上 3 保持某些文件的不改动 只要对几个文件执行了cvsupdate r命令 如 cvsupdate r1 28ax c则版本1 28就会成为附着性标签 以后执行cvsupdate命令时这个文件不会更新 直到解除附着性为止 另外 还有1 中的命令情况相同 4 解除附着性标签 Du cloud linuxtest cvsupdate Atest c该命令解除附着性标签 将checkout主干的最新版本并放本地 1 6 3如何获得某个特定的版本根据版本号码或版本标签获得 Du cloud linuxtest cvsupdate r1 1test c获得某一版本标签的整个软件的源代码 Du cloud linuxtest cvscheckout rbaseline 1test或者跳转到某个版本标签的版本 已经有工作拷贝的情况下 Du cloud linuxtest cvsupdate rbaseline 1根据时间获得特定版本 更新到不晚于date的最新版本 Du cloud linuxtest cvsupdate D 2002 05 08 Du cloud linuxtest cvsupdate D 2002 05 0823 59 59 Du cloud linuxtest cvsupdate D 2002 05 09 Du cloud linuxtest cvsupdate D 2002 05 0823 59 59GMT 让用户使用GMT时间 如果要取回旧版本修改 而不是基于最新版本 修改后提交形成最新版本 方法有三 1 逐个文件处理 Du cloud linuxtest cvsupdate p D 2003 05 18 test c test c 方法二 一次性处理所有文件 Du cloud linuxtest cvsupdate A Du cloud linuxtest cvsexport D 2003 05 18 test Du cloud linuxtest cp rtest home du cloud 将test c的baseline 1标签移动从旧版本1 5到新版本1 6上 cvstag r1 6 Fbaseline 1test c1 6 4版本分支 Du cloud linuxtest cvsco dtest brh rbase 1test Du cloud linuxtest brh cvstag bbase 1 brh Du cloud linuxtest brh cvsup rbase 1 brh 可以在分支中修改程序如 test c Du cloud linuxtest brh cvsci m fixedbugno111 test c 提交到分支上 Du cloud linuxtest cvsup jbase 1 brh 分支版本合并到主干版本中 Du cloud linuxtest cvsci m mergedfrombranch base 1 brh Cvs输出 export 发布代码 去出没有CVS痕迹的代码 cvsexport rrel 1 主干上tag号 dtest release1testcvsexport rbrh tag brh 分支名称 dshanghai releasetest Du cloud linuxtest tar cvftest release1 tartest release1 Du cloud linuxtest gziptest release1 tar1 6 5cvs与二进制文件重要的二进制文件也需要进行版本管理 如 web应用的大量图片 控件 动态连接库 unix不同操作系统下的编译器 函数库等等 CVS在处理文本类型的文件 包括各种源代码文件 HTML XML文件等 CVS对文本类型的文件进行版本管理时 会对文件做一些秘密的处理 在客户端和UNIX仓库之间 CVS会自动进行回车 换行替换和关键字扩展处理 CVS对二进制文件管理的不好 和ClearCase相比 ClearCase具有文件类型 可以进行二进制文件的比较 但是ClearCase也要尽量避免二进制文件的分支和合并 CVS无法进行二进制文件的合并和分支 不过在实际应用中二进制文件的合并和分支是没意义的 CVS对二进制文件的管理和保存 1 在CVS系统中保存二进制文件 应该使用 kb 选项来禁止CVS对文件进行回车 换行替换和关键字扩展的加工 这个选项只需要在cvsadd命令中使用 本选项是一个附着性选项 如果没有附着性每次执行cvs命令时都需要这个选项 如 cvsadd kbbinfilecvscommit m addedbinfile binfile注意 二进制文件是原封不动的保存在仓库中 不能按照增量方式保存两个版本的差异 而是累加 2 恢复二进制版本 如果忘记使用 kb 选项 添加了二进制文件并提交了仓库 库在UNIX Linux平台上可以通过以下命令恢复 cvsadmin kbbinfile 反扩展 cvsupdate Abinfile 工作拷贝中的文件恢复二进制 如果库在wi

温馨提示

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

评论

0/150

提交评论