《SVN宇宙版教程》:第三章 TortoiseSVN必备技能-3

3.4 冲突的解决办法

在前面的章节中,如果发生冲突可以使用TortoiseMerge工具来手动编辑文件去解决这个冲突,其实还有多种办法也可以解决冲突。

Step01:将模板仓库a导出Checkout到桌面test1和test2文件夹中,查看一下这2个文件夹的属性信息如图3.93所示。

图3.93 文件夹test1和test2的属性信息

 

Step02:在test2文件夹中编辑a.txt文件,如图3.94所示。

图3.94 编辑test2文件夹中的a.txt文件

 

    Step03:再将test2进行Commit提交操作,结果如图3.95所示。

图3.95 将test2文件夹进行提交

 

    Step04:提交后的test2文件夹中的a.txt的属性信息如图3.96所示。

图3.96 文件a.txt的属性信息

 

    提交后的test2文件夹中的a.txt的revision值为5。

    Step05:继续查看一下编辑前的test1文件夹中的a.txt属性如图3.97所示。

图3.97 文件夹test1中的a.txt属性信息

 

    文件夹test1中的a.txt的revision版本号是4。

    Step06:这时编辑test1文件夹中的a.txt文件内容如图3.98所示。

图3.98 编辑test1中的a.txt文件内容

 

    Step07:到这步骤,一定要把test1工作副本进行备份,如图3.99所示。

图3.99 将test1工作副本备份到新建文件夹

 

    Step08:当对桌面路径中的test1文件夹执行Commit提交菜单时,出现错误如图3.100所示。

图3.100 提交test1文件夹时出现错误

 

    Step09:从出错信息中可以看到,有文件发生了超时out of date。单击OK按钮后弹出界面如图3.101所示。

图3.101 是否更新test1工作副本的状态

 

在此界面中的2个按钮“Update”和“Cancel”就是两个分支了。

Step10:在单击“Update”或“Cancel”按钮前先来查看一下test1文件夹中的a.txt文件的revision版本号,如图3.102所示。

图3.102 单击按钮前test1文件夹中的a.txt版本号为4

 

    Step11:这时单击“Update”按钮,出现界面如图3.103所示。

图3.103 工作副本和仓库内容有冲突

 

    Step12:再来查看一下test1文件夹中的a.txt文件的版本号如图3.104所示。

图3.104 发生了冲突并且revision更新至5

 

    通过此步骤可以说明单击“Update”按钮可以改变revision的值,但冲突还是存在。

在前面的章节中是通过TortoiseMerge工具来解决冲突,还有其它办法也可以解决。

3.4.1 使用Revert菜单解决

    Step01:解决这个冲突可以使用“Revert”菜单,如图3.105所示。

图3.105 使用Revert菜单来解决冲突

 

    Step02:在继续操作之前,先要知道当前test1文件夹中的a.txt的revision版本号是5。

    Step03:单击Revert菜单后弹出界面如图3.106所示。

图3.106 冲突文件列表

 

    Step04:在此列表中可以双击a.txt文件,来打开TortoiseMerge来手动解决冲突,如图3.107所示。

图3.107 使用TortoiseMerge来手动解决冲突

 

    Step05:也可以在“图3.4.1 冲突文件列表”中对a.txt文件复选,如图3.108所示,再单击OK按钮使用revision值是5的版本内容,也就是test1文件夹中的a.txt文件与仓库a中的a.txt文件内容一致。

图3.108 对文件a.txt复选

 

    Step06:单击OK按钮后还原并更新到最新版成功,如图3.109所示。

图3.109 还原并更新到最新版成功

 

    Step07:文件夹test1中的a.txt文件内容及revision版本如图3.110所示。

图3.110 文件夹test1中的内容与仓库a中的内容一致并且revision是5最新版

 

    上面的步骤是在界面图3.111中单击“Update”按钮的分支走向,此走向改变了test1文件夹中的a.txt文件的revision版本号为5。

图3.111 分支按钮Update与Cancel

 

Step08:那如果单击“Cancel”按钮会出现什么样的效果呢?

将桌面test1文件夹彻底删除,将刚才“新建文件夹”文件夹中呈冲突状态的test1文件夹复制到桌面中,而test1文件夹的a.txt内容如图3.112所示。

图3.112 回顾一下test1中a.txt文件内容

 

    Step09:这时当对桌面的test1文件夹执行Commit时还会出现界面如图3.113所示。

