《SVN宇宙版教程》:第六章 Subclipse提交及更新与解决冲突

第六章 Subclipse提交及更新与解决冲突

导言:

基于Eclipse的插件Subclipse也具有和TortoiseSVN一样的功能,那就是提交与更新,但他们必竟是两种软件,所以在本章中会以Subclipse为视角来介绍如何在Eclipse软件中管理web或java项目中的源代码,有效的将SVN功能与Java程序设计之间进行整合。

6.1 提交web项目

Step01:在MyEclipse中安装完Subclipse插件后第一件要做的事情就是使用SVNKit做为客户端,配置如图6.1所示。

图6.1 使用SVNKit做为客户端

 

    Step02:再配置workspace工作空间的编码为utf-8,如图6.2所示。

图6.2 配置工作空间的编码为utf-8

 

Step03:下一步就是创建1个test1仓库,如图6.3所示。

图6.3 创建test1仓库

 

    Step04:然后在MyEclipse中创建web项目test1,并对test1项目调用“Share Project”菜单如图6.4所示。

图6.4 调用Share Project菜单

 

    Step05:弹出界面如图6.5所示。

图6.5 选择SVN选项

 

    Step06:单击Next按钮继续配置,出现界面如图6.6所示。

图6.6 创建新的资源库位置

 

    Step07:单击Next按钮继续配置,出现如图6.7所示界面:

图6.7 输入仓库的位置

 

    Step08:单击Next按钮继续配置,出现界面如图6.8所示。

图6.8 放入trunk主线文件夹中

 

    Step09:单击Next按钮继续配置,出现如图6.9所示界面:

图6.9 输入日志

 

    Step10:单击Finish按钮后弹出对话框如图6.10所示。

图6.10 单击Yes

 

    Step11:在MyEclipse中关联完test1仓库后的web项目结构如图6.11所示。

图6.11 项目test1结点出现问号图标

 

    Step12:下面开始将test1项目提交到test1仓库的trunk文件夹中,对test1项目单击菜单如图6.12所示。

图6.12 单击提交菜单

 

注意:如果嫌MyEclipse自带的SVN插件菜单为中文,还可以还原改成英文,打开eclipse\configuration\config.ini文件,在内部结尾添加配置osgi.nl=en_US,重启MyEclipse即可。

 

    Step13:出现界面如图6.13所示。

图6.13 开始提交了

 

    Step14:单击OK按钮后成功提交,test1项目结点效果如图6.14所示。

图6.14 成功提交图标不是问号了

 

    Step15:仓库test1的trunk文件夹中的内容如图6.15所示。

图6.15 仓库test1中有web项目中的文件

 

    Step16:但仓库路径file:///C:/svn_repository/test1/trunk/src中的内容为空,效果如图6.16所示。

图6.16 路径src中为空

 

    Step17:在MyEclipse中的test1项目中的src中再创建Test.java类,如图6.17所示。

图6.17 添加Test.java类文件呈问号状态

 

    Step18:对test1单击“提交”菜单后仓库test1中的src中内容如图6.18所示。

图6.18 成功提交到test1仓库中

 

至此,在MyEclipse中将web项目和新创建的Java类文件保存进仓库演示完毕。

Step19:反操作,也就是将仓库中的项目导入到MyEclipse的操作也很简单,先将MyEclipse中的test1的web项目删除。

Step20:再将test1仓库路径file:///C:/svn_repository/test1/trunk/导出Checkout到桌面test11文件夹中,配置如图6.19所示。

图6.19 将仓库Checkout到桌面test11文件夹

 

Step21:然后再到MyEclipse中将桌面的test11项目导入到MyEclipse中,再修改Test.java类中的代码如图6.20所示。

图6.20 更改Test.java类代码后图标呈星状态

 

    Step22:对test1执行提交菜单成功提交到test1仓库中如图6.21所示。

图6.21 成功提交到仓库中

 

    其实还有另外一种更加简便的方法将仓库中的项目导入MyEclipse中,在“包浏览器中”使用右键Import菜单,选择SVN结点中的“从SVN检出项目”菜单来进行处理。

6.2 如何与资源库同步

“与资源库同步”菜单的主要使用场合就是在多人并发开发时,有可能其它人改动了服务器端仓库中的代码,这时本地代码就和服务器的代码有差异了,为了看到这个差异,也就是区别,就可以使用“与资源库同步”菜单进行对比查看。

