版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、运用SVN进展版本控制 李 洋 摘 要一、Subversion简介二、版本控制的根本知识三、Subversion常用功能四、客户端工具TortoiseSVN五、SVN运用中常见问题一、Subversion简介 版本控制是管理信息变卦的一门艺术 版本控制工具早曾经成为许多程序员的主要工具之一 版本控制软件的用途并不仅限于软件开发的领域 ,只需人们运用计算机来管理经常变卦的信息,就需求运用版本控制工具 协同任务,大大提高团队任务效率 及时了解团队中其他成员的进度 资料共享 记录每个文件从诞生到最终完成全过程的每步细节什么是Subversion? Subversion 是一个自在的、开放源码的版本控
2、制系统 它可以管理各个时辰的文件和目录 Subversion 将文件存放在repository库中。这个仓库非常类似于一个普通的文件效力器 ,只是它还可以记录文件和目录曾经做过的每一次变卦 Subversion允许他数据恢复到早期版本,或者是检查数据修正的历史,可把版本控制系统比作一种“时间机器什么是Subversion? Subversion的仓库可以经过网络来访问,允许不同的用户在不同的计算机上运用 。 不同的运用者可以进展协同任务 。而且一切任务都是有记录的,假设有错只需撤销就可以。 Subversion只是版本控制系统,不是软件配置管理系统(SCM) 。它是一个通用系统,可以管理任何类
3、型的文件集 它是一个通道,可以管理任何计算机中的文件系统。Subversion的历史 CVS有明显的局限性和功能上的缺乏。 2000年开场 ,CollabNet公司 就开场着手开发新的版本控制系统来替代CVS。 Karl Fogel 和Jim Blandy 是CVS开发者,参与到开发subversion当中。 他们让 Subversion 来运用 CVS 的特性,并且保管一样的开发模型 ,但是避开 CVS 的那些明显的缺陷 。 Subversion 于2001年8月进入“自测阶段 。Subversion的特征 目录控制 CVS 只能跟踪单个文件的历史,而 Subversion 实现了一个虚拟的
4、受控文件系统,可以跟踪整个目录的变卦。 真正的版本历史 由于 CVS 只限于记录文件的版本信息,像文件复制、重命名这样的操作它就不支持 ,在 Subversion 中我们可以添加、删除、复制和重命名文件和目录 。Subversion的特征 原子化提交 一个变卦集要么完好地被提交到仓库中,要么不做任何改动 ,从而防止发生不完好地提交变卦的情况 。 受控元数据 每一个文件和目录都有一个与其对应的属性集 。 可选的网络层 Subversion 仓库的存取是一个笼统概念,有利于其他人实现新的网络访问机制 ,Subversion 可以作为一个外部模块插入到 Apache 效力器中 。Subversion
5、的特征 一致的数据处置 Subversion 运用一种二进制的比较算法来表示文件之间的区别 。 高效的分支和标志 分支和标志所带来的开销与工程的规模并没有直接的关系 ,Subversion 在创建分支和标志时运用类似“衔接的方式来复制工程 。 扩展才干 它是由一组设计良好的 APIs实现的,包含在 C 的共享库中 ,这使得它很容易维护。也很容易被其他运用程序或言语运用 Subversion的体系构造Subversion的体系构造 典型的client/server方式构造 在系统的一端是存放着一切受控制数据的 Subversion 仓库。 另一端是 Subversion 的客户端程序,管理着受控
6、数据的一部分在本地的映射称为“任务副本。 在这两端之间,是经过各种仓库存取层Repository Access,RA的多条通道。这些通道中,有些要运用计算机网络,再经过用来访问 Subversion 仓库的效力器。而有些那么完全绕过了网络,直接对仓库进展操作 。Subversion的组件 Svn 一个命令行的客户端程序 Svnversion 报告本地任务副本形状当前档案的修订版本号表示的程序 Svnadmin 用来创建或者是修复仓库的工具 svndumpfilter 过滤资源库程序Subversion的组件 mod_dav_svn Apache 效力器的一个插件模块,用来使其他人可以经过网络访
7、问这个仓库 svnserve 一个定制的、独立的 Subversion 效力程序。可作为一个驻留进程运转或者是由 SSH 调用。是使仓库可以被他人经过网络访问的另一种方法 常用的组件是svn和svnadmin,有图形化客户端来实现svn和svnadmin功能。访问资源库的几种方式款式 存取方式file/ 直接从本地磁盘上访问仓库 经过 WebDAV 协议访问 Apache 效力器而访问仓库https 和 一样,但运用 SSL 来作加密svn 经过svnserve效力自定义的协议svn+ssh 和 svn 一样,但经过SSH封装资源库的URL解析 一切被Subversion管理的目录、文件有独一
8、途径 支持的协议有http,https,svn,svns,file 88/svn/kexie/proj/account/trunk/protocolhostrepositorydirectorySVN效力器端数据目录 dav目录:提供应Apache与mod_dav_svn运用的目录,存储内部数据 db目录:一切版本控制的数据存放文件 hooks目录:放置hook脚本文件的目录 locks目录:用来放置Subversion文件库锁定数据的目录,用来追踪存取文件库的客户端 format文件:一个文本文件,记录文件库配置的版本号 conf目录:是这个仓库的配置文件仓库的用户访问帐
9、号、权限等二、版本控制的根本知识 仓库The Repository 版本控制模型 实践任务中的subversion subversion/cvs/vss比较仓库The Repository Subversion 是一个集中式的系统。它的中心是一个用来存放数据的中心仓库。中心仓库运用典型的文件和目录层次构造树状构造来存储信息。 许许多多的客户端可以衔接到中心仓库,然后读取或者写入文件 。 客户端经过写文件来使其他人共享,也可以读取其它客户端所写入的文件。 典型的客户端/效力器系统模型 ,如下图:仓库The Repository 仓库The Repository 仓库就是一种文件效力器,只是不是通
10、常的那种 。 Subversion 仓库可以记录写入仓库的每一次更改 。 这些更改包括对每一个文件的每一次修正,甚至是对目录本身的修正,例如添加文件、删除文件和对文件和目录的重新编排。这些特性使得 Subversion 仓库与普通的文件效力器相比较为特殊。 客户端同样可以读取文件和目录以前某个时辰的形状 。 版本控制系统的中心:记录和跟踪数据的修正历史 版本控制模型 版本控制系统的中心义务是使得数据可以协作处置和共享。但是不同的系统运用不同的战略来到达这个目的 。 文件共享的问题 :怎样让系统允许用户共享信息,而不会让他们因不测而相互关扰? 锁定修正解锁方案 复制修正合并方案 锁定修正解锁方案
11、 许多版本控制系统都运用“锁定修正解锁模型来处理这个问题 ,诸如:VSS 在这样一个系统中,仓库在一个特定的时辰只允许一个人对某个文件进展修正 。 这种方案的问题是它有一点过于严厉了,经常会阻塞用户的运用 。 锁定能够会带来管理问题 。 锁定能够导致不用要的串行任务 。 锁定能够导致错误的平安形状,文件能够相互依赖复制修正合并方案 Subversion、CVS以及其他一些版本控制系统运用“复制修正合并模型来替代锁定 。 每一个用户的客户端软件从中央仓库创建出一份个人的任务副本仓库中文件和目录的本地映射 。 用户就可以并行任务,修正手中的私有副本 。 这些私有副本合并成为一个全新的版本 。 版本
12、控制系统经常需求合并,但是最终,操作者本身必需担任让合并任务正确进展 。冲突conflict 复制修正合并模型会带来冲突的问题 用于处理冲突的时间远远少于锁定系统所带来的时间浪费。 没有系统可以强迫用户完美的交流,没有系统可以检测语义上的冲突 处理冲突的关键是用户交流模型选择 锁定-修正-解锁模型被以为不利于协作,但有时候锁定会更好。 拷贝-修正-合并模型假定文件是可以根据上下文合并的:就是版本库的文件主要是以行为根底的文本文件例如程序源代码。但对于二进制格式,例如图片或声音,在这种情况下,非常有必要让用户轮番修正文件,假设没有线性的访问,有些人的许多任务就最终要被放弃。 SVN也支持锁定-修
13、正-解锁模型。实践中的 Subversion 任务副本Working Copies 修订版 Revision 混合型修订版任务副本 一个 Subversion 的任务副本其实就是本地系统中的一个普通的文件目录树 。 可以运用任何方式来编辑这些文件。假设是源代码文件的话,他也可以像通常情况那样去编译它们。 任务副本是他的私人任务区 。 假设他不明确的要求,Subversion 绝不会合并其他人的修正,也不会让其他人看到他做的修正 。任务副本 在他曾经修正完任务副本中的文件,并且确信修正正确后,就可以将这些修正公开给同一个工程中的其他任务人员。Subversion 提供了将文件写入仓库的命令 。
14、任务副本中也包含一些额外的文件。它们是由 Subversion 创建和维护的,用来辅助完成这些命令。 最典型的情况是,每一个目录都包含一个叫做 .svn 的子目录 。该目录也被称为“任务副本管理目录。 一个 Subversion 的仓库会包含几个工程,而每一个工程都是仓库的目录的一个子目录。这样,用户的任务副本也就对应于仓库中一个特定的子目录。 SVN的修订版 一个 svn commit 操作可以将恣意数量的文件和目录的修正发布作为一个单独的原子事务来处置 。 在仓库中,每一次提交都被作为一个原子事务来对待 。 每当仓库接受一次提交,仓库中的文件系统目录都会创建一种新的形状,叫做一个修订版。
15、每一个修订本都被赋予一个独一的自然数,并且每一个修订版的数字都比前一个要大。刚刚建立的仓库的初始的版本是 0 ,只包含一个空的根目录。 Subversion 的修订版编号是针对整个目录树的,而不是某一个独立的文件 。 如下图:修订版想象一个修订版编号的数列,从 0 开场,从左延伸到右。每一个修订版编号都对应一个画下面的目录树,而每一个目录树就是在每一次提交之后的仓库的快照。混合型修订版 普通的原那么上,Subversion 努力使本人尽能够的灵敏。一个典型的灵敏性的表达就是允许任务副本中包含有混合的修订版编号的才干。 在完成向仓库的提交之后,刚刚提交的文件和目录就拥有了最新的修订版编号,而其他
16、文件没有。 subversion/cvs/vss比较svncvsvss工作模式Copy-Modify-MergeCopy-Modify-MergeLock-Modify-Unlock粒度目录级文件级文件级访问存储库方式本地文件、专有服务器、webdav本地文件、专有服务器本地文件访问授权基于apache目录授权CVSACL专有管理工具分支和标记支持,高效实现支持不支持使用方式多种专有工具、IDE集成、命令行多种专有工具、IDE集成、命令行专用工具,使用方便分支、标记处理高效实现,相同文件在实现时通过链接实现,不占用额外空间不同分支、标记中相同文件需占不同空间无分支、标记概念三、 Subvers
17、ion常用功能讲解 根本术语 主要讲解SVN 客户端工具的常用命令 经过本部分的学习,可以操作一切义务在日常运用subversion版本控制系统术语 根本修订版revision 存储库接受的每一次修正产生新的修订版 HEAD:存储库中最新版本 BASE:任务拷贝中一个条目的修订版本号,假设这个版本在本地修正了,那么“BASE版本就是这个条目在本地未修正的版本。 分支branches 标志tags 合并mergingSubversion客户端工具 命令行工具 经过命令行方式,主要命令包括: svn:根本svn命令 svnadmin:存储库管理 svnlook:存储库查看 TortoiseSVN
18、与windows资源管理器集成 subclipse 与eclipse集成Subversion常用操作import将本地目录导入存储库checkout从存储库创建目录树的本地任务拷贝update将存储库中文件同步到本地任务拷贝中commit本地任务拷贝中文件修正提交到存储库中add将本地文件参与到存储库中remove从存储库中删除一个文件 (保管历史记录).move在存储库中讲一个文件移到另一个位置Subversion引荐目录构造 存储库 工程名 trunk:主版本 branches:分支版本独立版本 tags:标志版本,比如发行版 v 1.0/ v 2.0等等任务拷贝、存储库同步的形状 工作拷
19、贝存储库CommitUpdate未修改未修改未修改已修改从存储库中取出最新版本已修改未修改将本地修改提交到存储库中已修改已修改可能冲突将存储库的修改合并到工作拷贝中Svn常用命令引见HelpImportCheckout根本的任务周期:Update your working copysvn updateMake changes add delete copy moveSvn常用命令引见Examine your changesstatusdiffrevertMerge others changesMergeResolvedCommit your changescommitIMPORTimport:
20、 提交未纳入版本控制的文件或目录树至档案库 用法:import PATH URL 递归地提交 PATH 的拷贝至地址(URL)。假设省略 PATH,默以为 .。父目录会依需求于档案库内建立。举例:svn import ./kav8 26:1976/hermes/svtest/trunk -m add kav8IMPORT Central RepositoryLocal Workspace(s)AimportACentral RepositoryLocal Workspace(s)Abeforeafterin syncCHECKOUTcheckout (co): 从repos
21、itory中取出文档,在本机建立任务副本working copy开场任务前的前置动作用法:checkout URL PATH例如:svn co 26:1976/hermes/svtestCHECKOUT Central RepositoryLocal Workspace(s)checkoutACentral RepositoryLocal Workspace(s)Abeforeafterin syncAEXPORTExport:导出一个无版本控制的目录树副本用法: svn export -r REV URLPEGREV PATHsvn export -r REV PATH1
22、PEGREV PATH2例如: svn export 26:1976/hermes/svtestExport与Checkout的区别export导出的副本无svn附加文件,不在效力器的版本控制下checkout会在本地建立一个任务区,可以修正和提交UPDATE将repository上的版本整合到本地端的任务副本workspace能够会出现冲突,需求手动处理用法:update PATH. 例如:svn update At revision 25.UPDATE Central RepositoryLocal Workspace(s)updateACentral Reposito
23、ryLocal Workspace(s)Abeforeafterin syncAACOMMIT提交操作使workspace与repository坚持同步本地端的修正包含:文件内容修正、文件目录删除需求发布到repository时用法:commit PATH. m LOG_MSG日志信息必需提供,但可以是空的 例如:svn ci -m add a wordSending dir1/222Transmitting file data .Committed revision 26.COMMIT Central RepositoryLocal Workspace(s)commitACentral Re
24、positoryLocal Workspace(s)Abeforeafterin syncAACOMMIT最好可以一次提交概念性、功能性或义务性的修正确保源代码编译经过做出修正Make changesAdd:添加文件或者目录到资源库中,然后commit。条件是该文件或者目录曾经在相应的目录上。Delete删除在库中的文件或者目录,然后commit。Copy拷贝文件,然后commitMove挪动文件或目录到另外目录中,相当于拷贝、删除的组合。以上的命令是针对任务副本进展的,所以要commit才有效检验修正Examine your changesStatus显示任务拷贝目录与文件的形状 。用法:s
25、tatus PATH. svn status wc M wc/bar.c A wc/qax.cDiffdiff (di): 显示两个途径中的差别 svn diff -r 19:25 Project.javaRevert恢复原始未改动的任务拷贝文件 (恢复大部份的本地修正) 合并修正Merge others changesMerge将两个来源之间的差别运用至任务拷贝途径 Resolved移除任务拷贝的目录或文件的 冲突 形状 Other userful commandsCleanupListCatLogmkdir常见的STATUSA 预定要添加的工程。D 预定要删除的工程。M 工程曾经修正了。U
26、 文件更新了从效力器收到修正)R 工程在任务拷贝中曾经被交换了。这意味着文件预定要删除,然后有一个同样称号的文件要在同一个位置交换它。 C 工程的内容相对于属性与更新得到的数据冲突了。 ? 工程不在版本控制之下。! 工程曾经丧失例如,他运用svn挪动或者删除了它。这也阐明了一个目录不是完好的一个检出或更新中断。 分支BRANCH独立于主干trunk)的“新工程新工程开场于某一稳定版本的revision,经过revision copy得到分支的根本概念正如它的名字,开发的一条线独立于另一条线,假设回想历史,可以发现两条线分享共同的历史例子:svn cp 26:1976/her
27、mes/svtest/trunk 26:1976/hermes/svtest/branch/bc_3_0 -m “create branch from r101建立BRANCH的时机开发能够会对主分支产生影响从某一版本产生独立的“特殊产品处理BUG添加新功能标签 (TAG)与BRANCH类似,给稳定的版本做记号一个标签只是一个工程某一时间的“快照,在Subversion里这个概念无处不在每一次提交的修订版本都是一个准确的快照。从TAG中取出的代码可以编译成独立的产品普通与Release产品一一对应例子:svn cp 26:1976/hermes/svte
28、st/trunk 26:1976/hermes/svtest/tags/ tag_release_3_0 -m “create tag from r101BRANCH与TAG的区别branch和tag,对于svn都是运用copy实现的,所以他们在默许的权限上和普通的目录没有区别。至于何时用tag,何时用branch,完全由人客观的根据规范和需求来选择,而不是强迫的。普通情况下,tag,是用来做一个milestone的,不论是不是release,都是一个可用的版本。这里,应该是只读的。更多的是一个显示用的,给人一个可读readable的标志。Branch 是用来做并行开发的,
29、这里的并行是指和trunk进展比较。例如:3.0开发完成,这个时候要做一个tag,tag_release_3_0,然后基于这个tag做release。trunk进入3.1的开发,但是3.0发现了bug,那么就需求基于tag_release_3_0做一个branch,branch_bugfix_3_0,基于这个branch进展bugfix,等到bugfix终了,做一个tag,tag_release_3_0_1,然后,根据需求决议branch_bugfix_3_0能否并入trunk。合并 MERGE合并BRANCH的修正到TRUNK合并主分支的最新版本到任务副本BUG修正后将BUG去除的代码合并到
30、其他“特殊BRANCH可以用来恢复旧版本merge: Apply the differences between two sources to a working copy path.usage: 1. merge sourceURL1N sourceURL2M WCPATH2. merge sourceWCPATH1N sourceWCPATH2M WCPATH3. merge -c M | -r N:M SOURCEREV WCPATH。其实,第一个URL称之为左边,为起始形状;第二个URL称之为右边,为最终形状,取最新的;最后一个是接纳区别的任务拷贝通常叫做合并的目的。合并 MERGEs
31、vn没有恢复旧版本的直接功能,不过可以运用没有恢复旧版本的直接功能,不过可以运用svn merge命令恢复命令恢复。 例子:当前例子:当前HEAD为为14,而我要恢复成,而我要恢复成10版本,怎样做?版本,怎样做?用用svn merge:svn updatesvn merge -revision 14:10 PATHsvn commit -m restore to revision 10Merge原理是比较指定版本的差别,然后把这些差别运用到本地任原理是比较指定版本的差别,然后把这些差别运用到本地任务副本,而务副本,而-r后的后的14:10,是指相对于版本,是指相对于版本14来说版本来说版本1
32、0的变化留的变化留意,这个版本的次序很重要。,也就是相对版本意,这个版本的次序很重要。,也就是相对版本14,版本,版本10添加添加了哪些文件或目录,以及哪些文件添加了哪些行删除了哪些行。又了哪些文件或目录,以及哪些文件添加了哪些行删除了哪些行。又由于本地版本是最新的由于本地版本是最新的14,所以把这些差别运用到本地版本时就等,所以把这些差别运用到本地版本时就等于把于把14改动成改动成10,其效果等于复原到版本,其效果等于复原到版本10。冲突产生缘由当团队协同任务的时候,多人同时操作一个文件。当有人操作完成后,将该文件提交到SVN上。这样,其他人的本地文件与SVN上的文件版本不一致。当另一人操作
33、完成后,提交该文件时,就会出现冲突对于每一个冲突的文件,Subversion放置三个额外的未版本化文件到他的任务拷贝:filename.mine 更新前的文件,最新更改的内容。filename.rOLDREV 更新操作以前的BASE版本文件,在上次更新之后未作更改的版本。filename.rNEWREV 效力器的版本,对应版本库的HEAD版本。这里OLDREV是本地.svn目录中的修订版本号,NEWREV是版本库中HEAD的版本号。冲突的处理面对文件冲突,您可以选择以下三种方式处理冲突:1.“手动合并冲突文本检查和修正文件中的冲突标志。 -需求团队成员交流2.假设希望取消本人的修正,可以拷贝S
34、ubversion为他生成的文件交换他的任务拷贝用某一个暂时文件覆盖他的任务文件。3.运转svn revert 来放弃一切的修正。处理了重提之后,运转svn resolved,删除了暂时文件,之后可以提交了。如何防止冲突养成良好的习惯,在修正文件之前,先进展一次update操作当修正完成后,及时commit,不要在本地停留时间过长在多人协作时,尽量修正本人撰写的部分,不要修正其他部分多人协作时,添加交流出现冲突很正常,可以经过前面的三个方法处理,不要相互覆盖四、客户端工具TortoiseSVNTortoiseSVN引见TortoiseSVN的运用TortoiseSVN引见Windows操作系统客户端图形化界面,集成了svn和svnadmin命令行工具的功能。该客户端集成于资源管理器功能中,运用方便,易于掌握。网上可搜索下载,直接安装TortoiseSVN-9898-win32-svn-1.6.12.msi ,方法同普通软件安装一样TortoiseSVN运用引见 一旦该客户端安装胜利,在指定目录单击右键,弹出菜单中,添加了几项,如下图:TortoiseSVN运用引见如上图所示,在资源管理器菜单中添加了,svn checkout
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 华师大版初中科学1.2 水的三态变化(30课件)
- 20XX年1月华懋达集团年会庆典概念方案
- 2024年烟台货运资格证模拟考试题
- 算法设计与分析 课件 5.9-动态规划应用-最优二叉搜索树
- 2024年宣城客运资格证考试答题
- 2024年贵州客运从业资格证的考试题目是什么题
- 吉首大学《结构试验》2021-2022学年第一学期期末试卷
- 吉首大学《当代中国电影》2021-2022学年期末试卷
- 《机床夹具设计》试题4
- 吉林艺术学院《音乐文论写作Ⅱ》2021-2022学年第一学期期末试卷
- 6.2共筑生命家园 课件-2024-2025学年统编版道德与法治九年级上册
- 2024年秋新沪教牛津版英语三年级上册课件 Unit 5 第2课时
- 中图版七年级下册信息技术 2.1规划影片任务 教学设计
- 2024中科院心理咨询师考试复习题库(官方版)-上单选题汇
- 小学未成年人思想道德建设工作实施方案
- 化工公司安全知识竞赛题库(共1000题)
- GB/T 44421-2024矫形器配置服务规范
- 福建省福州市(2024年-2025年小学二年级语文)统编版期中考试试卷(含答案)
- 2024-2024部编版九年级语文上册期末考试测试卷(附答案)
- 争做“四有好老师”-当好“四个引路人”
- 2024-2025学年八年级生物上册第一学期 期末综合模拟测试卷( 人教版)
评论
0/150
提交评论