自由、开源的版本管理系统

上传人:ldj****22 文档编号:48882361 上传时间:2018-07-21 格式:PPT 页数:51 大小:1.93MB
返回 下载 相关 举报
自由、开源的版本管理系统_第1页
第1页 / 共51页
自由、开源的版本管理系统_第2页
第2页 / 共51页
自由、开源的版本管理系统_第3页
第3页 / 共51页
自由、开源的版本管理系统_第4页
第4页 / 共51页
自由、开源的版本管理系统_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《自由、开源的版本管理系统》由会员分享,可在线阅读,更多相关《自由、开源的版本管理系统(51页珍藏版)》请在金锄头文库上搜索。

1、自由、开源的版本管理系统南京大学软件学院 20091 1 Subversion简介 2 版本控制的基本原理 3 Subversion基础 4 Subversion基本工作流程及基本操作 CheckOut,Commit,Update,Status 5 Subversion高级操作 Branch/Tag,Merge 6 Subversion其他操作(演示) 7 常见Subversion的GUI客户端使用(演 示)内容简介1 Subversion简介 Subversion的作用 Subversion的历史 Subversion的特性 Subversion的架构Subversion的作用 一个自由,开

2、源的版本控制系统 一个通用系统,不是简单的一个SCM系统 以替代CVS为目标 可以管理任何类型文件,并且追踪变更 不具有某些和开发紧密结合的特性,如 支持某种特定的编程语言,集成构建工 具等 应用:版本管理,网络硬盘? 网址:http:/subversion.tigris.orgSubversion的历史 2000年,CollabNet公司开始寻找CVS的替 代产品 2月,这个公司联系了Open Source Development with CVS的作者Karl Fogel, 他同意为这个项目工作。同时,他还联 系了其他几个人一起开发这个新系统 3月,Subversion开始详细设计和编码

3、2001年8月31日,Subversion第一个完整 版本问世 经过1.0,1.1,1.2直到现在的1.4.3版Subversion的特性(和CVS比较 ) 和CVS的相似性 目录的版本化 更加好的文件版本管理(例如对文件拷贝,重 命名的处理) 提交的原子性 元数据的版本化 可选的网络层 对文本文件和二进制文件一致的差异比较算法 高效的分支(branch)和标签(tag)操作 良好的可维护性Subversion的架构2 版本控制的基本原理 客户/服务器架构的版本控制简述 版本控制的数据共享模型 数据共享的问题 锁定-修改-解锁方案 拷贝-修改-合并方案 冲突及解决 两种方案的对比及选择 Sub

4、version的实现客户/服务器架构的版本控 制 版本库(Repository):按照一定格 式存储了所有数据,包括文件和目 录 经过授权的客户端可以连接到版本 库,读写库中的文件 版本库和普通文件服务器的不同: 版本库会记录每一次的更改,所以 ,客户端可以任意查询更改的历史 。例如:ApplicationContext.java的 1451版和1450版相比修改了什么? 谁作的修改?什么时候作的修改? 等等版本控制数据共享模型 版本控制系统的核心任务:协作编 辑和数据共享 基础问题:怎样允许用户共享信息 ,并且不会因意外而互相干扰? 数据共享问题的产生 解决办法数据共享问题解决方案1锁定-解

5、锁方案锁定-解锁方案的问题 可能导致管理问题,如长期锁定文 件不放 会导致不必要的顺序开发 可能导致死锁 例如Sally和Harry都需要修改 plugin_mgr.c和plugin_mgr.h,两者互相 关联,Sally锁定了.c文件而Harry锁定了 头文件,就会进入死锁状态解决方案2拷贝-修改-合 并方案(续图)冲突(Conflict)及解决( Resolve) 冲突的产生:冲突是随着拷贝-修改-合并方案的 产生而带来的问题。两个开发者使用拷贝-修改- 合并方案编辑同一个文件,并且两人的修改发 生了交叠时就发生了冲突 冲突的解决:当冲突发生时,开发者会看到一 对冲突的修改结果,通常情况下

6、,必须让引起 冲突的两个人商议之后,手动选择保留一组更 改。在这里,版本控制系统只能提示冲突的发 生而无法给出解决建议 冲突的预防:增加开发者的交流可以最大限度 减少冲突的发生,但是不可能杜绝冲突 后面可以看到冲突的具体例子以及解决办法两种方案的对比及选择 虽然锁定-解锁方案有很多的弊端,但在一些情 况下仍然是必须的;虽然拷贝-修改-合并模型能 解决大多数问题,但它也不是万能的 比较:文本文件和二进制文件的特点 选择:拷贝-合并模型假定文件是可以通过上下 文合并的。通常情况下,文本文件(例如源代 码以及用纯文本,HTML,TeX等格式保存的文档 )因为其内部结构直观可知,容易理解上下文 ,所以

7、用拷贝合并方案较好。而二进制文件( 例如用Microsoft Word格式,PDF等格式保存的 文档及图片,声音,可执行文件,库等)内部 结构复杂,且不容易理解更改处的上下文,采 用锁定-解锁方案较好Subversion的实现 Subversion主要采用拷贝-修改-合并 模型,配合锁定-解锁模型管理数据 的共享3 Subversion基础 基本概念 工作拷贝(Working Copy) 修订版本(Revision) 文件状态 混合修订版本的工作拷贝工作拷贝(Working Copy) 工作拷贝是本地机器的一个普通的目录。这个 目录的内容是版本库中某个目录的拷贝。工作 拷贝是私有工作区,可以任

