TortoiseSVN使用merge出现代码冲突后正确的解决方式

本文还在继续完善中,稍安勿躁(滑稽)……

 

前言

公司代码项目使用SVN管理,分为dev(开发)、test(测试)、prod(生产)这三个版本;

平时用dev开发,开发完毕后要将代码合并到test并提测,测试完成后要把代码合并到prod准备打包上生产。

 

期间,各自开发并提交代码时,经常会产生代码冲突,不过这个还比较好解决,可以使用IDEA(或Eclipse)自带的工具解决,或者先记录下自己的修改内容、删掉冲突文件重新update,然后再修改文件提交自己修改的内容即可。(其实主要是冲突文件较少,冲突位置显而易见,并且知道要保留哪部分代码,各自解决各自的就行了。)

 

然而,合并代码是最让人头疼的了(从dev合并到test,或者从test合并到prod),产生的冲突不太好解决:

1.一个需求,有多个人开发,改动了一堆代码文件。

2.假设开发完毕,dev已经是提交后的最新状态,现在要将代码合并到test。(统一合并,在一台计算机上操作。)

3.开始合并代码,使用TortoiseSVN,右击"test"文件夹,选择"TortoiseSVN->merge..."

4.选择第一个单选按钮,"Merge a range of revisions",点击"next"

5.在"URL to merge from"中选择dev的路径,选择下方的"specific range"单选按钮,点击旁边的"Show log"按钮,选中本次需要提测的svn提交记录并点击OK。(因为dev中还会有不需要提测的代码,所以要选择才可以)

6.之后返回刚才的对话框,可以看到"specific range"右侧已经出现了需要合并的svn变更号,然后点击"Next"。

7.保持默认设置,下拉菜单为"Working copy",单选按钮为"Compare whitespaces",其余的都没有选中;然后点击"Test merge"按钮测试合并效果。

8.如果没有报错提示代码冲突,那么就可以点击"Merge"按钮成功将代码合并了。

9.然而我们的项目经常会提示代码冲突,冲突文件一堆……(冲突原因先不管,总之就是合并代码时出现冲突了,得想办法解决后才能合并)

10.这时,我们一般会先点击"Merge",后续选择"resolve later",先将不冲突的文件合并过去,然后一个一个处理冲突的文件,处理完成后提交代码。

11.或者直接使用Beyond Compare(文件对比工具)进行代码合并,不使用TortoiseSVN的"Merge"功能;这样的好处是不会出现代码冲突问题,合并完成后提交代码就行。

12.或者使用IDEA进行合并,具体就是手动用dev中代码文件替换掉test中的代码文件(复制整段代码内容替换掉目标内容也可以),然后IDEA会显示出代码发生了哪些变更,将准备上线的代码块留下、不准备上线的代码块回退,然后提交代码。这样也不会出现代码冲突。

13.或者,干脆不统一合并代码了,各自把各自的代码合并到test;各自处理各自的冲突反而方便点。

 

本文目标

上方可能写的有些乱,总的来说就是,使用TortoiseSVN的"merge"功能进行代码合并时,出现的冲突不太好解决。

本文的目的是,将TortoiseSVN使用"merge"合并代码时出现冲突时的解决方法梳理清楚。

 

TortoiseSVN使用merge合并代码,发生冲突的原因

1.首先,SVN有两种冲突,内容冲突与树冲突。

2.svn,对于同一个文件,A先提交测试,B后提交测试,A再提交测试;之后A将两次代码用merge合并到生产,但是B的内容不合并,此时会冲突。(由于行不一样?)