Step01:为了模拟多人同时开发的环境,再启动1个MyEclipse软件,这时系统中将有2个MyEclipse同时在运行,新启动的这个MyEclipse暂时给它定1个别名,就是“MyEclipse2”,而最先启动的MyEclipse就是“MyEclipse1”了,还需要留意的是,它们的workspace工作空间也要设置成不同的路径,不然极易造成项目代码的混乱。一个MyEclipse对应一个workspace路径,永远不会出现奇怪的问题,这是一个好习惯。

Step02:继续操作,将仓库test1的路径file:///C:/svn_repository/test1/trunk/导出Checkout到桌面test22文件夹中,效果如图6.22所示。

图6.22 导出到test22文件夹中

 

Step03:再将桌面test22文件夹中的项目导入MyEclipse2软件中,效果如图6.23所示。

图6.23 在MyEclipse2软件中导入test22文件夹并编辑代码

 

    Step04:对MyEclipse2中的test1项目进行提交,test1仓库中的内容如图6.24所示。

图6.24 仓库中有最新版

 

    Step05:这时MyEclipse1中的代码还是旧版,效果如图6.25所示。

图6.25 MyEclipse1中的代码是旧版

 

    Step06:如果想查看MyEclipse1中Test.java的代码与仓库中Test.java的代码有什么区别时就可以使用“与资源库同步”菜单了,效果如图6.26所示。

图6.26 在MyEclipse1中单击与资源库同步菜单

 

    Step07:切换透视图如图6.27所示。

图6.27 切换到Team Synchronizing透视图

 

    Step08:双击Test.java文件,出现界面如图6.28所示。

图6.28 成功查看本地与远程代码的区别

 

    Step09:而MyEclipse1中的Test.java文件中原始的代码并没有因为单击“与资源库同步”菜单而改变,效果如图6.29所示。

图6.29 保持旧值

 

    “与资源库同步”就是查看差异,默认情况下不更改本地代码内容。

 

6.3 更新时无冲突的情况

大多数使用“与资源库同步”菜单的目的是想查看本地和远程资源的差异,并不想将本地的内容进行更新。

而“更新”菜单则不然,它的主要作用是将远程仓库中的内容下载到本地,以使本地的版本内容和仓库中的内容一致。

Step01:复用前面章节实验的环境,继续操作,对MyEclipse1中的test1项目单击“更新”菜单如图6.30所示。

图6.30 在MyEclipse1中单击更新菜单

 

    Step02:在控制台显示更新的结果如图6.31所示。

图6.31 文件Test.java被更新

 

    Step03:而且MyEclipse1中的内容与仓库中的内容一致了,效果如图6.32所示。

图6.32 本地与远程一致了Revision都是5了

 

MyEclipse1中的内容通过单击“更新”菜单与仓库中的内容同步了,并且没有出现冲突的情况,对MyEclipse2中的Test.java也调用一次“更新”菜单,这样2个MyEclipse中的代码和仓库中的代码一模一样了。

那如果出现冲突的情况在Subclipse插件中该如何处理呢?

6.4 解决冲突

在对MyEclipse中的项目调用“更新”菜单时有可能出现冲突的情况,Subclipse插件也像TortoiseSVN软件一样可以对冲突进行处理,解决的办法还是2种,一种是手动解决冲突,另外一种就是自动,也就是由Subclipse工具来根据固定的算法解决冲突。

6.4.1 Conflicts have been resolved in the file

Step01:在继续操作之前,先对刚才进行实验的2个MyEclipse软件中的test1项目分别调用“更新”菜单,效果如图6.33 2个MyEclipse中的项目纷纷更新到最新版”所示。

图6.33 2个MyEclipse中的项目纷纷更新到最新版

 

    Step02:并且编辑MyEclipse1中的代码内容并格式化代码如图6.34所示。

图6.34 创建原始测试内容

 

    Step03:将MyEclipse1中的内容提交到仓库中,效果如图6.35所示。

图6.35 提交原始内容到仓库中

 

    Step04:对MyEclipse2中的test1项目调用“更新”菜单效果如图6.36所示。

图6.36 MyEclipse2中的内容和仓库一样了

 

Step05:再分别对MyEclipse1和MyEclipse2中的web项目调用“更新”菜单再次同步仓库中的Revision版本及内容。

