解决常见SVN冲突问题(转)
转自:http://www.w3cfuns.com/blog-5443287-5403523.html
一个大项目在开发中可能会拆分成几个小项目,分别分去,同时共通的部分再由人做,做完后再统一合并。同时,在开发中,共通的部分修改后,其它人要保持同步。
在这个开发过程中我们就需要用到svn去管理我们的的代码,可是在使用过程中,我们经常可能遇到各种各样的冲突问题,相当的头疼郁闷……,严重影响开发的工作效率
在做总结之前我们先搞清几个概念和规则:
①利用svn checkout,upade、merge下来的代码本地,无论你如何操作及时产生冲突,也不会造成主干上面的代码混乱冲突。(记住本地产生冲突,还原到上一个版本就行了,一定不要提交到主干导致主干出问题)
②本地代码有冲突一定不可向主干提交代码,解决好了再提交
③merge合并代码时,是分支或者主干跟本地的代码进行合并(这个概念一定要理解清楚),出现问题不要慌,大不了重新来过,反正只是本地操作而已
④创建分支是可以直接命令branchs/tag或者在trunk Copy to 分支,切勿直接拷贝文件
⑤养成开发时将(switch)切换到主干(trunk)创建分支(branchs),上线时切换到主干合并(merge)分支,保持主干的准确性
由于使用svn的过程中遇到的种种坑,对解决冲突问题做一下总结:
一、svn 提交代码遇到的冲突问题
1. 如果执行svn commit命令时遇到了"xxx is out of date"提示,如下图所示:

那么一般是因为您修改了本地某文件或目录结构,而别人也修改了同一个的文件或目录并且先于您提交到了SVN库。
2. 解决的办法是先使用svn update命令获取SVN库上最新修改的文件,这个命令并不会直接覆盖掉您本地所做的修改,SVN客户端会先尝试将SVN库上该文件的修改合并到你的本地文件中。
如果SVN客户端成功的进行了合并,您可以再次执行SVNcommit命令进行本地文件的提交即可。
3. 如果SVN客户端无法进行自动合并(可能因为文件是一些二进制文件,或者两人修改的地方是同一个,或者修改的地方太多等原因),则svn客户端会提示“one or more files are in confict state(遇到这样的英文,就头疼了)”,即告诉您有文件发生了冲突,如下图所示:
4. 如果是文本文件冲突,则在文件夹下会多出几个冲突文件,如下图所示:

其中:
-f2是尝试合并的文件,里面有svn客户端加入的一些标记;(这个文件是,合并的文件,里面有注释标记,告诉你那里出现了冲突)
-f2.r69是您本地修改文件的基础版本,69是版本号;(这个文件时你这个版本的问题,注意,是你没有做更改的版本)
-f2.mine是您本地修改后的文件,即f2.mine是在f2.r69文件基础上更改的(这个文件时你现在本地改完的版本);
-f2.r70是服务器上最新版本的文件,即别人修改后提交的文件。(这个文件是线上的最新版本)
此时的解决方法有多种:
(1)比较f2.r70和f2.mine,将您自己做的修改和别人做的修改手工合并,可以下载一个Beyond Compare 比较文件不同,手动做更改,然后把合并后的内容覆盖到f2中。
最后右键点击f2,然后选择Resovled,之后f2.mine,f2.r69,f2.r70文件都会自动被删除。然后您再次执行svn commit就可以了。如下图所示:
(2)如果要保留别人的修改而放弃自己的修改,则可以删掉f2,f2.mine, f2.r69,f2.r70几个文件,再执行以下update,这样会重新从服务器上把最新文件下载到本地。
(3)如果是保留自己的修改而放弃别人的修改,则可以删掉f2,f2.r69,f2.r70,然后把f2.mine改名为f2,然后再次执行svn commit,就可以把自己的修改上传到svn服务器。
5. 如果发生冲突的是二进制文件,此时SVN客户端是无法执行自动合并的,这样目录下只会多出以.rXX结尾的两个文件,而不会出现.mine结尾的文件,此时的处理方法可以参考上面的(2)(3)。
二、svn 合并分支时遇到的冲突问题
svn 合并分支时,svn后台基本上可以理解成进行了2种操作:①增加本地没有的文件 ②合并本地已有但不同的文件
1.增加本地没有的文件,并不会造成冲突
2.合并本地已有但不同的文件 ,如果单单是update就不会造成冲突,一旦出现update不了,svn无法自动识别合并,就会出现conflict冲突,这就蛋疼了。
针对合并出现的冲突问题,把整个合并过程也图文并茂的讲解一下:

从主干 ( trunk ) 合并至分支 ( branches) 通常选第 1 个,也就是 [Merge a range of revisions],这个菜单也是我们合并时用的最多的
注意:其实也可以理解为把另一个分支合并到当前分支,这里就相当于把主干当成当前分支,有的版本比较高的svn可能就还有另一个菜单如图所示[Reintegrate a branch],其实它才是在当前分支下,将分支合并到主干的快捷操作,合并完成之后,我们可以删除分支,最后还是推荐大家用第一种 [Merge a range of revisions]


在 Merge 的窗口有以下注意事项:
1.合并的来源,由于我们打算从分支 ( branches ) 合并至主干(trunk),所以合并的來源要选 branches /2015.01.07才对!
2.合并的结果会直接与目前「工作目录」(Working Copy) 做比对,并修改目前工作目录中的所有文件。因此建议在做合并之前可以将所有尚未 commit 的档案先 commit 到版本库,避免不必要的冲突事件发生。


如图,可以看到的集中操作,add update没有冲突产生, svn自动合并不了了就会产生冲突

3.当我们点击Edit conflict

在冲突的文件上(选中文件--右键菜单—TortoiseSVN—Edit conflicts(解决冲突)),出现如下窗口
Theirs窗口为服务器上当前最新版本
Mine窗口为本地修改后的版本
Merged窗口为合并后的文件内容显示
如果要使用服务器版本,在Theirs窗口选中差异内容,右键,选择Use this text block(使用这段文本块)。
同理如果要使用本地版本,在协商后,在Mine窗口右键,选择Use this text block(使用这段文本块)。
4、 修改完成后,保存文件内容,提交即可。
5、 如果另一个用户的冲突目录下,则可选中文件--右键菜单—TortoiseSVN—Resolved(解决)。会列出冲突的文件列表,如果确认已经解决,点OK。
最后,给大家一些使用svn的建议:
如何降低冲突解决的复杂度:
1、当文档编辑完成后,尽快提交,频繁的提交/更新可以降低在冲突发生的概率,以及发生时解决冲突的复杂度。
2、在提交时,写上明确的message,方便以后查找用户更新的原因,毕竟随着时间的推移,对当初更新的原因有可能会遗忘
3、养成良好的使用习惯,使用SVN时每次都是先提交,后更新。每天早上打开后,首先要从版本库获取最新版本。每天下班前必须将已经编辑过的文档都提交到版本库。
参考资料:
http://blog.sina.com.cn/s/blog_5f54f0be0101f04y.html
http://blog.csdn.net/windone0109/article/details/4857044
http://wiki.open.qq.com/wiki/faq/SVN%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
解决常见SVN冲突问题(转)的更多相关文章
- svn冲突文件解决方法
svn冲突文件解决方法 工具/原料 svn客户端 方法/步骤 1 通过SVN客户端更新需要的文件,如果出现有感叹号的文件,找到出现感叹号的文件. 2 选择感叹号文件,即冲突文件,单击鼠标右键对冲突文件 ...
- 【转】svn冲突问题详解 SVN版本冲突解决详解
(摘自西西软件园,原文链接http://www.cr173.com/html/46224_1.html) 解决版本冲突的命令.在冲突解决之后,需要使用svnresolved来告诉subversion冲 ...
- svn冲突的解决
svn文件冲突的解决 冲突后,会产生三个多余的文件. ①文件名.扩展名.mine 这是你的文件,在你更新你的工作副本之前存在于你的工作副本中--也就是说,没有冲突标志.这个文件 除了你的最新修改外没有 ...
- eclipse svn 冲突解决
eclipse svn 冲突解决
- tortoise svn冲突解决
Tortoiese svn 冲突解决 当文件被别人修改并提交到SVN服务器后,如果自己本地的文件没有被更新为最新的版本,而且已经做了修改,这时候提交将会被成功,系统会提示你的版本已经过期,并要求你先进 ...
- Tortoise svn 冲突解决主要办法
Tortoise svn 冲突解决主要办法 1.先备份自己的修改文件后,然后revert自己的更新内容,然后提交,再以更新后的代码为基准,将备份的代码移入进来.在这种方式下不需要使用svn resol ...
- svn冲突问题详解 SVN版本冲突解决详解
svn冲突问题详解 SVN版本冲突解决详解 (摘自西西软件园,原文链接http://www.cr173.com/html/46224_1.html) 解决版本冲突的命令.在冲突解决之后,需要使用svn ...
- SVN学习总结(2)——SVN冲突解决
在我们用VS进行项目合作开发的过程中,SVN的提交控制是至关重要的,大家不可避免的都遇到过SVN冲突的问题,开发的时候,应该认真学习SVN的知识,减少冲突,集中时间放在开发上. 解决冲突有三种方式: ...
- SVN冲突
svn冲突,导致工程打不开,报错:xxx..xcodeproj cannot be opened because the project file cannot be parsed. 解决方法: ...
随机推荐
- ubuntu16.04 + cuda9.0(deb版)+Cudnn7.1
https://blog.csdn.net/Umi_you/article/details/80268983
- 蓝桥杯 2014本科C++ B组 李白打酒 三种实现方法 枚举/递归
标题:李白打酒 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗. 这一路上,他一共遇到店5次, ...
- Java中的标识符,类名和包名规则
Java中的包.类.方法.参数和变量的名称 标识符的命名规则 1.变量必须以字母.下划线(_)或美元符号($)开头 2.余下的字符可以是下划线.美元符号或任何的字母或数字 3.不能使用JavaScri ...
- Linux系统如何查看版本信息?
查看版本号 我在Ubuntu下做测试 1 命令行执行 cat /etc/issue (切记cat后要空一格)即可看到版本信息. 2 登录linux,在终端输入 cat /proc/version ...
- Hadoop2 使用 YARN 运行 MapReduce 的过程源码分析
Hadoop 使用 YARN 运行 MapReduce 的过程如下图所示: 总共分为11步. 这里以 WordCount 为例, 我们在客户端终端提交作业: # 把本地的 /home/hadoop/t ...
- HUD-1548
A strange lift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- 也谈Flash mmorpg地图问题【转】
网上看一篇关于目前几个流行flash mmorpg地图实现的分析,这里也想说说自己的一些看法. 常见的三种方式:1.整图2.Tile元素拼装3.栅格化切片 整图 整图加载很好理解直接加载一张背景图.这 ...
- SqlServer2012——表
1.数据类型 数字类型:int,smallint, 高精度:decimal,numeric 日期和时间:datetime,smalldatetime 二进制:binary,varbinary,imag ...
- git 忽略 Pycharm 中的 workspace.xml 文件
.gitignore 中要写上 workspace.xml 如果已经不幸之前commit workspace.xml 的话,必须执行以下命令 $ git rm --cached .idea/works ...
- SpringBoot2.0 基础案例(02):配置Log4j2,实现不同环境日志打印
一.Log4j2日志简介 日志打印是了解Web项目运行的最直接方式,所以在项目开发中是需要首先搭建好的环境. 1.Log4j2特点 1)核心特点 相比与其他的日志系统,log4j2丢数据这种情况少:d ...