3.svn,对于同一个文件,A先提交测试,B后提交测试;B先提交生产(用merge),A后提交生产(用merge),A就会把B提交的东西覆盖。(这里不会冲突,而是直接覆盖,会导致线上功能回退,需要注意;需要自己检查代码,完善后再提交

4.选择多个svn提交号进行代码合并时,经常会产生冲突。(原因暂时没有搞明白;不过每次merge时选择一个版本号、一次一次点merge比较保险

/* 可以选择"resolve later",后续单独对冲突文件进行处理。 */

 

TortoiseSVN树冲突与解决方法(偶尔会发生的冲突)

1.树冲突原因:

两个人以上对文件夹或整个文件进行了修改(删除、新增等操作,不是指修改内容 )

2.截图(手绘版):

3.解决方法

https://blog.csdn.net/xgf415/article/details/75196714

 

TortoiseSVN内容冲突与解决方法(经常会发生的冲突)

可以参考下面这篇文章,算是比较好的冲突解决方法了:

https://blog.csdn.net/justry_deng/article/details/82259470

 

===========================================================================

 

后记与注意事项

一、使用merge功能发现有代码漏合的情况与解决方法

1.项目上线前,本人使用merge功能,准备从测试文件夹把代码合并到生产文件夹:(截图是步骤,仅供参考)

(其实dev是开发,test是测试,prod是生产;懒得改名字了,现在没有test,就当dev是测试吧,从dev到prod)

●在生产文件夹prod右击,选择merge。

●选Merge a range of revisions,点next

●选择测试的路径,project_dev,然后点击show log

●选择要合并到生产的提交记录(要清楚这是测试上的提交记录,是这些改动准备合并到生产),点击ok。(应该是可以多选的,但是本人多选后merge完,发现居然有代码漏合了,感觉还是每次选择一个、多merge几次保险。)

●选好后,specific range中的值会改变;1-4表示第一次到第四次的提交记录都要合并;然后点next

●按照默认设置,可以点Test merge,会出现窗口显示测试结果,如果有冲突,窗口会显示。

●点击merge,就开始合并代码了。只会合并到本地,不会自动提交svn,所以这一步可以放一半心。(如果遇到冲突,还是得费心)

●代码合并结果,如果有冲突,就需要解决冲突了。

●合并完成后,由于有修改,图标会变红,之后正常进行commit操作提交代码即可。

 

2.问题来了,本人merge代码时,出现了冲突(截图是冲突解决方式)

●点击test时会出现冲突提示(不管,也没办法管,知道有冲突也要点击下一步,才能处理)

●点击merge,然后出现冲突窗口。可以选择"edit conflict",开始处理冲突。

●点击merge,然后出现冲突窗口。可以选择"edit conflict",开始处理冲突

●右击下方标有红色感叹号的区域,可以选择采用左边(开发)还是右边(生产)的内容;也可以直接手动编辑。

●把冲突区域编辑好后,点击save,就算解决完冲突了;然后点击关闭即可。

●然后回到上一个窗口,点击“resolved”,就说明这个文件的冲突解决完成了。

●回到merge窗口,显示冲突已解决,merge成功。

●下一步就是svn正常commit即可。

 

3.好不容易解决了冲突,并commit代码后,同事检查了一下,发现好多代码漏合了,不知道怎么回事。

虽然合并了文件中的代码,但是代码不是最新的。

推测可能是合并代码时,选择了多条记录,又遇到了冲突;解决冲突后,有些记录就不知道怎么漏掉了。

 

4.解决方法是,重新进行merge操作,还好能显示出来哪些漏合了;然后这次只选择一行进行merge;多进行几次,直到代码合完,然后commit。

 

5.总结,如果选择多条记录合并,期间出现冲突;就算解决了冲突,后续合并代码时也可能会有代码漏合的情况。

所以应该选择几条记录,点击test没有冲突后在merge;如果有冲突,就一条一条merge。

一条一条merge时,就需要注意顺序了,先merge旧的,再merge新的。

 

========================================

 

SVN中merge代码出现冲突的原因与解决方法总结

1.开发环境下,先提交了a代码(例如其中新增了一个方法),后提交了b代码(例如修改了新增方法中的内容);现在要把b代码merge到生产,但是a代码还没有合并到生产(也不准备合并到生产);SVN就会报错,提示冲突(因为那个方法并没有提交到生产,却要提交方法中修改了的部分,是有问题的)。

 

这时,在把b代码merge到生产时,不应该提交方法中修改了的那部分,因为这个方法不准备上线;不过当a代码merge到生产时,要记得提交方法中修改了的部分(b中没有上线的部分),不然功能会有问题。

 

解决方法:如果冲突的代码块可以看明白(有时候混入别人的代码就看不明白),那按上面的方法,edit后解决;

如果冲突的代码文件比较少,可以点resolve later,之后把自动生成的文件全部删掉,重新update项目,然后根据旧代码,手动编辑写入自己修改的地方,这样清晰一点;

如果冲突的代码文件比较多,那还是重新来,使用Beyond Compare(BC)工具算了,这样反而清晰一点。

 

 

 

 

 

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追逐梦想永不停

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值