




已阅读5页,还剩54页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Subversion版本控制工具图解教程(初稿)易文龙 编写QQ:452070E-Mail:Subversion版本控制1. 概述1.1什么是版本控制版本控制(Revision control)是一种软体工程技巧,籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新。版本控制透过文档控制(documentation control)记录程序各个模组的改动,并为每次改动编上序号。这种方法是工程图(engineering drawings)维护(maintenance)的标准做法, 它伴随着工程图从图的诞生一直到图的定型。 一种简单的版本控制形式,例如,赋给图的初版一个版本等级“0”。当做了第一次改变后,版本等级改为“1”,以此类推等等。1.2 什么是 SubversionSubversion是一个免费开源的版本控制系统。即在它的管理下,文件和目录可以跨越时空,允许你的数据恢复到早期版本,或者是检查数据修改的历史。正因为如此,许多人将版本控制系统当作一种神奇的“时间机器”。 Subversion的版本库可以通过网络访问,从而使用户可以在不同的电脑上进行操作。从某种程度上来说,允许用户在各自的空间里修改和管理同一组数据可以促进团队协作。因为修改不再是单线进行,开发速度会更快。此外,由于所有的工作都已版本化,也就不必担心由于错误的更改而影响软件质量如果出现不正确的更改,只要撤销那一次更改操作即可。1.3 常见的版本控制系统2. VSS:Visual Source Save,微软公司的版本控制器软件,/zh-cn/vstudio/aa718670.aspx 3. CVS:Concurrent Versions System,开源免费,/cvs/ 4. Subversion,开源免费,/ 5. ClearCase,IBM公司,/software/awdtools/clearcase/ 2基本概念版本控制工具并非程序员专用,它可以管理任何类型的文件。本文讲述的是目前最流行的Subversion,下面将介绍版本控制的几个基本概念。21版本库(repository)Subversion是一个“集中式”的信息共享系统。版本库是Subversion的核心部分,是数据的中央仓库。版本库以典型的文件和目录结构形式文件系统树来保存信息。任意数量的客户端连接到Subversion版本库,读取、修改这些文件。客户端通过写数据将信息分享给其他人,通过读取数据获取别人共享的信息。如图1-1。图1-1一个典型的客户/服务器系统的版本控制系统2.2文件共享的问题所有的版本控制系统都需要解决这样一个基础问题:怎样让系统允许用户共享信息,而不会让他们因意外而互相干扰?版本库里意外覆盖别人的更改非常的容易。考虑图1-2需要避免的问题情景,例如:我们有两个共同工作者,Harry和Sally,他们想同时编辑版本库里的同一个文件,如果首先Harry保存它的修改,过了一会,Sally可能凑巧用自己的版本覆盖了这些文件,Harry的更改不会永远消失(因为系统记录了每次修改),但Harry所有的修改不会出现在Sally新版本的文件中,所以Harry的工作还是丢失了至少是从最新的版本中丢失了而且可能是意外的,这就是我们要明确避免的情况。图1-2 需要避免的问题针对以上问题提出以下两种解决方案:“锁定-修改-解锁”方案许多版本控制系统使用锁定-修改-解锁机制解决这种问题,在这样的模型里,在一个时间段里版本库的一个文件只允许被一个人修改。首先在修改之前,Harry要“锁定”住这个文件,锁定很像是从图书馆借一本书,如果Harry锁住这个文件,Sally不能做任何修改,如果Sally想请求得到一个锁,版本库会拒绝这个请求。在Harry结束编辑并且放开这个锁之前,她只可以阅读文件。Harry解锁后,就要换班了,Sally得到自己的轮换位置,锁定并且开始编辑这个文件。如图1-3“锁定-修改-解锁 方案”所示:图1-3 “锁定-修改-解锁”方案“拷贝-修改-合并”方案Subversion,CVS和一些版本控制系统使用拷贝-修改-合并模型,在这种模型里,每一个客户联系项目版本库建立一个个人工作拷贝版本库中文件和目录的本地映射。用户并行工作,修改各自的工作拷贝,最终,各个私有的拷贝合并在一起,成为最终的版本,这种系统通常可以辅助合并操作,但是最终要靠人工去确定正误。 这是一个例子,Harry和Sally为同一个项目各自建立了一个工作拷贝,工作是并行的,修改了同一个文件A,Sally首先保存修改到版本库,当Harry想去提交修改的时候,版本库提示文件A已经过期,换句话说,A在他上次更新之后已经更改了,所以当他通过客户端请求合并版本库和他的工作拷贝之后,碰巧Sally的修改和他的不冲突,所以一旦他把所有的修改集成到一起,他可以将工作拷贝保存到版本库,如图1-4、1-5“拷贝-修改-合并 方案”展示了这一过程。 图1-4 “拷贝-修改-合并”方案(一)图1-5 “拷贝-修改-合并”方案(二)如果Sally和Harry的修改交迭了该怎么办?这种情况叫做冲突,这通常不是个大问题,当Harry告诉他的客户端去合并版本库的最新修改到自己的工作拷贝时,他的文件A就会处于冲突状态:他可以看到一对冲突的修改集,并手工的选择保留一组修改。需要注意的是软件不能自动的解决冲突,只有人可以理解并作出智能的选择,一旦Harry手工的解决了冲突也许需要与Sally讨论它可以安全的把合并的文件保存到版本库。 拷贝-修改-合并模型感觉有一点混乱,但在实践中,通常运行的很平稳,用户可以并行的工作,不必等待别人,当工作在同一个文件上时,也很少会有交迭发生,冲突并不频繁,处理冲突的时间远比等待解锁花费的时间少。最后,一切都要归结到一条重要的因素:用户交流。当用户交流贫乏,语法和语义的冲突就会增加,没有系统可以强制用户完美的交流,没有系统可以检测语义上的冲突,所以没有任何证据能够承诺锁定系统可以防止冲突,实践中,锁定除了约束了生产力,并没有做什么事。上面介绍的两个解决冲突的方案中,后者效率比较高。那么什么时候使用“锁定-修改-解锁”方案呢?由于“拷贝-修改-合并”是假定文件是可以根据上下文合并的,即版本库的文件主要是以行为基础的文本文件(例如程序源代码)。但对于二进制格式,例如艺术品或声音,在这种情况下,十分有必要让用户轮流修改文件,则使用“锁定-修改-解锁”方案较好。6. SVN安装与集成其它相关软件 3.1 SVN服务器端的安装l 下载地址:/files/documents/15/47842/Setup-Subversion-1.6.0.msil 安装步骤如下:图1-6 SVN服务器安装第一步图1-7 SVN服务器安装第二步图1-8 SVN服务器安装第三步图1-9 SVN服务器安装第四步图1-10 SVN服务器安装第五步点击“Finish”按钮结束安装。由于笔者在安装过程中省略了部分截图,请读者直接走默认安装就可以。l 配置环境变量,给path添加一个变量值为:svn的安装目录中的bin目录。例如:本机是C:Program FilesSubversionbin。其目的是在命令行中让操作系统可以自动搜索到svn的相关命令。图1-11 path环境变量的配置l 在命令行中操作svn服务器1) svn help查询命令。图1-12 通过svn help命令查询svn的基本命令2) 创建数据仓库。例如:把数据仓库创建在D:Respository图1-13 命令行的方式创建数据仓库3) 启动svn服务器。图1-14 启动svn服务器图1-14中 svnserve为启动命令,-d表示在后台运行,-r指定服务器的仓库路径。注意:当启动用命令启动SVN服务器后,不能关闭此窗口,如果关闭则SVN服务器停止运行。4) 将本地文件导入到SVN服务器。 例如:将作者E:CodeTest.java文件导入到SVN服务器的数据仓库。 图1-15 导入文件失败提示(一) 当输入导入命令svn import svn:/localhost命令出现提示:无法使用外部设备编辑器取得日志信息。根据提示我们在操作系统的环境变量中,新建变量SVN_EDITOR,其值可以指向任何一个文本编辑器,在这里我们指向windows自带的notepad,如图1-16所示:图1-16 新建SVN_EDITOR环境变量新建好了SVN_EDITOR环境变量后,重新打开此窗口。再一次输入导入命令,导入出现授权失败,如图1-17所示:图1-17 导入授权失败出现此问题,是由于我们的SVN服务器的权限验证失败,我们打开开始创建的数据仓库目录中的svnserve.conf文件(D:Repositoryconfsvnserve.conf),把文件中的第12行的(注释)#号去掉,同时再加一行anon-access=write。这样说明了匿名用户都可以对此数据仓库进行读写操作,修改完成之后,必须重启svn服务器。即把服务器端的命令行窗口直接关闭,重新开启一个,并输入启动命令。再在客户端重新输入导入命令,结果是成功导入。如图1-18所示:图1-18导入文件成功 图1-18是把命令提示符所在的当前目录里面的所有文件导入到了服务器的数据仓库中,且当然版本号为2(表明向服务器提交过两次)。由于每次导入都会弹出一个文本窗口,为了方便操作,可以将SVN_EDITOR环境变量删掉,建立一个日志文件log.txt,当对服务器数据仓库操作时,在命令行后面加一个-f 日志文件的路径。当然我们可以把anon-access=write、anon-access=read都注释掉,使用我们指定的用户名与密码来登陆访问SVN服务器数据仓库。具体方法如下:找到创建数据仓库的D:Repositoryconfsvnserve.conf文件,并打开修改此文件。把里面两行修改成#anon-access = read、#anon-access = write,并取消第19行password-db = passwd的注释,然后保存此文件。接下来打开D:Repositoryconfpasswd文件,接照里面的特定格式写好你设定的用户与密码。例如:bks=123。这样在登陆的时候需要用用户名与密码进行验证。在这里需要注意的是,当你修改了用户登陆信息后,需要删除以前在缓存里面的用户信息。文件信息在:C:Documents and SettingsAdministratorApplication DataSubversion5) 将SVN服务器数据仓库中的文件签出到本地。例如:将服务器的版本签出到本地的D:Project目录,如图1-19所示:图1-19取出数据仓库中的版本结果可以成功的将数据仓库中的Test.java文件签出到本地。程序员在本地修改了Test.java文件后,为了使数据仓库中的版本与本地的版本操持一致,需要更新服务器的数据仓库。6) 更新数据仓库命令。如图1-20所示:图1-20更新数据仓库中的版本 此时有另外一个用户和你这个用户同时下载了Test.java文件,你修改了此文件,并上传到了服务器,而另外一个用户得到的版本是之前没有更新的版本,会导致不一致。一般在项目开发中,在修改之前先把本地的版本与服务器的数据仓库的版本进行同步。7) 使用update命令得到服务器数据仓库中的最新版本。图1-21得到数据仓库中的最新版本 上面介绍了通过命令来操作svn服务器不是很方便,接下来我们将svn整合TortoiseSVN,该软件用图形画的操作代替了命令操作。3.2 Subversion整合TortoiseSVNTortoiseSVN下载地址: /downloads,当然版本是1.6.11,安装好了之后,该网站里面还有中文语言包,可以一并安装。TortoiseSVN 是一个客户端程序,用来与Subversion服务器端通讯。Subversion 自带一个客户端程序 svn.exe ,但 TortoiseSVN 更好操作,提高效率。安装过程如下图所示:图1-22安装步骤一图1-23安装步骤二图1-24安装步骤三图1-25安装步骤四图1-26安装步骤五 TortoiseSVN作为访问SVN服务器的客户端,因此首先我们要通过命令行的方式打开SVN服务器。如图1-14所示。现在我们在D:新建一个Project工程,希望把这个目录里面的文件全部导入到SVN服务器的数据库的子仓库中。为什么要导入到子仓库呢?那是因为SVN服务器管理的并不只是一个项目,里面有好多个项目,通过子仓库的方式可以分类来管理。图1-25通过TortoiseSVN导入文件图1-26通过TortoiseSVN导入文件新建了一个子仓库名叫Project图1-27 SVN权限验证图1-28 文件提交成功图1-29 从服务器签出项目图1-30 签出成功后文件夹的样式图1-31 更新操作建议:我们在修改文件后,记得先更新一下本地文件,再来提交。如图1-32。图1-32 提交修改的版本当出现修改冲突时,即你现在提交的版本已过时,作者会在MyEclipse中详细讲解。根据以上我们得知,客户端都是通过svn协议来传输的,这样我们必须需要安装相应的客户端。接下来我们通过Subversion整合Apache,就可以通过http协议来访问。3.3 Subversion整合ApacheApache下载地址:/download.cgi 在这里选择了2.2.16 版本。Apache安装过程如下图:图1-33 Apache安装步骤(一)图1-34 Apache安装步骤(二)图1-35 Apache安装步骤(三)图1-36 Apache安装步骤(四)图1-37 Apache安装步骤(五)图1-38 Apache安装步骤(六)图1-38 Apache安装完成图1-39 访问Apache服务器注意:在安装Apache过程中,由于Apache默认端口是80,我们服务器如果装了其它服务器占用了80端口,请先停止其它服务器修改成其它的端口,否则Apache会安装不成功!Subversion整合SVN过程如下:在SVN的安装目录下的bin文件夹中找到:mod_authz_svn.so、mod_dav_svn.so这两个文件,并复制到Apache的安装目录的modules文件夹中。如图1-40、1-41所示:图1-40 SVN的bin目录图1-41 Apache的modules目录我们接下来需要修改Apache的配置文件httpd.conf,让它能在运行时加载我们拷贝过来的模块。操作步骤如下图:图1-42 Apache的httpd.conf文件打开httpd.conf文件后,先取消这两句LoadModule dav_module modules/mod_dav.so、LoadModule dav_fs_module modules/mod_dav_fs.so前面的注释(把“#”号去掉),然后在后面加上下面两语句:LoadModule dav_svn_module modules/mod_dav_svn.soLoadModule authz_svn_module modules/mod_authz_svn.so修改完成后,我们断续在httpd.conf文件的尾部加入以下代码: DAV svn SVNPath D:Repository说明:是给访问数据仓库设定的虚拟目录,我们可以自定义名称。比如有/Project时,那么访问绝对路径是:http:/localhost/Project。DAV svn:告诉Apache在访问时,使用SVN模块。SVNPath 数据仓库的本地路径(例如:D:Repository):指明要访问到本地哪个数据仓库的绝对路径。 重新启动Apache服务器之后,SVN服务器自动启动,因此不需要另外单独通过命令行的方式启动SVN服务器。如图1-43、1-44所示,Apache服务器与SVN服务器整合成功。在以后对SVN服务器进行连接时除了可以使用SVN协议,还可以通过HTTP协议(建议读者使用此协议)。图1-43 Apache与SVN的管理界面我们可以通过http:/localhost/svn访问到我们的数据仓库。如图1-44所示:图1-44 数据仓库注意:在SVN与Apache整合时,一定要两者版本相匹配。如果整合后Apache服务器不能正常运行,请检查一下两者的版本号。图1-44说明,当前版本号是0,每次对数据仓库提交版本时,版本号加1。示例: 在Windows桌面上有个项目Test,我们将它导入到SVN服务器的版本库中,操作步骤如下: 在项目中点击鼠标“右键”,在弹出菜单中选择“TortoiseSVN”“import”在弹出窗口的URL of repository中输入:http:/localhost/svn点击“ok”按钮,就可以完成导入。如图1-45、1-46所示:图1-45 TortoiseSVN导入界面图1-45 TortoiseSVN导入成功界面当导入成功后,我们不仅可以通过TortoiseSVN把SVN服务器中的项目导出到任何计算机的存储设备上,而且可以直接通过在IE浏览器中输入:http:/localhost/svn查看项目的内容,如图1-46所示:图1-46 IE查看数据仓库中的项目图1-46说明:当前版本号由“0”改变成了“1”,同时列出了项目的清单。在实际团队项目开发中,我们的SVN服务器不仅仅是存放一个项目,可能不同的项目组存放不同的项目。为了便于项目管理与后面讲到的安全访问策略,我们在根数据仓库中再根据不同的项目创建子仓库,如图1-47所示:Repository(根仓库)子仓库1(项目1)子仓库2(项目2)子仓库n(项目n)。 。图1-47 数据仓库的树型结构示例: 现在Windows桌面上两个项目分别为Test1、Test2,要求我们分别导入到不同的数据仓库中。首先我们在SVN服务器的磁盘上新建一个空的文件夹叫RepositoryRoot,然后在此目录中,根据不同项目创建不同的子文件夹,例如:SubRepository1、SubRepository2,然后在命令提示符中,分别把这两个子文件夹创建成数据仓库。执行的命令如下:svnadmin create D:RepositoryRootSubRepository1svnadmin create D:RepositoryRootSubRepository2注意:在SVN1.5版本以上,创建根仓库时,一定要保证目录是空的,即不能把RepositoryRoot也通过命令行创建为数据仓库。创建好了数据仓库后,接下来我们需要配置Apache的httpd.conf文件,在此文件里面把以下代码修改成:修改以前的代码: DAV svn SVNPath D:Repository修改以后的代码: DAV svn SVNPath D:RepositoryRootSubRepository1 DAV svn SVNPath D:RepositoryRootSubRepository2以上代码说明了,如果我们在SVN服务器创建多个数据仓库时,我们得在httpd.conf文件中配置多个虚拟路径来分别访问不同的数据仓库。此时或许有读者问,我们可以随意的通过URL地址,无任何限制条件的对数据库中的项目进行操作,代码是不是很不安全?答案肯定是否,在前面我们已经讲过,对SVN服务的权限设置。在这里我们已经将SVN服务器整合了Apache服务器,权限设置应该在Apache里面进行设置。3.4SVN整合Apache的访问策略以上我们创建了两个项目的子仓库,访问地址分别为:http:/localhost/svn/test1、http:/localhost/svn/test1假定我们访问这两个项目时,都需要进行权限验证,访问两个数据仓库的用户名与密码如表1-1所示:表1-1 用户验证信息用户名密码访问权限访问项目Test1Test1rwTest1Test2Test2rwTest2abcabcrTest1、Test2123123表1-1的用户信息需要我们单独创建一个文件来保存,其中在访问权限一列中,r代表可读,w代表可写,空值代表既不可读也不可写。此文件可以放在SVN服务器的任何一个磁盘上,为了方便管理,我们在D:RepositoryRoot中创建一个文件夹叫passwords然后再在里面新建一个文件password,再通过Apache中的htpasswd.exe命令来生成相关的信息。此文件在C:Program FilesApache Software FoundationApache2.2bin中,为了方便在命令行直接输入htpasswd自动找到htpasswd.exe文件,我们可以像配置Java的JDK样的,在环境变量中的path变量中增加一个值:C:Program FilesApache Software FoundationApache2.2bin。打开Windows的命令提示符:运行cmd,输入:htpasswd D:RepositoryRootPasswordspassword 用户名,如果你没有新建此文件(password),可以输命令htpasswd -c D:RepositoryRootPasswordspassword Test1然后系统提示你输入密码,你再输入Test1,并且需要确认密码。在默认情况下,密码是用MD5进行加密的(不可逆),这样确保了文件的安全性。接着我们再一次按此步,把表1-1中的其余用户分别创建一下。 由于在实际项目开发中,我们会根据不同的项目,不同的小组成员设置不同的访问策略,接下来我们也在D:RepositoryRootPasswords目录下新建一个文件policy,并用记事本打开它,按照表1-1用户的权限分配,写入以下代码:test1:/Test1=rwabc=r123=test2:/Test1=rwabc=r123=以上代码说明了数据仓库1允许用户Test1可读可写,用户abc可读,用户123既不可读也不可写。同理数据仓库1也很容易看出。接下来,我们需要加载这两个安全策略配置文件。打开Apache的httpd.conf文件,改写以下代码:修改以前的代码: DAV svn SVNPath D:RepositoryRootSubRepository1 DAV svn SVNPath D:RepositoryRootSubRepository2修改后的代码: DAV svn SVNPath D:RepositoryRootSubRepository1 AuthzSVNAccessFile D:RepositoryRootPasswordspolicy AuthType Basic AuthName Subversion Repository -项目为Test1文件列表 AuthUserFile D:RepositoryRootPasswordspassword Require valid-user DAV svn SVNPath D:RepositoryRootSubRepository2 AuthzSVNAccessFile D:RepositoryRootPasswordspolicy AuthType Basic AuthName Subversion Repository -项目为Test2文件列表 AuthUserFile D:RepositoryRootPasswordspassword Require valid-user补充说明:AuthzSVNAccessFile:认证权限配置文件实际位置。AuthUserFile:认证用户配置文件实际位置。AuthType Basic:认证方式为基本方式。AuthName:认证窗口的标题。Require valid-user:设定为需要进行认证。如果有很多用户对不同的数据仓库访问,我们需要分别对每个用户进行权限设置,这样比较安全。为了设置方便,我们可以对相同的用户进行分组,然后给每组进行统一的权限设置,这样可以简化我们的操作。修改文件D:RepositoryRootPasswordspolicy如下:groupsManager =abc #项目经理组Project1 = Test1 #项目1开发人员Project2 = Test2 #项目1开发人员test1:/Manager=rwProject1=rwtest2:/Manager=rwProject2=rw如果有个数据仓库可以允许任何用户(包括匿名用户)可以访问,但是对数据仓库进行写入时需要进行权限验证。我们把Apache的httpd.conf文件中的Require valid-user替换成以下代码: require valid-user这样我们就完成了Apache访问SVN的权限设置。接下来我们将上面的例子完成,现在笔者的Windows操作系统的桌面上有两个项目为Test1、Test2分别导入到SVN服务器的数据仓库SubRepository1、SubRepository2中。操作步骤如下:图1-48 导入步骤一图1-49 导入步骤二图1-50 输入验证信息图1-51 导入成功图1-52 查看结果项目Test2通样按着上面步骤导入到SubRepository2中。现要求把数据库SubRepository中的项目导出到D:的Test目录中。操作如下:在当前文件夹下,点击鼠标“右键”选择SVN Checkout菜单,如图1-53所示。在弹出窗口中的URL of repository中填写该数据仓库的访问路径,这里写上http:/localhost/svn/test1如图1-54所示。接下来点击“OK”,弹出一个验证信息对话框,我们输入相应的用户名与密码完成导出,如图1-55所示。图1-53 导出步骤一图1-54 导出步骤二图1-54 导出步骤三图1-55 导出信息提示图1-56 导出的项目文件3.5 MyEclipse整合SVNMyEclipse是一个十分优秀的J2EE开发软件,它整合SVN版本控制工具有利用于我们利用该软件进行团队开发项目。在整合时,需要安装Subclipse插件。下载地址如下:。该插件也可以通过MyEclipse软件进行在线安装,安装步骤如下图所示:1)整合过程打开本地电脑的MyEclipse软件,点击“Help”“Software Updates”“Find and Install”选项。如图1-57所示:图1-57 整合步骤一打开Install/Update窗口后,选择Search for new features to install选项。弹出安装窗口如图1-59所示。图1-58 整合步骤二图1-58 整合步骤三点击“New Remote Site”按钮,弹出图1-59窗口,并输入相关信息。图1-58 整合步骤四以上在“New Update Site”窗口中的Name与URL的地址是根据网站上介绍插件安装的方法找出来的。我们根据自己安装MyEclipse的版本号找出相对应的Subclipse插件。该网站列出的相应地址如下:Name: Subclipse 1.6.x (Eclipse 3.2+)URL: /update_1.6.xName: Subclipse 1.4.x (Eclipse 3.2+)URL: /update_1.4.xName: Subclipse 1.2.x (Eclipse 3.2+)URL: /update_1.2.xName: Subclipse 1.0.x (Eclipse 3.0/3.1)URL: /update_1.0.x填写好了之后,点击“ok”“finish”。图1-59 整合步骤五图1-60 整合步骤六图1-61 整合步骤七 图1-62 整合步骤八图1-63 整合步骤九在图1-63点击“Finish”按钮之后,系统自动下载安装,直到整合结束。2)基本操作 打开本地安装的MyEclipse软件,在菜单栏中点击“Window”“Show View”,在Show View窗口中多了一个SVN的栏目。展开SVN的栏目,点击“SVN Repositories”选项。图1-64 MyEclipse中的SVN Repositories客户端此时,我们可以通过在MyEclipse中把SVN服务器的项目签到本地来,以把SVN服务器中的Test1的项目为例。在图1-64的SVN Repositories窗口的空白处点击右键,在弹出的菜单中,选择“New”Repository Location,在弹出的窗口中输入Test1项目的URL,如图1-66所示。图1-65 连接SVN服务器一图1-66 连接SVN服务器二图1-67 连接SVN服务器三通过图1-67我们可以查看远程的SVN数据仓库中相应的项目,在即将要导出的数据仓库的上,点击右键,在弹出的菜单中,点击“Checkout”选项,并弹出窗口如图1-69所示。图1-68 连接SVN服务器四图1-69 连接SVN服务器五图1-69的第一个选项中,Check out as a project configured using the New Project Wizard表示将远程SVN数据仓库中的项目将导入一个新建的工程中,Check out as aproject in the workspace表示将数据仓库的项目导入到本地MyEclipse工作平台中。因为我们此时在MyEclipse中是没有任何项目,因此我们选择第一个选项。图1-70 创建工程一图1-71 创建工程二图1-72 创建工程三通过以上几个步骤,我们成功的将SVN服务器中的项目Test1导入到了本地项目中,通过MyEclipse的Package Explorer中可以查看到项目的信息。我们双击图1-72中的Test1.java文件,修改里面的内容如图1-73所示:图1-73 编写测试代码修改完成后,本地程序与SVN服务器相应代码不致,如果我们要想和服务器版本相一致,在图1-73中的被修改的文件上或者在总的项目名称上点击鼠标右键,选择“Team”“Commit”“Ok”,就可以完成更新。图1-74 更新SVN的版本一图1-75 更新SVN的版本二图1-75 查看信息此时SVN服务器与本地项目的版本号都为2。如果有两个以上的用户,同时对同一个项目文件进行了修改,修改后同时提交,这里会造成冲突,SVN是怎么来解决冲突问题的呢?在前面我们已经讲过,它有两种工作模式,一般我们的SVN是通过“拷贝-修改-合并”的工作模式。为了更好的说明这个问题,我们打开另外一个MyEclipse程序,按上面的步骤把Test1项目导入到本地,然后进行修改。此时两个模拟用户A、B的源代码是同步,经过一段时间后,A用户把文件Test1.java修改成了图1-76所示,B用户把此文件修改成了图1-77所示。图1-76 A用户修改后的程序图1-77 B用户修改后的程序现在A、B用户还有SVN中的该项目的数据仓库的版本都不一致,会带什么样的情况呢?假如A用户先把修改后的版本“Commit”到了SVN服务器,此时SVN的版本库得到了更新。当B用户也通过同样的方式把自己的源代码提交到服务器,此时会出现图1-78冲突。图1-78 B用户提交时冲突提示原因是A、B两用户一开始得到的版本库是同步的,但是A用户先更新了SVN的版本库,那么B用户在以前的版本上进行修写代码,那个版本已经过时了,当B用户提交时的代码是在过时的版本上修改的,才会造成冲突。那么我们怎么来解决此问题呢?怎么来判断B用户的版本是过时的呢?我们可以按图1-78提交时通过系统提示来得到。也可以通过在项目上点击鼠标右键,在弹出的菜单中选择“Compare With”“L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (2025)保密知识竞赛考试题库及参考答案
- 玉米油提取工艺及其副产品利用
- 风电场自动化系统设计与集成
- 2025教师师德师风承诺书范文
- 税务专业要写毕业论文
- 2024年事业单位联考综合应用能力A类真题与参考答案
- 特种设备(锅炉、压力容器)培训考试试题及答案
- 2024年护理核心制度考试试题及答案
- 摄影测量专业毕业论文
- 岩石专业毕业论文
- 舆论学复习测试卷附答案
- 高二年级培优措施及策略
- 2025年中国人寿:养老险上海分公司招聘笔试参考题库含答案解析
- 2025至2031年中国特种工业气体行业投资前景及策略咨询研究报告
- 2025年福建中闽海上风电有限公司招聘笔试参考题库含答案解析
- 合同能源管理
- 中国航空集团有限公司介绍
- 2025年下半年吉林省松原市前郭县事业单位招聘高校毕业生带编入伍19人历年高频重点提升(共500题)附带答案详解
- 地板胶施工方案
- 第二类医疗器械经营范围、经营方式说明
- 《灌区数字孪生平台与-四预-功能建设》
评论
0/150
提交评论