今天提交SVN的时候,又遇到了之前遇到的同样问题,之前就是因为这个问题把我搞的原地爆炸了。今天正好又遇到了类似的问题,我专门查了一下原因并“实时记录一下”处理方式。
症状:刚刚提交代码的时候提示:
然后我点继续:
提示有多个版本处于冲突状态(conflicted state.)
继续点OK,显示提交成功了。紧接着我回到我的VS看。。。就看到了我最不想看到的一幕。
(前方高能,哈哈)
1,整个项目通篇都是红杠,傻眼!
2,出现了最让人头疼的
">>>>> .r563"
还有下面这种三个tag靠的比较近的。
同时不仅如此,在你的VS目录下面还会产生一些新文件,如下:
上网查了一下资料得知:
.mine是我本地修改好了的,正准备要提交的版本;
.r546是以前某个版本;
.r563是我当前SVN已经保存的最新版本。
通过查看SVN中的LOG可以看出,r546是我之前提交过的某个版本,而r563是我SVN中现有的最新版本。(注意:564,566是我在写CSDN时,操作后的最新版本,当时能够显示的最新版本就是r563)
病因:我后来仔细查了一个出现conflict的原因就是:
我的项目在进行到546处时,因为实验需求,我需要以546为base,去尝试两个方案A,B。所以就在电脑中创建了一个新文件夹作为546的实验备份(checkout r546),原项目则依然在他原有的目录中。
方案A在执行的过程中,不断地更新,直到完成,我始终没有提交过那个备份文件夹中的文件。可看到546,555,557,563都是我在原始目录下提交的代码/版本。因为之前创建的另一个备份文件夹中的546一直没动,所以我在原始目录下所提交的代码一直都很顺利,没有冲突。
最近我在备份文件夹中实现了方案B中的部分功能,一提交就出现了今天的conflict.
简而言之:本地计算机上,以546版本为基础,可以有不同的多份working copy,但你只能从中选择一个你真正想要的提交。如果你都要提交,就会出现跟我一样的conflict。
(上图是小乌龟自己的解释)
解决办法:这个问题比较难回答,问题是要看你期待如何解决这个问题。
就我自己遇到的这个问题,正如我前面说的,我是以r546为基础,分别在两个working copy下去尝试两个方案A,B,且原始目录下的方案A已经提交过多个版本的情况下,我提交了方案B的本地code。
所以,我希望的解决方案是,回退到我在提交方案B之前的本地code。正如前面看到的,方案B中的code已经被修改成了画满各种红线的问题code.
1,首先我们找到VS目录下,有冲突的文件目录。右键单击这个带有感叹号的文件,选择SVN commit.
2, 右键单击有问题的红色文件,并选择
然后选择Resolve.
其中:
Edit confilicts:手动修改冲突,相当于手动merge'mine’和‘theirs’两者的code。
Mark as resolved:直接标记为已解决,这样会删除.mine、.r546、.r563这些文件,但这只是标记,如果你直接标记为解决,实际上文件还是冲突的,只是状态修复了。
Resolve conflict using 'theirs':使用他的提交覆盖我的修改来解决冲突。如果你的修改不需要提交,你可以方便的选择这个。
Resolve conflict using 'mine':使用我本地的版本覆盖他的来解决冲突。如果对方提交的代码没什么用,你可以直接使用这个来解决。
最后,输入comment,并提交,得到最新的版本r567.
与此同时,如果你回到VS的目录下,你会发现原来的那些个.mine、.r546、.r563的文件都消失,而且问题文件上的感叹号也消失了。
成功,SVN showlog看到刚刚提交的版本。
最后,把其他所有的conflict文件都用相同的方式处理就好。
(全文完)
参考链接:
1,https://segmentfault.com/a/1190000014294501解决冲突
2,解决冲突
3,svn冲突问题详解 SVN版本冲突解决详解-白红宇的个人博客
(配图与本文无关)