8、意编辑里面的文件 并且发布更改 通常,一个工作拷贝对应于版本库的一个子目 录,日常的开发是针对工作拷贝进行的 工作拷贝里面还有一些由Subversion创建和维护 的额外文件,用于命令的协助执行,所以它们 又叫工作拷贝管理目录。通常,它们都保存在 工作拷贝目录及子目录下的.svn目录(隐藏)中 ,凭借这个目录中保存的信息,Subversion可以 识别哪一个文件被修改了,哪一个文件已经过 时了,等等修订版本(Revision) SVN的提交(Commit)操作是把工作拷贝 的更改发布到版本库的一个原子操作。 每当一次提交完成后,版本库的文件系 统就进入了一个新的状态,叫做一次修订(Revisi

9、on),每一次修订都会赋予一 个独一无二的版本号,一般是从0开始的 递增自然数,一个比一个大 初始修订版本是0,这只是一个空目录, 没有任何内容。随着每次的提交,版本库里仿佛就多了一个当前内容的“快照”。 在版本库中,最新的一个修订版本称为HEAD修订版本(图示)(HEAD)文件状态 对于工作拷贝的每一个文件,SVN在管理目录( .svn)记录两项关键的信息 该文件作为基准的修订版本(叫做文件的工作修订版 本) 该文件最后更新的时间戳 根据以上两项关键信息,通过和版本库通讯, SVN可以得到工作拷贝中一个文件的状态,它有 下面几种可能 未修改,并且版本库也未修改(Up-to-date状态) 已

10、修改,但是版本库没有修改(Modified状态) 未修改,但是版本库已经修改 已修改,并且版本库也已修改(需要合并) 可以用svn status命令查看文件状态混合修订版本的工作拷贝 很灵活,但是比较难理解的一个特性 混合修订版的工作拷贝:为了灵活,允许一个 工作拷贝中存在多个修订版本的文件 SVN特性:修订版本号的全局性。如果某文件的 修订号为N,并不意味这这个文件被提交了N次 (甚至有可能这个文件只修改过1次),而意味 着整个版本库被提交了N次 当一次Checkout或者(整个工作拷贝的)Update 操作完成后,工作拷贝中所有文件都会被更新 到同一个版本号 两个操作可能引起混合版本的情况

11、:提交和部 分更新混合修订版本的工作拷贝( 续) 提交会引起混合修订版本的情况 SVN的原则:一个PUSH的动作不会 导致被PUSH,或者反之。换句话说 ,提交某个修改的过程不会导致工 作拷贝被修改。在SVN中,更新和提 交是分开的 当提交修改时,被提交修改的文件 版本号将递增,但是工作拷贝中的 其他文件仍然保持原有版本号,于 是就形成了混合修订版本的格局混合修订版本的工作拷贝( 续) 很显然,(部分)更新也可能会引 起这种情况 部分更新是指对工作拷贝中某个文 件或者子目录的更新操作(不限于 更新到HEAD) 很灵活的一个特性混合修订版本的工作拷贝( 续) 混合修订版本是一种正常的情况 同时,

12、混合修订版本很有用 例如,可以用来追溯Bug的源头,或者确定某 个特性在某个历史版本中是否具有 会影响某些命令,如Log 例如,当前HEAD版本号为2007,而你由于做 了很多提交操作,但一直没有做更新操作,导致虽然最新的文件版本号已经是2007,但 是仍然有文件版本号只有1937,当你对这个 文件用log命令想查看历史记录,会发现这个 文件的历史到1937就为止了 混合版本有限制:不是最新的不能提交 (喜新厌旧?)4 Subversion基本工作流程 和基本操作 Subversion的基本工作流程是:(续) 基本命令 CheckOut Update Status/Log Commit SVN

13、的帮助,用svn help 命令名称可以得 到命令的帮助,或者查看man手册和info 页。Windows环境下可以查看Subversion 带的CHM格式参考资料,一般help命令就 足够了CheckOut操作 从版本库中取出某个目录的拷贝到本机上某个 目录的操作叫做CheckOut,这个操作是工作的 基础 语法:checkout(co) URLREV. PATH 注:省略svn,即完整的命令应该是svn checkout 例1:svn co svn:/218.94.9.38/svnrepos/skizcorp/trunk 在当前目录建立一个trunk目录,里面是工作拷贝 例2:svn co

14、 svn:/localhost/torm I:PROJECTStorm 会在I:PROJECTS目录下创建torm目录,里面存放工作 拷贝 例2的命令较为常用,因为大多数情况下,我们并不想 把工作拷贝目录命名为trunkCheckOut操作(续) 指明Checkout的版本号 默认CheckOut操作是针对HEAD版本进行的,大多数情 况下我们需要HEAD版本,但如果需要历史版本,可以 用-r(-revision)参数或者是用“版本号”的形式 例:-r 1452 会检出1452版,如果存在的话-r “2007-05-05” 会检出最接近这个日期的 版本/trunk1452 效果同第1个例子 递

15、归与不递归 -N:不递归(仅针对顶层目录),否则目录递归(默 认,常用) 注:上面两个参数-r N在很多命令里面都用到Update操作 把版本库的修改同步到本地的过程是 Update 语法: update(up) PATH. 例1:up直接把工作拷贝更新到最新版( HEAD版) 例2:up -r 2007更新到2007版 例3:up doc/design只更新doc/design下的 文件 -r和-N参数仍然有用 Update会修改被更新目录的BASE版本号文件状态 BASE版:某个文件的BASE版本是指存放 在管理目录.svn中的该文件拷贝的版本, Revert会使该文件回到BASE版本 做Update操作时,SVN会打印出受影响文 件的状态,有以下几种: A Added D Deleted U Updated C Conflict G Merged 若提示C,表示冲突,冲突可以用status 命令加-u参数来预测Revert操作时光倒流 所谓Revert,是指放弃对某个文件的 修改,把该文件的内容回复和BASE 版本相同,也就是,把该文件的状 态回复到未修改状态 语法:revert 文件/路径 例子

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号