Step06:后面的实验对冲突的解决有很多种办法,所以要保留实验环境的“快照”,将2个MyEclipse中的项目及仓库test1进行备份,如图6.37所示。

图6.37 备份环境快照

 

Step07:然后在MyEclipse2软件中更改代码如图6.38所示。

图6.38 更改第7-8-10-13行代码并提交Revision值是7

 

    Step08:再回到MyEclipse1中,更改Test.java代码如图6.39所示。

图6.39 更改第7-8-10-13行代码并不提交

 

    Step09:继续操作,在MyEclipse1软件中对test1项目单击“更新”菜单后的效果如图6.40所示。

图6.40 出现冲突了

 

说明服务器端内容更改了,本地内容也更改了,冲突也就发生了。

    Step10:这时对MyEclipse1中的Test.java文件调用“编辑冲突”菜单如图6.41所示。

图6.41 单击编辑冲突菜单

 

    Step11:单击“编辑冲突”菜单后的界面效果如图6.42所示。

图6.42 被红框包围说明有冲突

 

    Step12:如果想使用Theirs中的内容,也就是使用服务器端仓库中的内容则单击如图6.43所示的按钮即可:

图6.43 用鼠标单击最上面的按钮使用Theirs的内容

 

    Step13:单击按钮后代码更改如图6.44所示。

图6.44 左边内容被更改而且还可以手动更改

 

    Step14:编辑左边代码的内容同右边的一样,如图6.45所示。

图6.45 编辑后的代码左右一样

 

    Step15:单击保存按钮后的效果如图6.46所示。

图6.46 无冲突的边框线了

 

    Step16:但test包中还是有多余的文件,如图6.47所示。

图6.47 多余的版本文件

 

    Step17:这时对MyEclipse1中的Test.java类调用“标记为解决”菜单如图6.48所示。

图6.48 单击标记为解决菜单

 

    Step18:弹出界面如图6.49所示。

图6.49 选择第一项使用当前Test.java编辑器中的代码

 

步骤操作至此,出现了本章节重要的知识点:“Conflicts have been resolved in the file”选项。

选项“Conflicts have been resolved in the file”的作用是使用当前代码编辑器中的内容作为解决冲突的最终版代码。

    Step19:单击OK按钮后的效果如图6.50所示。

图6.50 删除多余的文件

 

Step20:至此步骤,已经成功解决了冲突,并且单击“提交”菜单后出现界面如图6.51所示。

图6.51 本地和服务器端内容同步了无需提交

 

    前面的操作步骤是将本地的代码改成和服务器端代码一样的效果,那如果改成和服务器端不一样的效果会出现什么样的情况呢?

继续实验!

Step21:重置实验环境,将MyEclipse1和MyEclipse2中的test1项目彻底删除,将“C:\新建文件夹”路径中的test11和test22项目复制到桌面,然后将桌面的2个项目分别重新导入到MyEclipse1和MyEclipse2软件中。删除C:\svn_repository路径中的test1仓库,然后将“C:\新建文件夹”路径中备份的test1仓库重新复制到C:\svn_repository路径中。

Step22:更改MyEclipse2中的代码如图6.52所示。

图6.52 更改MyEclipse2中7-8-10-13行代码并提交后的Revision值是7

 

Step23:继续更改MyEclipse1中的代码如图6.53所示。

图6.53 更改MyEclipse1中7-8-10-13行代码不提交

 

    Step24:对MyEclipse1中Test.java文件调用“更新”菜单,出现冲突如图6.54所示。

图6.54 MyEclipse1中出现冲突

 

Step25:在MyEclipse1中对Test.java文件调用“编辑冲突”菜单,编辑完成后的内容如图6.55所示。

图6.55 使用服务器端的内容而且还增加了字符

 

    Step26:将Test.java文件进行保存后,虽然红色边框依旧显示,但Test.java中的代码就是我们想要的,这时对Test.java文件调用“标记为解决”菜单,还是选择选项,含义是使用当前Test.java代码编辑器中的代码内容,单击OK按钮后效果如图6.56所示。

图6.56 冲突解决了

 

Step27:步骤进行到此,需要说明的是,本地代码的Revision和仓库中Test.java的Revision版本是一样的,值都是7,但内容是不一样的,如图6.57所示。

图6.57 版本号一样内容不一样说明内容被更改了

 

    Step28:所以可以对MyEclipse1中的Test.java文件调用“提交”菜单,弹出界面如图6.58所示。

