今天提交SVN的时候,又遇到了之前遇到的同样问题,之前就是因为这个问题把我搞的原地爆炸了。今天正好又遇到了类似的问题,我专门查了一下原因并“实时记录一下”处理方式。

症状:

刚刚提交代码的时候提示:

SVN出现access denied_SVN版本冲突

然后我点继续:

SVN出现access denied_SVN出现access denied_02

提示有多个版本处于冲突状态(conflicted state.) 

继续点OK,显示提交成功了。紧接着我回到我的VS看。。。就看到了我最不想看到的一幕。

(前方高能,哈哈)

1,整个项目通篇都是红杠,傻眼!

2,出现了最让人头疼的

"<<<<<<< .mine"

"||||||| .r546"

"=======
>>>>>>> .r563"

SVN出现access denied_SVN版本冲突_03

SVN出现access denied_tortoisesvn_04

SVN出现access denied_SVN出现access denied_05

 还有下面这种三个tag靠的比较近的。

SVN出现access denied_SVN版本冲突_06

同时不仅如此,在你的VS目录下面还会产生一些新文件,如下:

SVN出现access denied_SVN版本冲突_07

上网查了一下资料得知:

.mine是我本地修改好了的,正准备要提交的版本;

.r546是以前某个版本;

.r563是我当前SVN已经保存的最新版本。

SVN出现access denied_SVN conflict_08

通过查看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。

 

SVN出现access denied_tortoisesvn_09

                                                        (上图是小乌龟自己的解释) 

解决办法:

这个问题比较难回答,问题是要看你期待如何解决这个问题。

就我自己遇到的这个问题,正如我前面说的,我是以r546为基础,分别在两个working copy下去尝试两个方案A,B,且原始目录下的方案A已经提交过多个版本的情况下,我提交了方案B的本地code。

所以,我希望的解决方案是,回退到我在提交方案B之前的本地code。正如前面看到的,方案B中的code已经被修改成了画满各种红线的问题code.

1,首先我们找到VS目录下,有冲突的文件目录。右键单击这个带有感叹号的文件,选择SVN commit.

SVN出现access denied_tortoisesvn_10

2, 右键单击有问题的红色文件,并选择

SVN出现access denied_svn_11

SVN出现access denied_SVN conflict_12

然后选择Resolve.

SVN出现access denied_SVN版本冲突_13

其中:

Edit confilicts:手动修改冲突,相当于手动merge'mine’和‘theirs’两者的code。

Mark as resolved:直接标记为已解决,这样会删除.mine、.r546、.r563这些文件,但这只是标记,如果你直接标记为解决,实际上文件还是冲突的,只是状态修复了。

Resolve conflict using 'theirs':使用他的提交覆盖我的修改来解决冲突。如果你的修改不需要提交,你可以方便的选择这个。

Resolve conflict using 'mine':使用我本地的版本覆盖他的来解决冲突。如果对方提交的代码没什么用,你可以直接使用这个来解决。

最后,输入comment,并提交,得到最新的版本r567.

SVN出现access denied_tortoisesvn_14

 与此同时,如果你回到VS的目录下,你会发现原来的那些个.mine、.r546、.r563的文件都消失,而且问题文件上的感叹号也消失了。

SVN出现access denied_svn_15

成功,SVN showlog看到刚刚提交的版本。

SVN出现access denied_SVN出现access denied_16

 最后,把其他所有的conflict文件都用相同的方式处理就好。

(全文完)

参考链接:

1,解决冲突

2,解决冲突

3,svn冲突问题详解 SVN版本冲突解决详解-白红宇的个人博客

SVN出现access denied_tortoisesvn_17

                                                                (配图与本文无关)