下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 Subversion简易教程

Subversion简易教程.ppt

Subversion简易教程

ouyangxuhua167
2013-07-02 0人阅读 举报 0 0 暂无简介

简介:本文档为《Subversion简易教程ppt》,可适用于IT/计算机领域

自由、开源的版本管理系统自由、开源的版本管理系统南京大学软件学院*内容简介内容简介Subversion简介版本控制的基本原理Subversion基础Subversion基本工作流程及基本操作CheckOutCommitUpdateStatusSubversion高级操作BranchTagMergeSubversion其他操作(演示)常见Subversion的GUI客户端使用(演示)Subversion简介Subversion简介Subversion的作用Subversion的历史Subversion的特性Subversion的架构Subversion的作用Subversion的作用一个自由开源的版本控制系统一个通用系统不是简单的一个SCM系统以替代CVS为目标可以管理任何类型文件并且追踪变更不具有某些和开发紧密结合的特性如支持某种特定的编程语言集成构建工具等应用:版本管理网络硬盘??网址:http:subversiontigrisorgSubversion的历史Subversion的历史年CollabNet公司开始寻找CVS的替代产品月这个公司联系了OpenSourceDevelopmentwithCVS的作者KarlFogel他同意为这个项目工作。同时他还联系了其他几个人一起开发这个新系统月Subversion开始详细设计和编码年月日Subversion第一个完整版本问世经过直到现在的版Subversion的特性(和CVS比较)Subversion的特性(和CVS比较)和CVS的相似性目录的版本化更加好的文件版本管理(例如对文件拷贝重命名的处理)提交的原子性元数据的版本化可选的网络层对文本文件和二进制文件一致的差异比较算法高效的分支(branch)和标签(tag)操作良好的可维护性Subversion的架构Subversion的架构版本控制的基本原理版本控制的基本原理客户服务器架构的版本控制简述版本控制的数据共享模型数据共享的问题锁定修改解锁方案拷贝修改合并方案冲突及解决两种方案的对比及选择Subversion的实现客户服务器架构的版本控制客户服务器架构的版本控制版本库(Repository):按照一定格式存储了所有数据包括文件和目录经过授权的客户端可以连接到版本库读写库中的文件版本库和普通文件服务器的不同:版本库会记录每一次的更改所以客户端可以任意查询更改的历史。例如:ApplicationContextjava的版和版相比修改了什么?谁作的修改?什么时候作的修改?等等版本控制数据共享模型版本控制数据共享模型版本控制系统的核心任务:协作编辑和数据共享基础问题:怎样允许用户共享信息并且不会因意外而互相干扰?数据共享问题的产生解决办法数据共享问题数据共享问题解决方案锁定解锁方案解决方案锁定解锁方案锁定解锁方案的问题锁定解锁方案的问题可能导致管理问题如长期锁定文件不放会导致不必要的顺序开发可能导致死锁例如Sally和Harry都需要修改pluginmgrc和pluginmgrh两者互相关联Sally锁定了c文件而Harry锁定了头文件就会进入死锁状态解决方案拷贝修改合并方案解决方案拷贝修改合并方案(续图……)(续图……)冲突(Conflict)及解决(Resolve)冲突(Conflict)及解决(Resolve)冲突的产生:冲突是随着拷贝修改合并方案的产生而带来的问题。两个开发者使用拷贝修改合并方案编辑同一个文件并且两人的修改发生了交叠时就发生了冲突冲突的解决:当冲突发生时开发者会看到一对冲突的修改结果通常情况下必须让引起冲突的两个人商议之后手动选择保留一组更改。在这里版本控制系统只能提示冲突的发生而无法给出解决建议冲突的预防:增加开发者的交流可以最大限度减少冲突的发生但是不可能杜绝冲突后面可以看到冲突的具体例子以及解决办法两种方案的对比及选择两种方案的对比及选择虽然锁定解锁方案有很多的弊端但在一些情况下仍然是必须的虽然拷贝修改合并模型能解决大多数问题但它也不是万能的比较:文本文件和二进制文件的特点选择:拷贝合并模型假定文件是可以通过上下文合并的。通常情况下文本文件(例如源代码以及用纯文本HTMLTeX等格式保存的文档)因为其内部结构直观可知容易理解上下文所以用拷贝合并方案较好。而二进制文件(例如用MicrosoftWord格式PDF等格式保存的文档及图片声音可执行文件库等)内部结构复杂且不容易理解更改处的上下文采用锁定解锁方案较好Subversion的实现Subversion的实现Subversion主要采用拷贝修改合并模型配合锁定解锁模型管理数据的共享Subversion基础Subversion基础基本概念工作拷贝(WorkingCopy)修订版本(Revision)文件状态混合修订版本的工作拷贝工作拷贝(WorkingCopy)工作拷贝(WorkingCopy)工作拷贝是本地机器的一个普通的目录。这个目录的内容是版本库中某个目录的拷贝。工作拷贝是私有工作区可以任意编辑里面的文件并且发布更改通常一个工作拷贝对应于版本库的一个子目录日常的开发是针对工作拷贝进行的工作拷贝里面还有一些由Subversion创建和维护的额外文件用于命令的协助执行所以它们又叫工作拷贝管理目录。通常它们都保存在工作拷贝目录及子目录下的svn目录(隐藏)中凭借这个目录中保存的信息Subversion可以识别哪一个文件被修改了哪一个文件已经过时了等等修订版本(Revision)修订版本(Revision)SVN的提交(Commit)操作是把工作拷贝的更改发布到版本库的一个原子操作。每当一次提交完成后版本库的文件系统就进入了一个新的状态叫做一次修订(Revision)每一次修订都会赋予一个独一无二的版本号一般是从开始的递增自然数一个比一个大初始修订版本是这只是一个空目录没有任何内容。随着每次的提交版本库里仿佛就多了一个当前内容的“快照”。在版本库中最新的一个修订版本称为HEAD修订版本(图示)修订版本(图示)(HEAD)文件状态文件状态对于工作拷贝的每一个文件SVN在管理目录(svn)记录两项关键的信息该文件作为基准的修订版本(叫做文件的工作修订版本)该文件最后更新的时间戳根据以上两项关键信息通过和版本库通讯SVN可以得到工作拷贝中一个文件的状态它有下面几种可能未修改并且版本库也未修改(Uptodate状态)已修改但是版本库没有修改(Modified状态)未修改但是版本库已经修改已修改并且版本库也已修改(需要合并)可以用svnstatus命令查看文件状态混合修订版本的工作拷贝混合修订版本的工作拷贝很灵活但是比较难理解的一个特性混合修订版的工作拷贝:为了灵活允许一个工作拷贝中存在多个修订版本的文件SVN特性:修订版本号的全局性。如果某文件的修订号为N并不意味这这个文件被提交了N次(甚至有可能这个文件只修改过次)而意味着整个版本库被提交了N次当一次Checkout或者(整个工作拷贝的)Update操作完成后工作拷贝中所有文件都会被更新到同一个版本号两个操作可能引起混合版本的情况:提交和部分更新混合修订版本的工作拷贝(续)混合修订版本的工作拷贝(续)提交会引起混合修订版本的情况SVN的原则:一个PUSH的动作不会导致被PUSH或者反之。换句话说提交某个修改的过程不会导致工作拷贝被修改。在SVN中更新和提交是分开的当提交修改时被提交修改的文件版本号将递增但是工作拷贝中的其他文件仍然保持原有版本号于是就形成了混合修订版本的格局混合修订版本的工作拷贝(续)混合修订版本的工作拷贝(续)很显然(部分)更新也可能会引起这种情况部分更新是指对工作拷贝中某个文件或者子目录的更新操作(不限于更新到HEAD)很灵活的一个特性混合修订版本的工作拷贝(续)混合修订版本的工作拷贝(续)混合修订版本是一种正常的情况同时混合修订版本很有用例如可以用来追溯Bug的源头或者确定某个特性在某个历史版本中是否具有会影响某些命令如Log例如当前HEAD版本号为而你由于做了很多提交操作但一直没有做更新操作导致虽然最新的文件版本号已经是但是仍然有文件版本号只有当你对这个文件用log命令想查看历史记录会发现这个文件的历史到就为止了混合版本有限制:不是最新的不能提交(喜新厌旧?)Subversion基本工作流程和基本操作Subversion基本工作流程和基本操作Subversion的基本工作流程是:(续)(续)基本命令CheckOutUpdateStatusLogCommitSVN的帮助用svnhelp命令名称可以得到命令的帮助或者查看man手册和info页。Windows环境下可以查看Subversion带的CHM格式参考资料一般help命令就足够了CheckOut操作CheckOut操作从版本库中取出某个目录的拷贝到本机上某个目录的操作叫做CheckOut这个操作是工作的基础语法:checkout(co)URLREVPATH注:省略svn即完整的命令应该是svncheckout…例:svncosvn:svnreposskizcorptrunk在当前目录建立一个trunk目录里面是工作拷贝例:svncosvn:localhosttormI:PROJECTStorm会在I:PROJECTS目录下创建torm目录里面存放工作拷贝例的命令较为常用因为大多数情况下我们并不想把工作拷贝目录命名为trunkCheckOut操作(续)CheckOut操作(续)指明Checkout的版本号默认CheckOut操作是针对HEAD版本进行的大多数情况下我们需要HEAD版本但如果需要历史版本可以用r(revision)参数或者是用“版本号”的形式例:…r会检出版如果存在的话…r{“”}会检出最接近这个日期的版本…trunk效果同第个例子递归与不递归N:不递归(仅针对顶层目录)否则目录递归(默认常用)注:上面两个参数r–N在很多命令里面都用到Update操作Update操作把版本库的修改同步到本地的过程是Update语法:update(up)PATH例:up直接把工作拷贝更新到最新版(HEAD版)例:upr更新到版例:updocdesign只更新docdesign下的文件r和N参数仍然有用Update会修改被更新目录的BASE版本号文件状态文件状态BASE版:某个文件的BASE版本是指存放在管理目录svn中的该文件拷贝的版本Revert会使该文件回到BASE版本做Update操作时SVN会打印出受影响文件的状态有以下几种:AAddedDDeletedUUpdatedCConflictGMerged若提示C表示冲突冲突可以用status命令加u参数来预测Revert操作时光倒流Revert操作时光倒流所谓Revert是指放弃对某个文件的修改把该文件的内容回复和BASE版本相同也就是把该文件的状态回复到未修改状态语法:revert文件路径例子例revertabcc丢弃对abcc的所有修改例revertsrcedunjupojo放弃对此目录下所有文件的修改冲突解决冲突解决当文件发生冲突时SVN会额外创建个不受版本控制的文件同时被冲突文件如果能够合并会在被冲突文件内部留下冲突记录。例如冲突的文件为plugincBASE版本是HEAD为会产生个临时文件plugincmineplugincrplugincr解决思路:A手动修改被冲突文件B放弃自己的更改实际中解决办法很灵活一般需要与他人商量注意:由于这个文件是在Update后才创建的而Update之后工作拷贝的BASE目录已经变成更新后的版本了所以放弃自己的更改会回到新版本如果不是用Revert的方法解决冲突的话由于那个临时文件留在那里会使Subversion认为冲突没有解决所以要运行resolved命令告诉SVN冲突解决或者删除临时文件工作拷贝中对文件的操作工作拷贝中对文件的操作编辑文件没什么好说的把一个文件加入SVN版本控制用add命令从版本控制中移除用delete(rm,remove)命令移动或者重命名用move(rename)命令拷贝用copy命令创建目录用mkdir命令具体命令用法请参照文档注意:尽量不要用操作系统提供的命令管理文件这样Subversion不知道更改检验修改检验修改通过status命令可以检查工作拷贝的状态通过diff命令可以检查更改的内容参考SVN手册注意:SVN对文件属性的更改和文件内容的更改是分开管理的提交修改提交修改一般在提交修改之前必须运行一下update操作来合并别人作出的新更改。提交用commit命令message参数:说明本次提交的有关信息如为什么要作出这个修改等等。参考SVNbookSubversion高级操作Subversion高级操作SVN的高级操作主要包括分支(BranchTag)以及合并(Merge)操作分支操作切换URL合并操作为什么需要分支?为什么需要分支?你在开发一个软件基于Windows平台。有一天老板找到你希望你把这个软件移植到Linux平台下同时又不放弃原有版本怎么管理代码?你的产品即将发布需要进行一段时间的AlphaBeta测试直至正式版Release。同时市场的竞争迫使你必须马不停蹄的开发下一个新版本增加许多新的特性。两个工作必须同时进行怎么管理代码?什么是分支?什么是分支?分支的概念分支的概念从图中可以看到分支是开发的一条“支线”。它独立于其他开发的线路并且和其他线路并行开发但是所有的分支都有共同的历史有着原先共同的主线创建分支创建分支创建分支使用copy命令语法:copy源目录目标目录方法方法:先把目录checkout到本地在本地执行copy命令后提交至版本库例:svncosvn:localhostsvncopytrunkbranchesmybranchsvncommit–m“Mybranchcreated”方法:直接用copy命令对版本库中两个URL进行操作例:svncopysvn:localhosttrunksvn:localhostbranchesmybranch–m“Mybranch”创建分支前后版本库的变化创建分支前后版本库的变化之前之后在分支上工作在分支上工作要想在分支上工作需要一个对应于分支的工作拷贝。有两种方法可以获得这种工作拷贝方法:直接从分支的URL上Checkout出工作拷贝(适用于没有工作拷贝的情况)方法:使用switch命令切换工作拷贝对应的URL(在有工作拷贝的基础上)Switch操作Switch操作Switch操作可以使工作拷贝在不同的分支之间或者在位于不同服务器上相同的版本库的分支间切换。它的作用是改变工作拷贝对应的URLSwitchUpdate:Update命令是Switch命令的一个子集语法:switchrelocate目标URL慎用relocate选项分支的合并()分支的合并()分支的合并是指把修改从分支拷贝到主干或者把主干的修改拷贝到分支的过程。传统方法:diffpatch例子:svndiff–r:svn:localhosttrunk>patchfilepatch–p<patchfile这个例子取出主干版到版的修改然后把它应用到工作拷贝(工作拷贝这个时候一般对应于某个分支)只适用于文件内容对于目录树结构无能为力分支的合并()Merge操作分支的合并()Merge操作Merge操作和传统方法十分类似但是它能够处理目录树的修改而不限于单个文件内容语法:merge初始版本树最终版本树目标常用语法:merge初始版本:最终版本版本库URL目标作用:取出初始版本到最终版本的修改然后把它应用到当前工作拷贝例子mergesvn:localhosttrunksvn:localhosttrunkmywcmerge–r:svn:localhosttrunkmywcSVN版本库常用目录组织结构SVN版本库常用目录组织结构Subversion其他操作及命令行客户端演示Subversion其他操作及命令行客户端演示loglistimportcleanupinfo等命令参考SVNBook图形界面客户端的使用及演示图形界面客户端的使用及演示常见的图形界面客户端:TortoiseSVN(Windows)Subclipse(Eclipse插件LinuxWindows)观看演示参考各个客户端的文档

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/51

Subversion简易教程

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利