您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > Subversion培训的资料
研究院Subversion简介前言研究院Subversion是什么?Open-sourceVersionControlSystem•管理变更的艺术简称SVN作为CVS的替代品•项目开始于2000年•项目目标:建立在CVS思想之上修正CVS的错误和不合理的特性使用方法与CVS保持足够的相似性使得CVS用户可以轻松地做出转换研究院为什么要使用SVN使用方法类似CVS——我们不会陌生克服了CVS的诸多问题•使用SVN免不了要和CVS作比较,后面有较详细的比较更优良的系统架构•支持多种语言的API操作:C、Java、Python、Perl•支持可扩展的网络层可使用Apache作为服务器,支持WebDAV标准协议支持SSH、HTTP、HTTPS稳定可靠•2001年8月,SVN项目本身的代码也开始运用SVN来管理•Apache组织的大部分代码也被迁移到SVN中•我们研究院也已经使用SVN了一段时间,没有发生任何问题,带来的只有安心和舒心研究院SVN的架构图客户端应用•Commandlineclient•GUIclient(TortoiseSVN)API•支持多语言•支持多种访问方式(DAV、SVN、Local)Repository•BerkeleyDB•FSFS(推荐)研究院Subversion简介版本控制基本概念研究院SVN本质SVN本质上是一个文件共享系统•有人往里面放东西•有人从里面拿东西但普通文件共享系统无法回答这些问题•上个星期三的目录是怎样的?•谁最后一个更改了这个文件,更改了什么?SVN最重要的功能,就是在文件共享系统的基础之上,记录每一次的修改历史研究院文件共享的问题怎样让系统允许用户共享信息,而不会让他们因意外而互相干扰?研究院锁定-修改-解锁方案Harry锁定文件Harry读取文件Sally因而无法锁定并修改文件Harry修改文件Harry解锁文件Sally锁定,并看到最新的修改研究院拷贝-修改-合并方案研究院SVN的方案SVN和CVS一样,都是以“拷贝-修改-合并”模型为基础的。但是SVN也提供了“锁定-修改-解锁”的方式•对于二进制文件的处理特别有用•这类文件必须序列化修改研究院关键词RepositoryWorkingCopyCheck-outCommit(或Check-in)UpdateMergeConflict研究院Subversion简介特性研究院SVN的修订版本(Revision)Revision一般翻译作“修订版本”•其概念有别于版本(Version)•但为了方便,我们常简称“版本”SVN的版本号是正整数•例如:版本1、2、3、4567•而CVS的版本号是:1.2、1.3、1.2.2.1、1.2.4.5每次提交,版本号递增一次研究院SVN的修订版本(Revision)SVN的版本是基于完整目录树的•而CVS是基于单个文件的•SVN可以记录目录的移动、复制、删除而CVS无法管理目录,只能用-P参数控制:当目录中没有文件时,不要checkout它。研究院SVN的其它特性简介SVN的提交是原子操作•要么全成功,要么全失败•而CVS提交一个目录时,可能只成功了一半,导致状态不一致,很难恢复SVN可以记录文件、目录的改变•移动、复制、删除、修改•而CVS只能记录文件的修改和删除SVN支持元数据(properties),并记录其历史•在SVN中,元数据非常有用,后面会讲到•而CVS不支持元数据SVN的比较算法是基于二进制的•而CVS必须区别二进制和文本,前者必须指定-kb,后者-kk,否则二进制文件很容易被破坏,却没有任何警告。研究院Subversion简介在实践中学习研究院为了使用SVN,要安装哪些东西在Windows下安装•安装Subversion命令行客户端•安装TortoiseSVN资源管理器集成客户端在Linux下安装•安装Subversion命令行客户端和Eclipse集成•安装Subclipse插件研究院先看一个现成的SVNRepositoryAlibabaToolkit框架源代码•有什么特别吗?•这是一个普通的Web页面,使用HTTP协议•其它协议:file:///、https://、svn://、svn+ssh://•你可以点击进入任何一个目录,查看任何一个文件的内容•所有内容均为当前的最新版本其它查看repository的方法•用WebDAV浏览器在资源管理器里,把repository映射成一个Windows驱动器在Linux里,把repositorymount到一个目录•用TortoiseSVN的RepositoryBrowser(文件库浏览器)研究院如果我想修改repository中的文件/目录Check-out项目•svnco和CVS命令有什么区别?•CVS命令:cvsco–P:pserver:baobao@cvs.alibaba-inc.com:/cvsroot/opentechtoolkit•URL的区别•参数的区别:-P•认证的区别•Repositorypath的区别研究院创建一个自己repository在自己的硬盘上建一个repository•svnadmincreatec:/myrepos在新的repository中创建一个新的项目•svnmkdirfile:///c:/myrepos/myproject•注:这是一个remote操作,直接作用在repository上。此功能也是SVN优于CVS的地方。Check-out新项目•svncofile:///c:/myrepos/myproject•结果:在当前目录中创建了myproject的workingcopy。研究院添加新内容向SVN中添加文件/目录•svnadd*提交•svnci添加1个文件,修改2个文件,再一起提交•试着使用TortoiseSVN来提交修改查看历史记录,你看到了什么?•svnup•svnlog–v•也可以用TortoiseSVN来看历史记录,更直观研究院尝试SVN常用的命令–更新/合并workingcopy更新——将repository中的最新修改合并到workingcopy中•svnupdate或svnup解决冲突(后面详述)•svnresolved和CVS的差异•cvsup–dP•由于CVS的status命令的功能有问题,所以我们常用update命令来代替status命令,但SVN不需要这样做,后面会讲到status命令•cvs没有resolved命令,因此很容易把还没有处理的冲突文件提交到repository中。研究院尝试SVN常用的命令–修改命令添加文件/目录•svnadd删除文件/目录•svnremove或rm、delete、del复制文件/目录•svncopy或cp•Cheapcopy,copy的代价非常低,瞬间就可完成移动文件/目录•svnmove或mv、rename、ren•相当于先复制,再删除删除/移动/复制命令均支持远程操作,直接作用于repository,相当于checkout/modify/commit三步合成一步和CVS的差异•CVS无法操作目录,无法移动、复制研究院尝试SVN常用的命令–查看修改和状态查看状态•svnstatus或stat、st查看差异•svndiff或di反悔•svnrevert和CVS的差异•CVS的status命令输出的结果不利于查看,以至于通常我们使用cvsup来代替cvsst•CVS的status命令必须访问服务器,而SVN的status、diff、revert命令可以离线使用•CVS没有直接反悔的命令研究院尝试SVN常用的命令–提交修改提交•svncommit或ci如果提交因为某种原因失败(比如死机),可能会留下某种状态,使你不能再次提交。(确保提交是原子操作)•svncleanup对于远程操作,无需提交SVN对commit进行优化,只在网络上传输变化的部分。这在你提交一个100M的文件时,会有明显的效果。研究院解决冲突假设你和你的同事同时修改了同一个文件的同一行,当你执行svnup命令后,系统显示:C:\myprojectsvnupCproject.xml更新至修订版4。表示project.xml文件冲突了,同时,将会产生三个额外的文件:•project.xml.r3——原始文件(基线)•project.xml.mine——我作的修改•project.xml.r4——别人做的修改用TortoiseMerge来处理冲突•也可以用任何3-wayCompares软件来处理处理完以后用svnresolved告诉系统冲突被解决,然后临时文件会被删除也可以用svnrevert放弃修改研究院取得命令的帮助SVN还有很多命令,不可能在此细述欲了解更多命令,可执行:•svnhelp欲了解某个命令的细节(例如update),可执行:•svnhelpupdate研究院标签与分支标签的作用•在CVS中,由于所有文件是孤立的,例如:文件A的版本是1.1文件B的版本是1.5文件C的版本是1.123•为了记录某一时刻各文件的版本,我们不得不对它们打一个标签,但SVN不需要这样做,因为SVN的每个版本已经包含了整个目录树的信息。•标签的另一个作用是为某个milestone取一个名字。这就是SVN标签的作用。分支的作用•并行开发研究院创建SVN标签与分支首先,让我们重新组织一下repository的目录结构(推荐用TortoiseSVN的repos-browser)•创建trunk目录——主干•创建tags目录——标签•创建branches目录——分支•将原来的myproject目录移到trunk目录中研究院建立一个标签和分支建立标签myproject_2006_0522:•svncopyfile:///c:/myrepos/trunk/myprojectfile:///c:/myrepos/tags/myproject_2006_0522-m创建2006-05-22标签•也可以在repos-browser中直接操作建立分支myproject_test_branch•svncopyfile:///c:/myrepos/trunk/myprojectfile:///c:/myrepos/branches/myproject_test_branch-m创建testbranch分支•也可以在repos-browser中直接操作研究院在分支和主干之间切换别忘了,我们刚才创建的分支是一个远程操作,本地的workingcopy并没有被改变因此我们需要将workingcopy切换到分支上:•svnswitchfile:///c:/myrepos/branches/myproject_test_branch•也可以用TortoiseSVN来做同样的事切换回主干:•svnswitchfile:///c:/myrepos/trunk/myproject•也可以用TortoiseSVN来做同样的事看看当前是在主干还是分支上?•svninfo研究院合并分支将分支中所做的一切修改,合并到主干的workingcopy中:•svnlogfile:///c:/myrepos/branches/myproject_test_branch--stop-on-copy-------------
本文标题:Subversion培训的资料
链接地址:https://www.777doc.com/doc-3244369 .html