图3.113 继续Commit时发生冲突

 

    Step10:单击OK按钮后弹出分支界面如图3.114所示。

图3.114 按钮Update与Cancel分支界面

 

    Step11:先不单击这2个按钮中的任何一个,查看一下test1中的a.txt文件的版本号如图3.115所示。

图3.115 再次查看revision值为4

 

    Step12:在此步骤中,不再单击“Update”按钮,转而单击“Cancel”按钮,这时又将Commit界面进行弹出如图3.116所示。

图3.116 界面Commit被还原显示了

 

    Step13:单击Commit界面中的Cancel按钮关闭Commit窗口。再次查看test1中的a.txt文件版本号如图3.117所示。

图3.117 单击分支按钮Cancel不改变revision版本号

 

    Step14:对test1文件夹调用revert菜单如图3.118所示。

图3.118 对test1文件夹调用revert菜单

 

    Step15:弹出界面如图3.119所示。

图3.119 将a.txt复选处理

 

    Step16:单击OK按钮后将test1文件夹中的a.txt还原到改变前的版本,如图3.120所示。

图3.120 还原到revision值为4的版本内容

 

    通过此实验可以得知revert菜单的作用要根据当前发生冲突文件的revision版本号来决定还原到哪个revision版本中,菜单revert的主要作用就是还原。

3.4.2 使用Resolved菜单解决

    Step01:将桌面的test1文件夹删除,将“新建文件夹”中的test1再复制到桌面中,此时对test1文件夹执行Commit提交菜单后出现超时界面,再单击“Update”按钮将test1的revision版本更新到5,如图3.121所示。

图3.121 文件夹test1中的a.txt的revision是5而且状态为冲突

 

    Step02:这时可以单击“Resolved”菜单如图3.122所示。

图3.122 单击Resolved菜单

 

    Step03:弹出界面如图3.123所示。

图3.123 欲对a.txt解决冲突

 

    Step04:从图中可以发现a.txt呈冲突的状态,而且桌面中的test1文件夹的内容如图3.124所示。

图3.124 桌面test1文件夹中多了几个文件

 

    先来查看一下a.txt中的内容如下:

<<<<<<< .mine

a_3

1=======

a_3

2>>>>>>> .r5

在文本文件中<<<<<<< .mine后面的内容是当前的内容,而=======后面的内容是revision值是5的内容,他们都修改了第2行,所以发生了冲突。

    再来查看一下a.txt.mine的内容如下:

a_3

1

    也就是当前a.txt的内容。

    再来查看一下a.txt.r4的内容如下:

a_3

也就是revision值为4的a.txt内容。

    再来查看一下a.txt.r5的内容如下:

a_3

2

也就是revision值为5的a.txt内容。

    TortoiseSVN产生出这么多文件就是为了便于程序员解决这个冲突,所以要保留旧的和新的文件内容。

    Step05:继续解决冲突,在图3.123界面双击a.txt文件,启动TortoiseMerge手动解决冲突,如图3.125所示。

图3.125 手动解决冲突

 

    Step06:解决之后单击TortoiseMerge工具左上角的save保存按钮,再单击一下解决冲突按钮。当回到图3.126所示界面中单击OK按钮后,冲突得以解决如图3.127所示。

图3.126 显示Resolve窗口

 

图3.127 成功解决冲突

 

    并且桌面的test1文件夹中的多余的文件被删除,当前的revision版本号为5,状态不是冲突了,而是修改modified状态,如图3.128所示。

图3.128 删除多余文件而不呈冲突状态

 

    Step07:当对test1文件夹执行Commit提交菜单时,成功提交进仓库a中,如图3.129所示。

图3.129 成功提交revision值是6

 

3.5 获得锁与释放锁

SVN版本控制一直在推崇“复制-修改-合并”的方法,在这种情况下Subversion通常不需要锁就可以很好的工作,但是,在某些情况下可能还是需要使用锁定策略,比如在一个平面设计公司使用图形文件,图形文件属于二进制的文件,是不能合并的文件,如果两个人修改同一个文件,合并是不可能的,在这种情况下,就必须放弃其中一个人的修改。

    Step01:添加2个用户ghy及newghy,在本测试中将实验锁定文件的效果。

Step02:使用http://localhost:7070/svn/a路径访问仓库,并用ghy用户将仓库a导出Checkout到桌面locktest1文件夹中,再使用newghy用户将仓库a导出Checkout到桌面locktest2文件夹中。

Step03:对桌面locktest1文件夹进行锁定的操作,操作菜单如图3.130所示。