图6.58 弹出提交界面

 

Step29:单击OK按钮后成功提交到仓库,如图6.59所示。

图6.59 成功提交

 

本章节使用手动编辑源代码的办法并结合“Conflicts have been resolved in the file”选项来解决冲突,手动解决冲突是SVN并发开发出现冲突时最常使用的方案。

6.4.2 Resolve conflicts in local file with my changes

    在单击“标记为解决”菜单后弹出界面如图6.60所示。

图6.60 标记为解决的UI界面

 

    选项“Conflicts have been resolved in the file”的作用是使用当前代码编辑器中的代码作为最终版,此选项在前面章节中已经演示过了。

    选项“Resolve conflicts in local file with my changes”的作用是当本地与服务器端内容发生冲突时,使用我的版本,如果本地某些内容没有发生冲突,则使用服务器端中的内容进行Update,如果本地和服务器中的内容都没有更改,则保持不变。

    选项“Resolve the conflict by using my version of the file”的作用是当本地与服务器端内容发生冲突时,完全使用本地版本的内容。

    那么在本章节将先实验“Resolve conflicts in local file with my changes”选项的功能。

继续实验!

Step01:重置实验环境,将MyEclipse1和MyEclipse2中的test1项目彻底删除,将“C:\新建文件夹”路径中的test11和test22项目复制到桌面,然后将桌面的2个项目分别重新导入到MyEclipse1和MyEclipse2软件中。删除C:\svn_repository路径中的test1仓库,然后将“C:\新建文件夹”路径中备份的test1仓库重新复制到C:\svn_repository路径中。

    Step02:更改MyEclipse2中的Test.java代码如图6.61所示。

图6.61 更改MyEclipse2中的Test.java代码并提交Revision值是7

 

    Step03:更改MyEclipse1中的Test.java代码不提交,如图6.62所示。

图6.62 更改MyEclipse1中的Test.java代码不提交

 

    Step04:这时对MyEclipse1中的Test.java调用“更新”菜单出现冲突效果如图6.63所示。

图6.63 MyEclipse1中发生冲突

 

    Step05:对MyEclipse1中的Test.java文件调用“标记为解决”菜单,弹出界面如图6.64所示。

图6.64 选择第3项

 

    Step06:单击OK按钮后MyEclipse1中的Test.java代码如图6.65所示。

图6.65 执行结果

 

    从执行的结果来看,使用“Resolve conflicts in local file with my changes”选项可以将本地和服务器都没有改变的内容保持不变,而本地和服务器冲突的内容使用本地的版本,如果服务器的版本内容比本地的要新,则使用服务器中的内容。

6.4.3 Resolve the conflict by using my version of the file

继续实验!

Step01:重置实验环境,将MyEclipse1和MyEclipse2中的test1项目彻底删除,将“C:\新建文件夹”路径中的test11和test22项目复制到桌面,然后将桌面的2个项目分别重新导入到MyEclipse1和MyEclipse2软件中。删除C:\svn_repository路径中的test1仓库,然后将“C:\新建文件夹”路径中备份的test1仓库重新复制到C:\svn_repository路径中。

选项“Resolve the conflict by using my version of the file”的功能是一旦本地和服务器产生了冲突,则一概使用本地版本的内容。

    Step02:更改MyEclipse2中的Test.java代码如图6.66所示。

图6.66 更改MyEclipse2中的Test.java代码并提交Revision值是7

 

    Step03:更改MyEclipse1中的Test.java代码不提交,如图6.67所示。

图6.67 更改MyEclipse1中的Test.java代码不提交

 

    Step04:这时对MyEclipse1中的Test.java调用“更新”菜单出现冲突效果如图6.68所示。

图6.68 MyEclipse1中发生冲突

 

    Step05:对MyEclipse1中的Test.java文件调用“标记为解决”菜单,弹出界面如图6.69所示。

图6.69 选择第2项

 

    Step06:单击OK按钮后MyEclipse1中的Test.java代码如图6.70所示。

图6.70 彻底被还原

 

6.4.4 Resolve conflicts in local file with changes from incoming file

继续实验!

