《本控制管理工具》PPT课件.ppt_第1页
《本控制管理工具》PPT课件.ppt_第2页
《本控制管理工具》PPT课件.ppt_第3页
《本控制管理工具》PPT课件.ppt_第4页
《本控制管理工具》PPT课件.ppt_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

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

文档简介

第7讲,版本控制管理工具(2),主要内容,1. Subversion简介 2、版本控制的基本知识 3、Subversion常用功能讲解 4、客户端工具tortoiseSVN 5、eclipse插件subeclipse的使用介绍 6、使用svn中常见问题 7、 版本管理规则,一、Subversion简介,什么是Subversion Subversion的历史 Subversion的特色 Subversion的体系结构 Subversion的安装 Subversion的组件 Subversion快速入门 Subversion客户端工具,什么是Subversion?,版本控制是管理信息变更的一门艺术。 版本控制工具早已经成为许多程序员的主要工具之一 。 版本控制软件的用途并不仅限于软件开发的领域 ,只要人们使用计算机来管理经常变更的信息,就需要使用版本控制工具 。 Subversion的一个概括性的介绍: Subversion 是什么?它用来做什么?以及如何得到它 。,什么是Subversion?,Subversion是一个自由的、开放源码的版本控制系统 它可以管理各个时刻的文件和目录 。 Subversion将文件存放在repository库中。这个仓库非常类似于一个普通的文件服务器 ,只是它还可以记录文件和目录曾经做过的每一次变更 。 可把版本控制系统比作一种“时间机器” 。,什么是Subversion?,Subversion的仓库可以通过网络来访问,允许不同的用户在不同的计算机上使用 。 不同的使用者可以进行协同工作 。而且所有工作都是有记录的,如果有错只要撤销就可以。 Subversion只是版本控制系统,不是软件配置管理系统(SCM) 。 它是一个通道,可以管理任何计算机中的文件系统。,What is Subversion not?,svn is not a build system . svn is not a substitute for management. svn is not a substitute for developer Communication. svn does not have change control . svn is not an automated testing program.,Subversion的历史,CVS有明显的局限性和功能上的不足。 2000年开始 ,CollabNet公司 就开始着手开发新的版本控制系统来代替CVS。 Karl Fogel 和Jim Blandy 是CVS开发者,加入到开发subversion当中。 他们让 Subversion 来使用 CVS 的特性,并且保留相同的开发模型 ,但是避开 CVS 的那些明显的缺陷 。 Subversion 于2001年8月进入“自测”阶段 。,Subversion的特色,目录控制 CVS 只能跟踪单个文件的历史,而 Subversion 实现了一个“虚拟“的受控文件系统,可以跟踪整个目录的变更。 真正的版本历史 由于 CVS 只限于记录文件的版本信息,像文件复制、重命名这样的操作它就不支持 ,在 Subversion 中我们可以添加、删除、复制和重命名文件和目录 。,Subversion的特色,原子化提交 一个变更集要么完整地被提交到仓库中,要么不做任何改变 ,从而避免发生不完整地提交变更的情况 。 受控元数据 每一个文件和目录都有一个与其对应的属性集 。 可选的网络层 Subversion 仓库的存取是一个抽象概念,有利于其他人实现新的网络访问机制 ,Subversion 可以作为一个外部模块插入到 Apache HTTP 服务器中 。,一致的数据处理 Subversion 使用一种二进制的比较算法来表示文件之间的区别 。 高效的分支和标记 分支和标记所带来的开销与项目的规模并没有直接的关系 ,Subversion 在创建分支和标记时使用类似“连接”的方式来复制项目 。 扩展能力 它是由一组设计良好的 APIs实现的,包含在 C 的共享库中 ,这使得它很容易维护。也很容易被其他应用程序或语言使用 。,Subversion的体系结构,Subversion的体系结构,典型的client/server模式结构 在系统的一端是存放着所有受控制数据的 Subversion 仓库。 另一端是 Subversion 的客户端程序,管理着受控数据的一部分在本地的映射(称为“工作副本”)。 在这两端之间,是通过各种仓库存取层(Repository Access,RA)的多条通道。这些通道中,有些要使用计算机网络,再通过用来访问 Subversion 仓库的服务器。而有些则完全绕过了网络,直接对仓库进行操作 。,Subversion的安装,Subversion 是建立在一个叫做 APR(the Apache Portable Runtime library)的可移植运行库之上的 。 Subversion 可以运行在任何 Apache 服务器可以运行的操作系统之上:Windows、Linux,各种类型的 BSD、Mac OS X,Netware 以及其他的系统。 获得 Subversion 的最简单的方法就是下载适合于你的操作系统的二进制软件包 Subversion 的站点() Windows安装是图形化界面,linux安装较复杂,另有讨论。,Subversion的组件,svn 一个命令行的客户端程序 svnversion 报告本地工作副本状态(当前档案的修订版本号表示)的程序 svnadmin 用来创建或者是修复仓库的工具 svndumpfilter 过滤资源库程序,Subversion的组件,mod_dav_svn Apache 服务器的一个插件模块,用来使其他人可以通过网络访问这个仓库 svnserve 一个定制的、独立的 Subversion 服务程序。可作为一个驻留进程运行或者是由 SSH 调用。是使仓库可以被别人通过网络访问的另一种方法 常用的组件是svn和svnadmin,有图形化客户端来实现svn和svnadmin功能。,Subversion快速入门,运行下面的例子,必须确保svn和svnadmin这两个工具正常运行。 同时还必须保证你的 svn 工具是针对 Berkeley DB 编译的 。 可以运行 svn -version 然后检查 ra_local 模块是否可用来确认 ,如果没有这个模块,我们的客户端程序将无法访问 file:/URLs,Subversion快速入门,Subversion快速入门,$ svnadmin create /path/to/repos ls /path/to/repos conf/ dav/ db/ format hooks/ locks/ README.txt 这个命令创建了一个包含 Subversion 仓库的目录 /path/to/repos 。另外,这个目录必须创建在本地磁盘,而不能是在网络共享磁盘上 下一步,准备一个类似下面例子中的用来导入的文件、目录树。在树结构中,应该包含三个顶层目录:branches、tags 和 trunk,Subversion快速入门,/tmp/project/branches/ /tmp/project/tags/ /tmp/project/trunk/ foo.c bar.c Makefile .,Subversion快速入门,一旦你准备好了目录树,就可以使用 svn import 命令来导入数据到仓库中了 svn import /tmp/project file:/path/to/repos -m “initial import“ Adding /tmp/project/branches Adding /tmp/project/tags Adding /tmp/project/trunk Adding /tmp/project/trunk/foo.c Adding /tmp/project/trunk/bar.c Adding /tmp/project/trunk/Makefile . Committed revision 1.,Subversion快速入门,现在,仓库中就有了整个目录树中的数据 为了开始操作仓库中的数据,我们需要先创建一个数据的“工作副本(working copy)”出来 。 这类似于一种私有的工作区 ,向 Subversion “check out”(借出)一份仓库中 trunk 目录的工作副本 : $ svn checkout file:/path/to/repos/trunk project 在一个新的 project 目录下就有了仓库中一部分数据的一个私人副本 ,可以在本地工作副本上编辑某个文件,然后再将那些修改提交到仓库中 。,Subversion客户端工具,命令行工具 通过命令行方式,主要命令包括: svn:基本svn命令 svnadmin:存储库管理 svnlook:存储库查看 TortoiseSVN 与windows资源管理器集成 subclipse 与eclipse集成,二、版本控制的基本知识,2.1 仓库(The Repository) 2.2 版本控制模型 2.3 实际工作中的subversion 2.4 subversion/cvs/vss比较,2.1 仓库(The Repository),Subversion 是一个集中式的系统。它的核心是一个用来存放数据的中心仓库。中心仓库使用典型的文件和目录层次结构树状结构来存储信息。 许许多多的客户端可以连接到中心仓库,然后读取或者写入文件 。 客户端通过写文件来使其他人共享,也可以读取其它客户端所写入的文件。 典型的客户端/服务器系统模型 ,如图所示:,2.1 仓库(The Repository),仓库就是一种文件服务器,只是不是通常的那种 。 Subversion 仓库可以记录写入仓库的每一次更改 。 这些更改包括对每一个文件的每一次修改,甚至是对目录本身的修改,例如添加文件、删除文件和对文件和目录的重新编排。这些特性使得 Subversion 仓库与一般的文件服务器相比较为特殊。 客户端同样可以读取文件和目录以前某个时刻的状态 。 版本控制系统的核心:记录和跟踪数据的修改历史 。,2.1 仓库(The Repository),2.2 版本控制模型,版本控制系统的核心任务是使得数据可以协作处理和共享。但是不同的系统使用不同的策略来达到这个目标 。 文件共享的问题 。 “锁定修改解锁” 方案 “复制修改合并“方案,文件共享的问题,所有的版本控制系统都需要解决这样一个基础问题:怎样让系统允许用户共享信息,而不会让他们因意外而互相干扰? 版本库里意外覆盖别人的更改非常的容易。 我们有两个共同工作者,Harry和Sally,他们想同时编辑版本库里的同一个文件。如果首先Harry保存他的修改,过了一会,Sally凑巧用自己的版本覆盖了此文件。而Harry所有的修改不会出现在Sally的文件中,所以Harry的工作还是丢失了。,文件共享:锁定修改解锁方案(1),文件共享:锁定修改解锁方案(2),锁定可能导致管理问题 如果Harry锁住文件后忘了此事,则Sally僵住。 锁定可能导致不必要的线性开发 Harry编辑一个文件的开始,而Sally编辑此文件的结尾。本来不冲突,修改后合并即可。 锁定可能导致错误的安全状态 如果Harry锁住A,Sally锁住B,而两文件相互依赖,则两文件不能很好地工作。,文件共享:拷贝修改合并方案(1),Subversion、CVS以及其他一些版本控制系统使用“拷贝修改合并”模型来代替锁定 。 每一个用户的客户端软件从中央仓库创建出一份个人的工作副本仓库中文件和目录的本地映射 。 用户就可以并行工作,修改手中的私有副本 。 这些私有副本合并成为一个全新的版本 。 版本控制系统常常需要合并,但是最终,操作者本身必须负责让合并工作正确进行 。,文件共享:拷贝修改合并方案(2),文件共享问题的解决,合并模型假定文件是可以根据上下文合并的文本文件 例如程序源代码、源代码以及用纯文本,HTML,Text等格式保存的文档。 对于二进制文件,可以采用锁定模型 如用Microsoft Word格式,PDF等格式保存的文档及图片,声音,可执行文件,库等,有必要采用锁定让用户轮流修改文件。 svn两种模型都支持,冲突(conflict),如果 Sally 的修改会覆盖掉 Harry 的工作怎么办?这种情况叫做“冲突(conflict) 当 Harry 要求他的客户端软件合并仓库中的最新修改到工作副本时,文件 A 被标记为冲突状态。 遇到这种情况,只有人本身才有能力理解和做出合理的选择 。注意,软件并不能自动解决冲突 。 用于解决冲突的时间远远少于锁定系统所带来的时间浪费。,解决冲突的关键是用户交流,最终,我们将所有的问题归结为一个关键因素:用户交流。如果用户很少交流,不论是语法的还是语义的冲突都会增加。没有哪个系统可以让用户完美地交流,也没有哪个系统可以自动检查出语义上的冲突。,文本文件产生冲突,进行合并Merge,编辑冲突Edit Reflict,消除冲突,2.3 实际中的 Subversion,工作副本Working Copies 资源库存储的不同方式URLs 修订本 工作副本如何跟踪仓库,工作副本Working Copies,一个 Subversion 的工作副本其实就是本地系统中的一个普通的文件目录树 。 可以使用任何方式来编辑这些文件。如果是源代码文件的话,你也可以像通常情况那样去编译它们。 工作副本是你的私人工作区 。 如果你不明确的要求,Subversion 绝不会合并其他人的修改,也不会让其他人看到你做的修改 。,工作副本Working Copies,在你已经修改完工作副本中的文件,并且确信修改正确后,就可以将这些修改公开给同一个项目中的其他工作人员。Subversion 提供了将文件写入仓库的命令 。 工作副本中也包含一些额外的文件。它们是由 Subversion 创建和维护的,用来辅助完成这些命令。 最典型的情况是,每一个目录都包含一个叫做 .svn 的子目录 。该目录也被称为“工作副本管理目录”。 一个 Subversion 的仓库会包含几个项目,而每一个项目都是仓库的目录的一个子目录。这样,用户的工作副本也就对应于仓库中一个特定的子目录。,工作副本Working Copies,资源库存储的不同方式URLs,修订本,一个 svn commit 操作可以将任意数量的文件和目录的修改发布作为一个单独的原子事务来处理 。 在仓库中,每一次提交都被作为一个原子事务来对待 。 每当仓库接受一次提交,仓库中的文件系统目录都会创建一种新的状态,叫做一个修订本。 每一个修订本都被赋予一个唯一的自然数,并且每一个修订本的数字都比前一个要大。刚刚建立的仓库的初始的版本是 0 ,只包含一个空的根目录。 Subversion 的修订版编号是针对整个目录树的,而不是某一个独立的文件 。,修订本,设想一个修订版编号的数列,从 0 开始,从左延伸到右。每一个修订版编号都对应一个画下面的目录树,而每一个目录树就是在每一次提交之后的仓库的“快照“。,如图所示:,Subversion推荐目录结构,仓库 项目名 trunk:主版本 branches:分支版本(独立版本) tags:标记版本,比如发行版 v 1.0/ v 2.0等等,SVN仓库常用目录组织结构,工作副本如何跟踪仓库,2.4 subversion/cvs/vss比较,3.1 Svn常用命令介绍 3.2 Subversion高级操作,三、subversion常用功能讲解,3.1 Svn常用命令介绍,Help Import Checkout Update your working copy Svn update Make changes add delete copy move,3.1 Svn常用命令介绍(2),Examine your changes status diff revert Merge others changes Merge Resolved Commit your changes commit,help,C:svn help 用法:svn options args 请使用 “svn help ” 显示子命令的辅助说明。 大多数的子命令可接受文件或目录参数,对目录进行递回存取。 如无指定参数给命令,默认将会自当前的目录 (包含) 进行递归存取,import,import: 提交未纳入版本控制的文件或目录树至档案库 用法:import PATH URL 递归地提交 PATH 的拷贝至地址(URL)。如果省略 PATH,默认为 .。父目录会依需要于档案库内建立。 举例:D:svn import -m “import directory“ -username lsr -password lsr ./monitor https:/localhost/svn/reposs,checkout,checkout (co): 从档案库签出工作拷贝 用法:checkout 地址. 路径 例如:D:ggsvn co https:/localhost/svn/reposs,update,将档案库的改变反应至工作拷贝 用法:update PATH. 例如:D:privatepublish个人信息svn update 于修订版 48。,Make changes,Add: 增加文件或者目录到资源库中,然后commit。条件是该文件或者目录已经在相应的目录上。 Delete 删除在库中的文件或者目录,然后commit。 Copy 拷贝文件,然后commit Move 移动文件或目录到另外目录中,相当于拷贝、删除的组合。 以上的命令是针对工作副本进行的,所以要commit才有效,Examine your changes,Status 显示工作拷贝目录与文件的状态 。 用法:status PATH. svn status wc M wc/bar.c A + wc/qax.c Diff diff (di): 显示两个路径中的差异 D:reposwebtesttrunksvn diff -r 19:25 Project.java Revert 恢复原始未改变的工作拷贝文件 (恢复大部份的本地修改),Merge others changes,Merge 将两个来源之间的差异应用至工作拷贝路径 Resolved 移除工作拷贝的目录或文件的 冲突 状态,Commit your changes,Commit commit (ci): 把改变从工作拷贝发送到档案库。 用法:commit 路径. 日志信息必须提供,但可以是空的 D:fffsvn commit -m “lishure“ 正在发送 hh.txt 传输文件数据. 提交后的修订版为 14。,Other userful commands,Cleanup List Cat Log mkdir,3.2 Subversion高级操作,SVN的高级操作主要包括分支(Branch/Tag)以及合并(Merge)操作 分支操作 切换URL 合并操作,为什么需要分支?,你在开发一个软件,基于Windows平台。有一天,老板找到你,希望你把这个软件移植到Linux平台下,同时又不放弃原有版本,怎么管理代码? 你的产品即将发布,需要进行一段时间的Alpha,Beta测试直至正式版Release。同时,市场的竞争迫使你必须马不停蹄的开发下一个新版本,增加许多新的特性。两个工作必须同时进行,怎么管理代码?,什么是分支?,分支的概念,从图中可以看到,分支是开发的一条“支线”。它独立于其他开发的线路,并且和其他线路并行开发 但是,所有的分支都有共同的历史,有着原先共同的主线,创建分支,创建分支使用copy命令 语法:copy 源目录 目标目录 方法 方法1:先把目录checkout到本地,在本地执行copy命令后提交至版本库 例:svn co svn:/localhost/ svn copy trunk/ branches/mybranch svn commit m “My branch created” $ svn copy /repos/calc/trunk /repos/calc/branches/my-calc-branch -m “Creating a private branch of /calc/trunk.“ Committed revision 341. 方法2:直接用copy命令对版本库中两个URL进行操作 例:svn copy svn:/localhost/trunk svn:/localhost/branches/mybranch m “My branch”,创建分支前后版本库的变化,之前 之后,在分支上工作,要想在分支上工作,需要一个对应于分支的工作拷贝。有两种方法可以获得这种工作拷贝 方法1:直接从分支的URL上Checkout出工作拷贝(适用于没有工作拷贝的情况) 方法2:使用switch命令切换工作拷贝对应的URL(在有工作拷贝的基础上),Switch操作,Switch操作可以使工作拷贝在不同的分支之间或者在 位于不同服务器上 相同的 版本库 的 分支间切换。它的作用是改变工作拷贝对应的URL Switch & Update:Update命令是Switch命令的一个子集 语法:switch -relocate 目标URL 慎用-relocate选项,分支的合并(1),分支的合并是指把修改从分支拷贝到主干或者把主干的修改拷贝到分支的过程。 传统方法:diff + patch 例子:svn diff r 2000:2007 svn:/localhost/trunk patchfile patch p0 patchfile 这个例子取出主干2000版到2007版的修改,然后把它应用到工作拷贝(工作拷贝这个时候一般对应于某个分支) 只适用于文件内容,对于目录树结构无能为力,分支的合并(2)Merge操作,Merge操作和传统方法十分类似,但是它能够处理目录树的修改,而不限于单个文件内容 语法:merge 初始版本树 最终版本树 目标 常用语法:merge 初始版本:最终版本 版本库URL 目标 作用:取出初始版本到最终版本的修改,然后把它应用到当前工作拷贝 例子 merge svn:/localhost/trunk2000 svn:/localhost/trunk2007 my_wc merge r 2000:2007 svn:/localhost/trunk my_wc,四、客户端工具tortoiseSVN,tortoiseSVN介绍 tortoiseSVN的使用,tortoiseSVN介绍,Windows操作系统客户机 图形化界面,集成了svn和svnadmin命令行工具的功能。 该客户机集成于资源管理器功能中,使用方便,易于掌握。 直接安装TortoiseSVN-1.1.1-UNICODE_svn-1.1.1.msi,方法同一般软件安装相同,tortoiseSVN 的使用,一旦该客户机安装成功,在指定目录单击右键,弹出菜单中,增加了几项,如图所示:,tortoiseSVN 的使用,如上图所示,在资源管理器菜单中增加了,svn checkout 命令菜单和其他命令,诸如:浏览指定的资源库、创建资源库、从资源库中导出资源、从指定目录中导入到资源库中。 还有一些有关设置tortoisesvn工具的参数。 如果指定的目录已经被纳入到特定的资源库中,那弹出的菜单参数更多,如目录private已经被subversion管理了,它就是一个工作副本,如下图所示:,tortoiseSVN 的使用,tortoiseSVN介绍,如上图所示,弹出菜单中含有更多的svn命令 Update Commit 含有svn的所有命令,但是操作比svn命令行方式方便多了。 通过该客户机可以很快掌握svn命令,同时很好的对自己所属的工作拷贝进行管理,subclipse-source_1.4.2 适合myeclipse5.5使用 site-1.6.17 适合eclipse3.2+使用 注意插件的版本要与eclipse版本的一致性。,五、eclipse插件subeclipse的使用介绍,subclipse-source_1.4.2,该插件适合myeclipse5.5版本,下载网站是: , 下载subclipse-source_1.4.2.zip,subclipse-source_1.4.2安装步骤,启动myeclipse5.5 ,选择Help - Software Updates - Find and Install,中文界面的是:帮助-软件更新-查找并安装。 选择“Search for new features to install” and click Next,中文界面的是:搜索要安装的新功能部件,点击“下一步” 。 点击 “New Local Site”,中文界面的是:新建本地站点 。 查找下载插件所在的路径,并选择/update and click OK,subclipse-source_1.4.2安装步骤,你将能看见该你的站点,选择它并点击下一步,如图所示 :,按照向导,并重新启动eclipse,即完成了安装,Subeclipse的使用,安装完成后。重新启动eclipse后,打开窗口-打开透视图,其他,如图所示,Subeclipse的使用,如上图所示,透视图里多了SVNRepository透视图,选中该透视图,点击“确定”按钮,进入svn透视图,该透视图由以下视图组成,如图所示 :,Subeclipse的使用,视图包括:SVN Repository、SVN Resource History、SVN Properties、SVN Annotate、pendling SVN Operations。其中SVN Repository视图是最主要的,也是通过该视图进行新建连接repository库和操作repository库、等操作。其余视图都是围绕该视图展开。,Subeclipse的使用,新建repository连接,在SVN Repository视图中单击右键,按出菜单,然后新建repository连接,如图所示 :,Subeclipse的使用,点击增加repository后,添加一个新的 SVN Repository库到SVN Repositories 视图,这里需要说明的,repository库必须首先建立,用svnadmin工具建repository库。如图所示 :,Su

温馨提示

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

最新文档

评论

0/150

提交评论