再也不怕SVN冲突:轻松解决SVN冲突
什么时候容易出现冲突?
多个人同时修改了同个文件中的同一行代码
无法进行对比的二进制文件,比如图片等
如何解决冲突?
如上图,test_conflict.py文件发生了冲突,并且多出了几个文件,其中.mine是我本地修改了还没提交的版本,.r2文件是上一个版本的文件,.r1是上上个版本的文件。
发生冲突时不用慌,我们可以轻松解决,选中冲突文件,右键如下操作
有几个选项我们来看下:
Edit confilicts:修改冲突,可以对冲突的行进行内容选择,后面我们详细说。
Mark as resolved:直接标记为已解决,这样会删除.mine、.r1、.r2这些文件,但这只是标记,如果你直接标记为解决,实际上文件还是冲突的,只是状态修复了。
Resolve conflict using 'theirs':使用他的提交覆盖我的修改来解决冲突。如果你的修改不需要提交,你可以方便的选择这个。
Resolve conflict using 'mine':使用我本地的版本覆盖他的来解决冲突。如果对方提交的代码没什么用,你可以直接使用这个来解决。
下面我们详细讲解下Edit confilicts这个选项。
上图是编辑冲突的界面,如果你的界面显示了很多空白符号,你可以点击顶部的“Show Whitespaces”来隐藏。
上图的左边.r2展示的是上个版本的变化,右边.mine是我们本地修改的版本,下面是表示合并后的效果。
左上的第12行下面的绿色等号表示这行被删除了,13、14行前面的+号表示这两行是新增的
右上的同样也是删除了一行,然后增加了第13行
下面区域的13,14行显示的是红色背景的问号,表示这两行SVN不知道如何合并代码。
假设我们需要13行保留我为我本地的修改,14行使用他人提交的。那么选中右上的第13行,右键选择“Use this text block”,表示使用这行的代码;
选中左上的14行,右键选择“Use this text block”。这样就搞定了,下面区域会显示合并后的效果
这样下面区域的冲突行就全部解决了,点击顶部工具栏的“Mark as resolved”标记为已解决好冲突,或者直接ctr+s保存也会提示“Mark as resolved”菜单。
到这冲突就完美解决了。
这里再解释下其他的一些菜单项:
Use this text block:使用这块代码为合并后的行
Use this whole file:使用这整个文件作为合并后的文件
Use text block from 'mine' before 'theirs':两边的代码都保留,我的代码在前面
Use text block from 'theirs' before 'mine':两边的代码都保留,我的代码在后面
最后推荐大家一个非常好用的SVN源码托管站:SVNBucket