图3.130 对locktest1文件夹执行锁定

 

    Step04:弹出界面如图3.131所示。

图3.131 对locktest1文件夹执行锁定的界面配置

 

    Step05:选择所有的文件对它们执行锁定,默认的界面配置即可,直接单击OK按钮,成功锁定如图3.132所示。

图3.132 成功对locktest1文件夹中的文件执行锁定

 

    Step06:对locktest1文件夹调用“Check for modifications”菜单查看一下哪些文件被锁定了,如图3.133所示。

图3.133 查看哪些文件被锁定

 

    Step07:这时对locktest2文件夹中的a.txt文件进行编辑内容如图3.134所示。

图3.134 编辑locktest2文件夹中的a.txt文件

 

    Step08:对locktest2文件夹执行Commit菜单后报错,如图3.135所示。

图3.135 有文件被锁定不能Commit

 

从图中根据提示可以得知locktest2\a.txt文件被其它人锁定不能提交,这样的效果完全合乎用户ghy所期待的效果,也就是不允许其它人更新自己锁定的文件,保护自己的工作果实。

Step09:继续操作,对locktest1文件夹调用“Release lock”菜单,如图3.136所示。

图3.136 对locktest1文件夹调用Release lock菜单

 

    Step10:弹出界面如图3.137所示。

图3.137 对所有文件执行释放锁操作

 

    Step11:单击OK按钮释放所有文件的锁,这时再对locktest2文件夹执行Commit操作后成功提交,如图3.138所示。

图3.138 将locktest2文件夹中的新内容成功提交

 

在上面的操作步骤中可以总结出几个情况:

(1)如果locktest1呈锁定文件的状态,并且不更改文件不提交locktest1工作副本时,当locktest2提交时会报错。

(2)如果locktest1呈锁定文件的状态,而更改locktest1文件夹中的内容还将locktest1文件夹中的内容进行提交,这时locktest1中的锁将会自动释放。

 

3.5.1 偷窃锁的使用

Step01:将桌面的locktest1和locktest2文件夹删除。

Step02:再将仓库a重新Checkout到桌面locktest1和locktest2文件夹中。

Step03:在locktest1文件夹上调用Get lock菜单,使locktest1文件夹获得仓库中所有文件的锁。

Step04:继续更改locktest2文件夹中的a.txt文件内容后再Commit肯定是呈报错的状态,因为其它用户已经将仓库a中的文件进行了锁定,这时如果locktest2还想强制提交该怎么办呢?

    Step05:对locktest2文件夹调用Get lock菜单如图3.139。

图3.139 对Steal the locks选项复选

 

    Step06:对Steal the locks选项复选也就是借用locktest1文件夹持有用户的锁,单击OK后用户newghy成功借锁成功,如图3.140所示。

图3.140 newghy成功借锁成功

 

    这时再对locktest2执行Commit提交即可以成功,不会出现异常与错误。

3.6 工作副本的重置

在开发项目时,对工作副本做了N多种改动,想恢复成工作副本原来的状态时可以使用Clean up菜单来进行工作副本的清理,还有因为网络的问题,在工作副本与仓库之间的命令不能得到彻底的执行时,工作副本的状态就不能和仓库进行同步,这时也可以使用Clean up菜单来清理还原这种状态。

调用Clean up菜单后弹出界面如图3.141所示。

图3.141 清理的选项

 

Step01:使用模板仓库a,将仓库a导出到桌面cleanuptest文件夹。

Step02:向cleanuptest工作副本中复制1个体积较大的文件,如图3.142所示。

图3.142 添加体积为1G大小的exe文件

 

    Step03:下一步对cleanuptest工作副本执行Commit操作,如图3.143所示。

图3.143 正在Commit的进度

 

    Step04:这时按下Ctrl+Alt+Delete键,弹出界面如图3.144所示。

图3.144 在任务管理器中将cleanuptest结束进程

 

    Step05:结束进程是模拟网络情况不好,结束任务成功后再一次对cleanuptest文件夹执行Commit提交任务时出现如图3.145所示界面:

图3.145 不能提交出现异常

 

    这时就需要Clean up菜单来初始化工作副本的状态了。

3.6.1 重置工作副本的状态

    Step01:对cleanuptest文件夹执行Clean up菜单,弹出界面配置如图3.146所示。

图3.146 初始化工作副本的状态

 

    Step02:单击OK按钮后弹出界面如图3.147所示。

