版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章SVN-SubversionSubversion简介版本控制的基本原理Subversion基础Subversion基本工作流程及基本操作CheckOut,Commit,Update,StatusSubversion高级操作
Branch/Tag,MergeTortoiseSVN基本操作内容Subversion简介Subversion的作用Subversion的历史Subversion的特性Subversion的架构Subversion的作用一个自由、开源的版本控制系统不是一个简单的SCM系统以替代CVS为目标可以管理任何类型文件,并且追踪变更不具有某些和开发紧密结合的特性,如支持某种特定的编程语言,集成构建工具等官方网址:Subversion的历史2000年,CollabNet公司开始寻找CVS的替代产品2月,这个公司联系了OpenSourceDevelopmentwithCVS的作者KarlFogel,他同意为这个项目工作。同时,他还联系了其他几个人一起开发这个新系统3月,Subversion开始详细设计和编码2001年8月31日,Subversion第一个完整版本问世经过1.0,1.1,1.2直到现在的1.6.13版Subversion的特性(和CVS比较)和CVS的相似性目录的版本化更加好的文件版本管理(例如对文件拷贝,重命名的处理)提交的原子性元数据的版本化可选的网络层对文本文件和二进制文件一致的差异比较算法高效的分支(branch)和标签(tag)操作良好的可维护性Subversion的架构版本控制的基本原理客户/服务器架构的版本控制简述版本控制的数据共享模型数据共享的问题锁定-修改-解锁方案拷贝-修改-合并方案冲突及解决两种方案的对比及选择Subversion的实现客户/服务器架构的版本控制版本库(Repository):按照一定格式存储了所有数据,包括文件和目录经过授权的客户端可以连接到版本库,读写库中的文件版本库和普通文件服务器的不同:版本库会记录每一次的更改,所以,客户端可以任意查询更改的历史。例如:ApplicationContext.java的1451版和1450版相比修改了什么?谁作的修改?什么时候作的修改?等等版本控制数据共享模型版本控制系统的核心任务:协作编辑和数据共享基础问题:怎样允许用户共享信息,并且不会因意外而互相干扰?数据共享问题的产生解决办法数据共享问题解决方案1——锁定-修改-解锁方案锁定-修改-解锁方案的问题可能导致管理问题,如长期锁定文件不放会导致不必要的按顺序开发可能导致死锁例如Sally和Harry都需要修改plugin_mgr.c和plugin_mgr.h,两者互相关联,Sally锁定了.c文件而Harry锁定了头文件,就会进入死锁状态解决方案2——拷贝-修改-合并方案(续图……)冲突(Conflict)及解决(Resolve)冲突的产生:冲突是随着拷贝-修改-合并方案的产生而带来的问题。两个开发者使用拷贝-修改-合并方案编辑同一个文件,并且两人的修改发生了交叠时就发生了冲突冲突的解决:当冲突发生时,开发者会看到一对冲突的修改结果,通常情况下,必须让引起冲突的两个人商议之后,手动选择保留一组更改。在这里,版本控制系统只能提示冲突的发生而无法给出解决建议冲突的预防:增加开发者的交流可以最大限度减少冲突的发生,但是不可能杜绝冲突两种方案的对比及选择虽然锁定-修改-解锁方案有很多的弊端,但在一些情况下仍然是必须的;虽然拷贝-修改-合并模型能解决大多数问题,但它也不是万能的比较:文本文件和二进制文件的特点选择:拷贝-合并模型假定文件是可以通过上下文合并的。通常情况下,文本文件(例如源代码以及用纯文本,HTML,TXT等格式保存的文档)因为其内部结构直观可知,容易理解上下文,所以用拷贝-合并方案较好。而二进制文件(例如MicrosoftWord格式,PDF等格式保存的文档及图片,声音,可执行文件,库等)内部结构复杂,且不容易理解更改处的上下文,采用锁定-解锁方案较好Subversion的实现Subversion主要采用拷贝-修改-合并模型,配合锁定-修改-解锁模型管理数据的共享Subversion基础基本概念工作拷贝(WorkingCopy)修订版本(Revision)文件状态混合修订版本的工作拷贝工作拷贝(WorkingCopy)工作拷贝是本地机器的一个普通的目录。这个目录的内容是版本库中某个目录的拷贝。工作拷贝是私有工作区,可以任意编辑里面的文件并且发布更改通常,一个工作拷贝对应于版本库的一个子目录,日常的开发是针对工作拷贝进行的工作拷贝里面还有一些由Subversion创建和维护的额外文件,用于命令的协助执行,所以它们又叫工作拷贝管理目录。通常,它们都保存在工作拷贝目录及子目录下的.svn目录(隐藏)中,凭借这个目录中保存的信息,Subversion可以识别哪一个文件被修改了,哪一个文件已经过时了,等等修订版本(Revision)SVN的提交(Commit)操作是把工作拷贝的更改发布到版本库的一个原子操作。每当一次提交完成后,版本库的文件系统就进入了一个新的状态,叫做一次修订(Revision),每一次修订都会赋予一个独一无二的版本号,一般是从0开始的递增自然数,一个比一个大初始修订版本是0,这只是一个空目录,没有任何内容。随着每次的提交,版本库里仿佛就多了一个当前内容的“快照”。在版本库中,最新的一个修订版本称为HEAD修订版本(图示)(HEAD)文件状态对于工作拷贝的每一个文件,SVN在管理目录(.svn)记录两项关键的信息该文件作为基准的修订版本(叫做文件的工作修订版本)该文件最后更新的时间戳根据以上两项关键信息,通过和版本库通讯,SVN可以得到工作拷贝中一个文件的状态,它有下面几种可能未修改,并且版本库也未修改(Up-to-date状态)已修改,但是版本库没有修改(Modified状态)未修改,但是版本库已经修改已修改,并且版本库也已修改(需要合并)可以用svnstatus命令查看文件状态混合修订版本的工作拷贝很灵活,但是比较难理解的一个特性混合修订版的工作拷贝:为了灵活,允许一个工作拷贝中存在多个修订版本的文件SVN特性:修订版本号的全局性。如果某文件的修订号为N,并不意味这这个文件被提交了N次(甚至有可能这个文件只修改过1次),而意味着整个版本库被提交了N次当一次Checkout或者(整个工作拷贝的)Update操作完成后,工作拷贝中所有文件都会被更新到同一个版本号两个操作可能引起混合版本的情况:提交和部分更新混合修订版本的工作拷贝(续)提交会引起混合修订版本的情况SVN的原则:提交某个修改的过程不会导致工作拷贝被修改。在SVN中,更新和提交是分开的。当提交修改时,被提交修改的文件版本号将递增,但是工作拷贝中的其他文件仍然保持原有版本号,于是就形成了混合修订版本的格局。混合修订版本的工作拷贝(续)很显然,(部分)更新也可能会引起这种情况部分更新是指对工作拷贝中某个文件或者子目录的更新操作(不限于更新到HEAD)很灵活的一个特性混合修订版本的工作拷贝(续)混合修订版本是一种正常的情况同时,混合修订版本很有用例如,可以用来追溯Bug的源头,或者确定某个特性在某个历史版本中是否具有会影响某些命令,如Log例如,当前HEAD版本号为2007,而你由于做了很多提交操作,但一直没有做更新操作,导致虽然最新的文件版本号已经是2007,但是仍然有文件版本号只有1937,当你对这个文件用log命令想查看历史记录,会发现这个文件的历史到1937就为止了混合版本有限制:不是最新的不能提交Subversion基本工作流程和基本操作Subversion的基本工作流程是:Subversion基本工作流程和基本操作(续)基本命令CheckOutUpdateStatus/LogCommitSVN的帮助,用svnhelp
命令名称可以得到命令的帮助,或者查看man手册和info页。Windows环境下可以查看Subversion带的CHM格式参考资料,一般help命令就足够了CheckOut操作从版本库中取出某个目录的拷贝到本机上某个目录的操作叫做CheckOut,这个操作是工作的基础语法:checkout(co)URL[@REV]...[PATH]注:省略svn,即完整的命令应该是svncheckout…例1:svncosvn:///svnrepos/skizcorp/trunk
在当前目录建立一个trunk目录,里面是工作拷贝例2:svncosvn://localhost/tormI:\PROJECTS\torm
会在I:\PROJECTS\目录下创建torm目录,里面存放工作拷贝例2的命令较为常用,因为大多数情况下,我们并不想把工作拷贝目录命名为trunkCheckOut操作(续)指明Checkout的版本号默认CheckOut操作是针对HEAD版本进行的,大多数情况下我们需要HEAD版本,但如果需要历史版本,可以用-r(--revision)参数或者是用“@版本号”的形式例:… -r1452会检出1452版,如果存在的话
… -r{“2007-05-05”}会检出最接近这个日期的 版本
…/trunk@1452效果同第1个例子递归与不递归-N:不递归(仅针对顶层目录),否则目录递归(默认,常用)注:上面两个参数-r、–N在很多命令里面都用到Update操作把版本库的修改同步到本地的过程是Update语法:update(up)[PATH...]例1:up 直接把工作拷贝更新到最新版(HEAD版)例2:up-r2007 更新到2007版例3:updoc/design 只更新doc/design下的文件-r和-N参数仍然有用Update会修改被更新目录的BASE版本号文件状态BASE版:某个文件的BASE版本是指存放在管理目录.svn中的该文件拷贝的版本,Revert会使该文件回到BASE版本做Update操作时,SVN会打印出受影响文件的状态,有以下几种:AAddedDDeletedUUpdatedCConflictGMerged若提示C,表示冲突,冲突可以用status命令加-u参数来预测Revert操作——时光倒流所谓Revert,是指放弃对某个文件的修改,把该文件的内容回复和BASE版本相同,也就是,把该文件的状态回复到未修改状态语法:revert文件/路径例子例1revertabc.c丢弃对abc.c的所有修改例2revertsrc/edu/nju/pojo放弃对此目录下所有文件的修改冲突解决当文件发生冲突时,SVN会额外创建3个不受版本控制的文件,同时被冲突文件如果能够合并,会在被冲突文件内部留下冲突记录。例如,冲突的文件为plugin.c,BASE版本是1458,HEAD为1459,会产生3个临时文件plugin.c.mine,plugin.c.r1458,plugin.c.r1459,解决思路:A.手动修改被冲突文件B.放弃自己的更改实际中,解决办法很灵活,一般需要与他人商量注意:由于这3个文件是在Update后才创建的,而Update之后,工作拷贝的BASE目录已经变成更新后的版本了,所以放弃自己的更改会回到新版本如果不是用Revert的方法解决冲突的话,由于那3个临时文件留在那里,会使Subversion认为冲突没有解决,所以要运行resolved命令告诉SVN冲突解决或者删除临时文件工作拷贝中对文件的操作把一个文件加入SVN版本控制系统,用add命令从版本控制系统中移除,用delete(rm,remove)命令移动或者重命名,用move(rename)命令拷贝,用copy命令创建目录,用mkdir命令注意:尽量不要用操作系统提供的命令管理文件,这样Subversion不知道更改检验修改通过status命令可以检查工作拷贝的状态通过diff命令可以检查更改的内容注意:SVN对文件属性的更改和文件内容的更改是分开管理的提交修改一般在提交修改之前,必须运行一下update操作来合并别人作出的新更改。提交用commit命令--message参数:说明本次提交的有关信息,如为什么要作出这个修改等等。Subversion高级操作SVN的高级操作主要包括分支(Branch/Tag)以及合并(Merge)操作分支操作切换URL合并操作为什么需要分支?你在开发一个软件,基于Windows平台。有一天,老板找到你,希望你把这个软件移植到Linux平台下,同时又不放弃原有版本,怎么管理代码?你的产品即将发布,需要进行一段时间的Alpha以及Beta测试直至正式版Release。同时,市场的竞争迫使你必须马不停蹄的开发下一个新版本,增加许多新的特性。两个工作必须同时进行,怎么管理代码?什么是分支?什么是分支?分支的概念从图中可以看到,分支(Branch)是开发的一条“支线”。它独立于其他开发的线路,并且和其他线路并行开发但是,所有的分支都有共同的历史,有着原先共同的主线(Trunk)创建分支创建分支使用copy命令语法:copy源目录目标目录方法方法1:先把目录checkout到本地,在本地执行copy命令后提交至版本库
例:svncosvn://localhost/
svncopytrunk/branches/mybranch
svncommit–m“Mybranchcreated”方法2:直接用copy命令对版本库中两个URL进行操作
例:svncopysvn://localhost/trunksvn://localhost/branches/mybranch–m“Mybranch”创建分支前后版本库的变化之前之后在分支上工作要想在分支上工作,需要一个对应于分支的工作拷贝。有两种方法可以获得这种工作拷贝方法1:直接从分支的URL上checkout出工作拷贝(适用于没有工作拷贝的情况)方法2:使用switch命令切换工作拷贝对应的URL(在有工作拷贝的基础上)Switch操作Switch操作可以使工作拷贝在不同的分支之间或者在位于不同服务器上相同的版本库的分支间切换。它的作用是改变工作拷贝对应的URLSwitch&Update:Update命令是Switch命令的一个子集语法:switch[--relocate]目标URL慎用-relocate选项分支的合并——Merge操作Merge操作能够处理目录树的修改,而不限于单个文件内容语法:merge初始版本树最终版本树目标常用语法:merge初始版本:最终版本版本库URL目标作用:取出初始版本到最终版本的修改,然后把它应用到当前工作拷贝例子mergesvn://localhost/trunk@2000svn://localhost/trunk@2007my_wcmerge–r2000:2007svn://localhost/trunkmy_wcSVN版本库常用目录组织结构SVN版本库常用目录组织结构SVN中tag和branch的区别tag:通常tag对应于milestone,是一个完整可用的版本,不能修改,是只读的bran
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《光电信息科学与工程专业毕业设计》课程教学大纲
- 2024年出售铝型材设备合同范本
- 2024年代理采购板材合同范本
- 2024年便利店酒水采购合同范本
- 医疗废物标准操作流程
- ICU口腔护理课件
- 原发性肝癌治疗方法
- 2024至2030年中国宽式交叉线导辊数据监测研究报告
- 2024至2030年中国铁艺阳台围栏行业投资前景及策略咨询研究报告
- 2024年芝士片项目综合评估报告
- 难点详解人教版九年级化学上册第一单元走进化学世界专题训练练习题(含答案详解版)
- 财务管理委托代理会计服务 投标文件(技术方案)
- 七年级数学人教版(上册)第9课时 分段计费问题
- 2024年秋新北师大版七年级上册数学教学课件 6.1 丰富的数据世界
- T-CCSAS014-2022《化工企业承包商安全管理指南》
- 中小学十五五发展规划(2025-2030)
- 语文园地四 写话 学写留言条(教学设计)统编版语文二年级上册
- 八年级下册 第六单元 23《马说》公开课一等奖创新教学设计
- 理智与情感:爱情的心理文化之旅智慧树知到期末考试答案章节答案2024年昆明理工大学
- 期末模拟考试03-【中职专用】《心理健康与职业生涯》(高教版2023·基础模块)(含答案)
- GB 20052-2024电力变压器能效限定值及能效等级
评论
0/150
提交评论