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

下载本文档

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

文档简介

第7讲,版本控制管理工具(2),主要内容,1.Subversion简介2、版本控制的基本知识3、Subversion常用功能讲解4、客户端工具tortoiseSVN5、eclipse插件subeclipse的使用介绍6、使用svn中常见问题7、版本管理规则,一、Subversion简介,什么是SubversionSubversion的历史Subversion的特色Subversion的体系结构Subversion的安装Subversion的组件Subversion快速入门Subversion客户端工具,什么是Subversion?,版本控制是管理信息变更的一门艺术。版本控制工具早已经成为许多程序员的主要工具之一。版本控制软件的用途并不仅限于软件开发的领域,只要人们使用计算机来管理经常变更的信息,就需要使用版本控制工具。Subversion的一个概括性的介绍:Subversion是什么?它用来做什么?以及如何得到它。,什么是Subversion?,Subversion是一个自由的、开放源码的版本控制系统它可以管理各个时刻的文件和目录。Subversion将文件存放在repository库中。这个仓库非常类似于一个普通的文件服务器,只是它还可以记录文件和目录曾经做过的每一次变更。可把版本控制系统比作一种“时间机器”。,什么是Subversion?,Subversion的仓库可以通过网络来访问,允许不同的用户在不同的计算机上使用。不同的使用者可以进行协同工作。而且所有工作都是有记录的,如果有错只要撤销就可以。Subversion只是版本控制系统,不是软件配置管理系统(SCM)。它是一个通道,可以管理任何计算机中的文件系统。,WhatisSubversionnot?,svnisnotabuildsystem.svnisnotasubstituteformanagement.svnisnotasubstitutefordeveloperCommunication.svndoesnothavechangecontrol.svnisnotanautomatedtestingprogram.,Subversion的历史,CVS有明显的局限性和功能上的不足。2000年开始,CollabNet公司就开始着手开发新的版本控制系统来代替CVS。KarlFogel和JimBlandy是CVS开发者,加入到开发subversion当中。他们让Subversion来使用CVS的特性,并且保留相同的开发模型,但是避开CVS的那些明显的缺陷。Subversion于2001年8月进入“自测”阶段。,Subversion的特色,目录控制CVS只能跟踪单个文件的历史,而Subversion实现了一个虚拟的受控文件系统,可以跟踪整个目录的变更。真正的版本历史由于CVS只限于记录文件的版本信息,像文件复制、重命名这样的操作它就不支持,在Subversion中我们可以添加、删除、复制和重命名文件和目录。,Subversion的特色,原子化提交一个变更集要么完整地被提交到仓库中,要么不做任何改变,从而避免发生不完整地提交变更的情况。受控元数据每一个文件和目录都有一个与其对应的属性集。可选的网络层Subversion仓库的存取是一个抽象概念,有利于其他人实现新的网络访问机制,Subversion可以作为一个外部模块插入到ApacheHTTP服务器中。,Subversion的特色,一致的数据处理Subversion使用一种二进制的比较算法来表示文件之间的区别。高效的分支和标记分支和标记所带来的开销与项目的规模并没有直接的关系,Subversion在创建分支和标记时使用类似“连接”的方式来复制项目。扩展能力它是由一组设计良好的APIs实现的,包含在C的共享库中,这使得它很容易维护。也很容易被其他应用程序或语言使用。,Subversion的体系结构,Subversion的体系结构,典型的client/server模式结构在系统的一端是存放着所有受控制数据的Subversion仓库。另一端是Subversion的客户端程序,管理着受控数据的一部分在本地的映射(称为“工作副本”)。在这两端之间,是通过各种仓库存取层(RepositoryAccess,RA)的多条通道。这些通道中,有些要使用计算机网络,再通过用来访问Subversion仓库的服务器。而有些则完全绕过了网络,直接对仓库进行操作。,Subversion的安装,Subversion是建立在一个叫做APR(theApachePortableRuntimelibrary)的可移植运行库之上的。Subversion可以运行在任何Apache服务器可以运行的操作系统之上:Windows、Linux,各种类型的BSD、MacOSX,Netware以及其他的系统。获得Subversion的最简单的方法就是下载适合于你的操作系统的二进制软件包Subversion的站点()Windows安装是图形化界面,linux安装较复杂,另有讨论。,Subversion的组件,svn一个命令行的客户端程序svnversion报告本地工作副本状态(当前档案的修订版本号表示)的程序svnadmin用来创建或者是修复仓库的工具svndumpfilter过滤资源库程序,Subversion的组件,mod_dav_svnApache服务器的一个插件模块,用来使其他人可以通过网络访问这个仓库svnserve一个定制的、独立的Subversion服务程序。可作为一个驻留进程运行或者是由SSH调用。是使仓库可以被别人通过网络访问的另一种方法常用的组件是svn和svnadmin,有图形化客户端来实现svn和svnadmin功能。,Subversion快速入门,运行下面的例子,必须确保svn和svnadmin这两个工具正常运行。同时还必须保证你的svn工具是针对BerkeleyDB编译的。可以运行svn-version然后检查ra_local模块是否可用来确认,如果没有这个模块,我们的客户端程序将无法访问file:/URLs,Subversion快速入门,Subversion快速入门,$svnadmincreate/path/to/reposls/path/to/reposconf/dav/db/formathooks/locks/README.txt这个命令创建了一个包含Subversion仓库的目录/path/to/repos。另外,这个目录必须创建在本地磁盘,而不能是在网络共享磁盘上下一步,准备一个类似下面例子中的用来导入的文件、目录树。在树结构中,应该包含三个顶层目录:branches、tags和trunk,Subversion快速入门,/tmp/project/branches/tmp/project/tags/tmp/project/trunk/foo.cbar.cMakefile.,Subversion快速入门,一旦你准备好了目录树,就可以使用svnimport命令来导入数据到仓库中了svnimport/tmp/projectfile:/path/to/repos-minitialimportAdding/tmp/project/branchesAdding/tmp/project/tagsAdding/tmp/project/trunkAdding/tmp/project/trunk/foo.cAdding/tmp/project/trunk/bar.cAdding/tmp/project/trunk/Makefile.Committedrevision1.,Subversion快速入门,现在,仓库中就有了整个目录树中的数据为了开始操作仓库中的数据,我们需要先创建一个数据的“工作副本(workingcopy)”出来。这类似于一种私有的工作区,向Subversion“checkout”(借出)一份仓库中trunk目录的工作副本:$svncheckoutfile:/path/to/repos/trunkproject在一个新的project目录下就有了仓库中一部分数据的一个私人副本,可以在本地工作副本上编辑某个文件,然后再将那些修改提交到仓库中。,Subversion客户端工具,命令行工具通过命令行方式,主要命令包括:svn:基本svn命令svnadmin:存储库管理svnlook:存储库查看TortoiseSVN与windows资源管理器集成subclipse与eclipse集成,二、版本控制的基本知识,2.1仓库(TheRepository)2.2版本控制模型2.3实际工作中的subversion2.4subversion/cvs/vss比较,2.1仓库(TheRepository),Subversion是一个集中式的系统。它的核心是一个用来存放数据的中心仓库。中心仓库使用典型的文件和目录层次结构树状结构来存储信息。许许多多的客户端可以连接到中心仓库,然后读取或者写入文件。客户端通过写文件来使其他人共享,也可以读取其它客户端所写入的文件。典型的客户端/服务器系统模型,如图所示:,2.1仓库(TheRepository),仓库就是一种文件服务器,只是不是通常的那种。Subversion仓库可以记录写入仓库的每一次更改。这些更改包括对每一个文件的每一次修改,甚至是对目录本身的修改,例如添加文件、删除文件和对文件和目录的重新编排。这些特性使得Subversion仓库与一般的文件服务器相比较为特殊。客户端同样可以读取文件和目录以前某个时刻的状态。版本控制系统的核心:记录和跟踪数据的修改历史。,2.1仓库(TheRepository),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等格式保存的文档。对于二进制文件,可以采用锁定模型如用MicrosoftWord格式,PDF等格式保存的文档及图片,声音,可执行文件,库等,有必要采用锁定让用户轮流修改文件。svn两种模型都支持,冲突(conflict),如果Sally的修改会覆盖掉Harry的工作怎么办?这种情况叫做冲突(conflict)当Harry要求他的客户端软件合并仓库中的最新修改到工作副本时,文件A被标记为冲突状态。遇到这种情况,只有人本身才有能力理解和做出合理的选择。注意,软件并不能自动解决冲突。用于解决冲突的时间远远少于锁定系统所带来的时间浪费。,解决冲突的关键是用户交流,最终,我们将所有的问题归结为一个关键因素:用户交流。如果用户很少交流,不论是语法的还是语义的冲突都会增加。没有哪个系统可以让用户完美地交流,也没有哪个系统可以自动检查出语义上的冲突。,文本文件产生冲突,进行合并Merge,编辑冲突EditReflict,消除冲突,2.3实际中的Subversion,工作副本WorkingCopies资源库存储的不同方式URLs修订本工作副本如何跟踪仓库,工作副本WorkingCopies,一个Subversion的工作副本其实就是本地系统中的一个普通的文件目录树。可以使用任何方式来编辑这些文件。如果是源代码文件的话,你也可以像通常情况那样去编译它们。工作副本是你的私人工作区。如果你不明确的要求,Subversion绝不会合并其他人的修改,也不会让其他人看到你做的修改。,工作副本WorkingCopies,在你已经修改完工作副本中的文件,并且确信修改正确后,就可以将这些修改公开给同一个项目中的其他工作人员。Subversion提供了将文件写入仓库的命令。工作副本中也包含一些额外的文件。它们是由Subversion创建和维护的,用来辅助完成这些命令。最典型的情况是,每一个目录都包含一个叫做.svn的子目录。该目录也被称为“工作副本管理目录”。一个Subversion的仓库会包含几个项目,而每一个项目都是仓库的目录的一个子目录。这样,用户的工作副本也就对应于仓库中一个特定的子目录。,工作副本WorkingCopies,资源库存储的不同方式URLs,修订本,一个svncommit操作可以将任意数量的文件和目录的修改发布作为一个单独的原子事务来处理。在仓库中,每一次提交都被作为一个原子事务来对待。每当仓库接受一次提交,仓库中的文件系统目录都会创建一种新的状态,叫做一个修订本。每一个修订本都被赋予一个唯一的自然数,并且每一个修订本的数字都比前一个要大。刚刚建立的仓库的初始的版本是0,只包含一个空的根目录。Subversion的修订版编号是针对整个目录树的,而不是某一个独立的文件。,修订本,设想一个修订版编号的数列,从0开始,从左延伸到右。每一个修订版编号都对应一个画下面的目录树,而每一个目录树就是在每一次提交之后的仓库的快照。,如图所示:,Subversion推荐目录结构,仓库项目名trunk:主版本branches:分支版本(独立版本)tags:标记版本,比如发行版v1.0/v2.0等等,SVN仓库常用目录组织结构,工作副本如何跟踪仓库,2.4subversion/cvs/vss比较,3.1Svn常用命令介绍3.2Subversion高级操作,三、subversion常用功能讲解,3.1Svn常用命令介绍,HelpImportCheckoutUpdateyourworkingcopySvnupdateMakechangesadddeletecopymove,3.1Svn常用命令介绍(2),ExamineyourchangesstatusdiffrevertMergeotherschangesMergeResolvedCommityourchangescommit,help,C:svnhelp用法:svnoptionsargs请使用“svnhelp”显示子命令的辅助说明。大多数的子命令可接受文件或目录参数,对目录进行递回存取。如无指定参数给命令,默认将会自当前的目录(包含)进行递归存取,import,import:提交未纳入版本控制的文件或目录树至档案库用法:importPATHURL递归地提交PATH的拷贝至地址(URL)。如果省略PATH,默认为.。父目录会依需要于档案库内建立。举例:D:svnimport-mimportdirectory-usernamelsr-passwordlsr./monitorhttps:/localhost/svn/reposs,checkout,checkout(co):从档案库签出工作拷贝用法:checkout地址.路径例如:D:ggsvncohttps:/localhost/svn/reposs,update,将档案库的改变反应至工作拷贝用法:updatePATH.例如:D:privatepublish个人信息svnupdate于修订版48。,Makechanges,Add:增加文件或者目录到资源库中,然后commit。条件是该文件或者目录已经在相应的目录上。Delete删除在库中的文件或者目录,然后commit。Copy拷贝文件,然后commitMove移动文件或目录到另外目录中,相当于拷贝、删除的组合。以上的命令是针对工作副本进行的,所以要commit才有效,Examineyourchanges,Status显示工作拷贝目录与文件的状态。用法:statusPATH.svnstatuswcMwc/bar.cA+wc/qax.cDiffdiff(di):显示两个路径中的差异D:reposwebtesttrunksvndiff-r19:25Project.javaRevert恢复原始未改变的工作拷贝文件(恢复大部份的本地修改),Mergeotherschanges,Merge将两个来源之间的差异应用至工作拷贝路径Resolved移除工作拷贝的目录或文件的冲突状态,Commityourchanges,Commitcommit(ci):把改变从工作拷贝发送到档案库。用法:commit路径.日志信息必须提供,但可以是空的D:fffsvncommit-mlishure正在发送hh.txt传输文件数据.提交后的修订版为14。,Otheruserfulcommands,CleanupListCatLogmkdir,3.2Subversion高级操作,SVN的高级操作主要包括分支(Branch/Tag)以及合并(Merge)操作分支操作切换URL合并操作,为什么需要分支?,你在开发一个软件,基于Windows平台。有一天,老板找到你,希望你把这个软件移植到Linux平台下,同时又不放弃原有版本,怎么管理代码?你的产品即将发布,需要进行一段时间的Alpha,Beta测试直至正式版Release。同时,市场的竞争迫使你必须马不停蹄的开发下一个新版本,增加许多新的特性。两个工作必须同时进行,怎么管理代码?,什么是分支?,分支的概念,从图中可以看到,分支是开发的一条“支线”。它独立于其他开发的线路,并且和其他线路并行开发但是,所有的分支都有共同的历史,有着原先共同的主线,创建分支,创建分支使用copy命令语法:copy源目录目标目录方法方法1:先把目录checkout到本地,在本地执行copy命令后提交至版本库例:svncosvn:/localhost/svncopytrunk/branches/mybranchsvncommitm“Mybranchcreated”$svncopy例:svncopysvn:/localhost/trunksvn:/localhost/branches/mybranchm“Mybranch”,创建分支前后版本库的变化,之前之后,在分支上工作,要想在分支上工作,需要一个对应于分支的工作拷贝。有两种方法可以获得这种工作拷贝方法1:直接从分支的URL上Checkout出工作拷贝(适用于没有工作拷贝的情况)方法2:使用switch命令切换工作拷贝对应的URL(在有工作拷贝的基础上),Switch操作,Switch操作可以使工作拷贝在不同的分支之间或者在位于不同服务器上相同的版本库的分支间切换。它的作用是改变工作拷贝对应的URLSwitch&Update:Update命令是Switch命令的一个子集语法:switch-relocate目标URL慎用-relocate选项,分支的合并(1),分支的合并是指把修改从分支拷贝到主干或者把主干的修改拷贝到分支的过程。传统方法:diff+patch例子:svndiffr2000:2007svn:/localhost/trunkpatchfilepatchp0SoftwareUpdates-FindandInstall,中文界面的是:帮助-软件更新-查找并安装。选择“Searchfornewfeaturestoinstall”andclickNext,中文界面的是:搜索要安装的新功能部件,点击“下一步”。点击“NewLocalSite”,中文界面的是:新建本地站点。查找下载插件所在的路径,并选择/updateandclickOK,subclipse-source_1.4.2安装步骤,你将能看见该你的站点,选择它并点击下一步,如图所示:,按照向导,并重新启动eclipse,即完成了安装,Subeclipse的使用,安装完成后。重新启动eclipse后,打开窗口-打开透视图,其他,如图所示,Subeclipse的使用,如上图所示,透视图里多了SVNRepository透视图,选中该透视图,点击“确定”按钮,进入svn透视图,该透视图由以下视图组成,如图所示:,Subeclipse的使用,视图包括:SVNRepository、SVNResourceHistory、SVNProperties、SVNAnnotate、pendlingSVNOperations。其中SVNRepository视图是最主要的,也是通过该视图进行新建连接repository库和操作repository库、等操作。其余视图都是围绕该视图展开。,Subeclipse的使用,新建repository连接,在SVNRepository视图中单击右键,按出菜单,然后新建repository连接,如图所示:,Subeclipse的使用,点击增加repository后,添加一个新的SVNRepository库到SVNRepositories视图,这里需要说明的,repository库必须首先建立,用svnadmin工具建repository库。如图所示:,Subeclipse的使用,url是repository库所在地方,url可以是:file:/、svn:/、http:/和https:/这样几种方式。在这里是https方式,https:/localhost/svn/MyNewRepository,在svn虚拟路径下有一个名叫MyNewRepository的sub版本库。由于采用apa

温馨提示

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

最新文档

评论

0/150

提交评论