图3.147 成功初始化工作副本

 

     Step03:这时再对cleanuptest文件夹执行Commit时正确上传了,如图3.148所示。

图3.148 初始化状态后可以正确上传了

 

3.6.2 还原所有的修改

    更改a.txt文件内容如图3.149所示。

图3.149 更改a.txt文件内容

 

    这时如果想还原工作副本原来未修改前的状态时,也可以使用Clean up菜单,对cleanuptest文件夹执行Clean up菜单,弹出界面配置如图3.150所示。

图3.250 还原到未修改前的状态

 

    单击OK后的效果如图3.151所示。

图3.151 成功还原

 

    文件夹cleanuptest中的内容被还原,如图3.152所示。

图3.152 cleanuptest中的内容被还原

 

3.6.3 删除无版本的文件和文件夹

    继续操作,在cleanuptest文件夹中添加1个没有版本信息的txt文件和1个文件夹,效果如图3.153所示。

图3.153 新添加文件及文件夹

 

    当想删除这些没有版本的文件及文件夹时调用Clean up菜单如图3.154所示。

图3.154 删除没有version版本的文件及文件夹

 

    单击OK按钮后的cleanuptest工作副本的内容如图3.155所示。

图3.155 无版本的对象在cleanuptest工作副本中被删除

 

3.6.4 删除忽略的文件及文件夹和添加忽略资源

    Step01:将仓库a删除,重新将模板仓库a复制到svn_repository文件夹中,再将仓库a导出Checkout到桌面atest文件夹中。

    Step02:在atest文件夹中创建ghy.o及ghydir文件夹,如图3.156所示。

图3.156 添加txt及文件夹

 

    Step03:对atest文件夹调用Clean up选项如图3.157所示。

图3.157 删除忽略的文件及文件夹

 

    Step04:单击OK后atest文件夹中的内容如图3.158所示。

图3.158 ghy.o文件被删除

 

Step05:那如果想在当前的工作副本中使ghydir也变成一个忽略的文件夹该如何配置呢?先来配置工作副本的属性,在atest文件夹单击鼠标右键属性菜单中的Subversion选项卡,再单击其中的按钮来弹出配置属性界面,在弹出的界面中单击“Advanced”子菜单,如图3.159所示。

图3.159 单击Advanced菜单

 

    Step06:弹出界面如图3.160所示。

图3.160 配置ghydir文件夹为忽略

 

Step07:其中选项“Apply property recursively”的作用为是否将当前的配置设置为所有的文件夹,也就是递归设置所有的文件夹中的ghydir子文件夹都为忽略的文件夹,设置完成后单击OK按钮完成设置。

Step08:这时工作副本的属性被更改,如图3.161所示。

图3.161 工作副本属性被更改

 

    Step09:先把工作副本的属性设置Commit到仓库中,在仓库a中应用属性设置,成功Commit后的提示如图3.162所示。

图3.162成功Commit属性设置

 

Step10:提交后atest文件夹的属性内容如图3.163所示。

图3.163 对文件夹atest添加ghydir为忽略的文件夹

 

    Step11:这时再对atest文件夹调用Clean up菜单,配置如图3.164所示。

图3.164 想要将ghydir忽略掉删除掉

 

    Step12:单击OK按钮后文件夹atest中的内容如图3.165所示。

图3.165 将ghydir文件夹删除了

 

    Step13:上面的步骤是用属性界面添加忽略文件夹ghydir,步骤比较繁琐,其实还有更加方便的操作来实现忽略文件夹的功能,在atest文件夹中创建aa和bb及cc文件夹,如图3.166所示。

图3.166 将aa添加到忽略列表

 

    Step14:用同样的方式将cc也添加到忽略列表,添加完成后atest的属性内容被设置成图3.167所示。

图3.167 文件夹atest有3个忽略的文件夹

 

    Step15:下一步对atest文件夹执行Clean up菜单配置界面如图3.168所示。

图3.168 删除忽略的文件夹及文件

 

    Step16:单击OK后atest中的内容如图3.169所示。

图3.169 仅剩bb文件夹没有被删除

 

3.6.5 刷新图标

    在操作SVN版本控制的过程中,有可能中途出现一些错误,那么图标的状态有可能就会出现混乱,使用选项“Refresh shell overlays”的目的就是将当前工作副本图标的状态进行初始化与重置。

3.6.6 包含引用的项目

    如果“Include externals”选项复选,那么上面的选项也应用到引用项目中的文件与文件夹的重置操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值