Step01:重置实验环境,将MyEclipse1和MyEclipse2中的test1项目彻底删除,将“C:\新建文件夹”路径中的test11和test22项目复制到桌面,然后将桌面的2个项目分别重新导入到MyEclipse1和MyEclipse2软件中。删除C:\svn_repository路径中的test1仓库,然后将“C:\新建文件夹”路径中备份的test1仓库重新复制到C:\svn_repository路径中。

选项“Resolve conflicts in local file with changes from incoming file”作用是当本地与服务器端内容发生冲突时,使用服务器的版本,如果本地某些内容没有发生冲突,则使用服务器端中的内容进行Update,如果本地和服务器中的内容都没有更改,则保持不变。

    Step02:更改MyEclipse2中的Test.java代码如图6.71所示。

图6.71 更改MyEclipse2中的Test.java代码并提交Revision值是7

 

    Step03:更改MyEclipse1中的Test.java代码不提交,如图6.72所示。

图6.72 更改MyEclipse1中的Test.java代码不提交

 

    Step04:这时对MyEclipse1中的Test.java调用“更新”菜单出现冲突效果如图6.73所示。

图6.73 MyEclipse1中发生冲突

 

    Step05:对MyEclipse1中的Test.java文件调用“标记为解决”菜单,弹出界面如图6.74所示。

图6.74 选择第5项

 

    Step06:单击OK按钮后MyEclipse1中的Test.java代码如图6.75所示。

图6.75 发生冲突的内容使用了服务器中的版本

 

6.4.5 Resolve the conflict by using the incoming version of the file

继续实验!

Step01:重置实验环境,将MyEclipse1和MyEclipse2中的test1项目彻底删除,将“C:\新建文件夹”路径中的test11和test22项目复制到桌面,然后将桌面的2个项目分别重新导入到MyEclipse1和MyEclipse2软件中。删除C:\svn_repository路径中的test1仓库,然后将“C:\新建文件夹”路径中备份的test1仓库重新复制到C:\svn_repository路径中。

选项“Resolve the conflict by using the incoming version of the file”的功能是一旦本地和服务器产生了冲突,则一概使用服务器中的版本内容。

Step02:更改MyEclipse2中的Test.java代码如图6.76所示。

图6.76 更改MyEclipse2中的Test.java代码并提交Revision值是7

 

    Step03:更改MyEclipse1中的Test.java代码不提交,如图6.77所示。

图6.77 更改MyEclipse1中的Test.java代码不提交

 

    Step04:这时对MyEclipse1中的Test.java调用“更新”菜单出现冲突效果如图6.78所示。

图6.78 MyEclipse1中发生冲突

 

    Step05:对MyEclipse1中的Test.java文件调用“标记为解决”菜单,弹出界面如图6.79所示。

图6.79 选择第4项

 

    Step06:单击OK按钮后MyEclipse1中的Test.java代码如图6.80所示。

图6.80 全部使用服务器端的版本内容

 

6.4.6 Resolve the conflict by using the base version of the file

继续实验!

Step01:重置实验环境,将MyEclipse1和MyEclipse2中的test1项目彻底删除,将“C:\新建文件夹”路径中的test11和test22项目复制到桌面,然后将桌面的2个项目分别重新导入到MyEclipse1和MyEclipse2软件中。删除C:\svn_repository路径中的test1仓库,然后将“C:\新建文件夹”路径中备份的test1仓库重新复制到C:\svn_repository路径中。

选项“Resolve the conflict by using the incoming version of the file”的功能是一旦本地和服务器产生了冲突,则一概使用服务器中的版本内容。

选项“Resolve the conflict by using the base version of the file”的功能是一旦本地和服务器产生了冲突,则把内容还原成最近的一个Revision版本。

Step02:更改MyEclipse2中的Test.java代码如图6.81所示。

图6.81 更改MyEclipse2中的Test.java代码并提交Revision值是7

 

    Step03:更改MyEclipse1中的Test.java代码不提交,如图6.82所示。

图6.82 更改MyEclipse1中的Test.java代码不提交

 

    Step04:这时对MyEclipse1中的Test.java调用“更新”菜单出现冲突效果如图6.83所示。

图6.83 MyEclipse1中发生冲突

 

    Step04:对MyEclipse1中的Test.java文件调用“标记为解决”菜单,弹出界面如图6.84所示。

图6.84 选择第6项

 

    Step06:单击OK按钮后MyEclipse1中的Test.java代码如图6.85所示。

图6.85 被还原

 

    MyEclipse1中的内容被还原成最近的一个Revision版本了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值