在项目中,基本不可避免多个人同时参与一个项目,因此就可能会出现多个人同时修改一个文件的情况,就不可避免的会出现冲突。svn已经很聪明了,如果你和别人对于同一个文件的修改之间不存在重叠(比如你在文件最开始增加了一行,而你同事在文件的结尾出增加了一行),svn会自动将你们的修改进行合并,然而意外总是会发生,而且超出了svn的处理范围,只好采用人工智能(手工)来进行合并了。
要解决冲突,我们首先得制造个冲突,保证你现在已经有两个工作拷贝了,我们现在修改其中的一个,例如这里我们修改sally_calc中的main.c文件。

root@letuknowit:/home/kris/sally_calc/trunk# cat main.c
#include <stdio.h>
#include "add.h"
#include "sub.h"int main()
{printf("5 + 10 = %d.\n",add(5,10));printf("15 - 10 = %d.\n",sub(15,10));//sally's testprintf("sally: 60 - 33 = %d.\n",sub(60,33));return 0;
}

在这里sally增加了一个属于她自己的测试语句,改好后,提交到svn

root@letuknowit:/home/kris/sally_calc/trunk# svn ci -m "sally add some test code"
Sending        trunk/main.c
Transmitting file data .
Committed revision 7.

下面回到kris的工作副本,做类似的修改,具体如下

root@letuknowit:/home/kris/calc/trunk# cat main.c
#include <stdio.h>
#include "add.h"
#include "sub.h"int main()
{printf("5 + 10 = %d.\n",add(5,10));printf("15 - 10 = %d.\n",sub(15,10));//kris's testprintf("kris: 12 + 28 = %d.\n",add(12,28));return 0;
}

好了,下面的工作自然是提交了。

root@letuknowit:/home/kris/calc/trunk# svn ci -m "kris add some test code"
Sending        trunk/main.c
svn: Commit failed (details follow):
svn: File '/trunk/main.c' is out of date

很抱歉,提交失败了,原因是本地文件过期了(因为之前sally提交了对于main.c的修改)。原来如此,赶紧把sally的修改update过来。不过在这之前提供一个检测本地文件是否已经过期的办法,还记得经常用到的svn st命令吧

root@letuknowit:/home/kris/calc/trunk# svn st
M       main.c
root@letuknowit:/home/kris/calc/trunk# svn st -u
M       *        6   main.c
Status against revision:      7

看到那个*了吧,出现这个标记就说明本地副本的文件已经过期了,需要执行svn update了。

root@letuknowit:/home/kris/calc/trunk# svn up
Conflict discovered in 'main.c'.
Select: (p) postpone, (df) diff-full, (e) edit,(mc) mine-conflict, (tc) theirs-conflict,(s) show all options:

额滴个小心脏啊,又出错了,还要做选择题,纠结啊,纠结前还是看看各个选项都是做啥的吧

(p) postpone          暂时推后处理,我可能要和那个和我冲突的家伙商量一番
(df) diff-full        把所有的修改列出来,比比看
(e) edit              直接编辑冲突的文件
(mc) mine-conflict    如果你很有自信可以只用你的修改,把别人的修改干掉
(tc) theirs-conflict  底气不足,还是用别人修改的吧
(s) show all options  显示其他可用的命令

这里我们先选择p稍候处理,系统会给出如下输出,main.c前面的C标识说明这是一个冲突中的文件,需要手工处理以解决冲突。

        (s) show all options:p
C    main.c
Updated to revision 7.
Summary of conflicts:Text conflicts: 1

如果这个时候你查看一下工作拷贝,你会发现多了几个文件,对于每一个冲突的文件,svn会放置三个额外的未版本化文件到你的工作拷贝。

root@letuknowit:/home/kris/calc/trunk# ls -al m*
-rw-r--r-- 1 root root 312 2012-09-20 16:35 main.c
-rw-r--r-- 1 root root 216 2012-09-20 16:35 main.c.mine
-rw-r--r-- 1 root root 156 2012-09-20 16:35 main.c.r6
-rw-r--r-- 1 root root 218 2012-09-20 16:35 main.c.r7

其中main.c.mine是融合了你的修改的版本,里面是你更新的内容,main.c.r6是你做更新操作以前的版本,你是在这个版本的基础上做的修改,main.c.r7是版本库中的最新版本,这里有别人的修改,而就是这个修改和你的修改冲突了。这几个文件可以自己去查看下,应该很好理解。
对了,还有主角没有登场,这个时候如果你看下mian.c的内容,估计你又要郁闷了,和你原先的修改完全不一样了。

root@letuknowit:/home/kris/calc/trunk# cat main.c
#include <stdio.h>
#include "add.h"
#include "sub.h"int main()
{printf("5 + 10 = %d.\n",add(5,10));printf("15 - 10 = %d.\n",sub(15,10));
<<<<<<< .mine//kris's testprintf("kris: 12 + 28 = %d.\n",add(12,28));
=======//sally's testprintf("sally: 60 - 33 = %d.\n",sub(60,33));
>>>>>>> .r7return 0;
}

你会看到由小于号、等于号和大于号串组成的三个部分,其中小于号和等号之间的内容是你的修改,而等号和大于号之间的修改是其他人的修改,在明确了冲突的原因之后,我们已经知道怎么修改了,两个人的修改都是需要保留的。
OK,那就保留所有的修改,删除掉<、=和>,最后的结果如下。
小于号、等于号和大于号串是冲突标记,并不是冲突的数据,你一定要确定这些内容在下次提交之前得到删除。

root@letuknowit:/home/kris/calc/trunk# cat main.c
#include <stdio.h>
#include "add.h"
#include "sub.h"int main()
{printf("5 + 10 = %d.\n",add(5,10));printf("15 - 10 = %d.\n",sub(15,10));//kris's testprintf("kris: 12 + 28 = %d.\n",add(12,28));//sally's testprintf("sally: 60 - 33 = %d.\n",sub(60,33));return 0;
}

冲突解决了,下面的工作就是通知svn,我们已经把冲突搞定了(使用svn resolved命令),下面该你了,可以看到svn将生成的几个临时文件删除了。

root@letuknowit:/home/kris/calc/trunk# svn resolved main.c
Resolved conflicted state of 'main.c'
root@letuknowit:/home/kris/calc/trunk# ls -al m*
-rw-r--r-- 1 root root 278 2012-09-20 17:07 main.c

接下来提交代码,搞定收工。

root@letuknowit:/home/kris/calc/trunk# svn ci -m "kris add some test code"
Sending        trunk/main.c
Transmitting file data .
Committed revision 8.

svn中的冲突解决看起来非常的复杂,实则很简单,只要掌握了原理,举一反三,就可以得心应手了!
原创文章请注明转载于知蚁博客,本文地址:http://www.letuknowit.com/archives/svn-conflict-resolution
86%的同时也会看下面的内容:
SVN:修改已经提交的日志信息
svn checkout单个文件
导入文件到svn版本仓库
通过svn命令行忽略单个文件
svn changelist命令的使用

SVN:冲突解决 合并别人的修改相关推荐

  1. Git与SVN冲突解决及特性对比

    Git与SVN冲突解决 文章目录 Git与SVN冲突解决 Git与SVN对比 参考文献 https://blog.csdn.net/enlangs/article/details/44806029 当 ...

  2. linux svn 冲突解决方法

    linux svn 冲突解决方法 参考文章: (1)linux svn 冲突解决方法 (2)https://www.cnblogs.com/manhelp/p/11643851.html (3)htt ...

  3. SVN学习总结(2)——SVN冲突解决

    2019独角兽企业重金招聘Python工程师标准>>> 在我们用VS进行项目合作开发的过程中,SVN的提交控制是至关重要的,大家不可避免的都遇到过SVN冲突的问题,开发的时候,应该认 ...

  4. eclipse中svn冲突解决

    最近在和同事做项目的时候出现了冲突,冲突解决方法是这样的: 右键项目 -> Team -> 与资源库同步 2.在同步视图中选择Conflicts Mode,以便首先查看解决冲突 3.双击需 ...

  5. LINUX中SVN冲突解决办法

    svn执行up更新后,有时会出现冲突,如果需要编辑冲突,可以选择(p)postpone 稍后处理,svn会自动生成三个冲突文件,xx.cpp.maine是你自己的修改版本,其他带编号的是别人的提交版本 ...

  6. 服务器Svn 冲突解决

    1.Node remains in conflict,svn在服务器上显示冲突 解决: 经过各种搜索,给出的办法均行不通,后来发现还是stackoverflow比较diao svn revert –d ...

  7. iOS svn 冲突解决

    原则上同一组开发人员最好不要在同一文件中进行操作,但有时候必须去其他文件中进行操作,或者是误操作,如果同时多人在同一文件的同一位置修改代码,后提交的人会出现版本冲突文件,一般会有三个同样名称不同后缀的 ...

  8. svn 冲突解决办法

    在linux中 按如下操作: rm -f 冲突文件 (删除冲突文件) svn cleanup (清理) svn up (拉代码)

  9. svn提示没有设置冲突_SVN出现叹号文件冲突解决办法

    此方法是我在网上看到的,当时自己也遇到SVN文件冲突,看了后感觉还不错 ,所以收藏一下与大家分享 如下: 解决版本冲突的命令.在冲突解决之后,需要使用svn resolved来告诉subversion ...

最新文章

  1. 微软亚洲研究院副院长周明离职,将加入创新工场
  2. 设计模式-工厂模式学习(初级)
  3. html5 loader,7种基于GSAP的SVG Loader加载动画特效
  4. innodb和myisam数据类型,即在存储上有何特点和区别
  5. hdu3033---加限制条件的0-1背包
  6. 计算机基础知识的文献,四 计算机文献检索基础知识(原理、结构和功能)
  7. 前端学习(3217):prop的基本使用
  8. 10本书,搞定这门全球1000万程序员在用的编程语言
  9. mysql-电商库演练1-创建数据-基本查询练习
  10. python中backward_pytorch的梯度计算以及backward方法详解
  11. Go 语言学习总结(1)—— Go 入门简介
  12. python3 selenium ie 拒绝连接报错_python Selenium权限错误:[WinError 5]访问被拒绝
  13. 《3ds Max疯狂设计学院》——1.7节学习3ds Max的基本流程,必须要在最开始就了解...
  14. SPSS24.0输了授权码还不能用怎么破?
  15. STM32 IIC实验中关于AT24Cxx的读写
  16. spine 导出纹理_Spine 的纹理打包器(texture packer)详解
  17. 相差天数时分秒_PHP 小方法之 计算两个时间戳之间相差的日时分秒
  18. Serverless Computing Fass $ openwhisk快速部署、应用、实例
  19. Echarts 当Y轴取值存在正负值的时候,x轴文字与x轴贴合(不在底部显示)
  20. jvarkit包问题反馈:构建成功,部分方法测试失败第4类错误分析

热门文章

  1. iOS 层层推进实现代理模式
  2. Asp.Net MVC开源CMS - Orchard
  3. 面向Tableau开发人员的Python简要介绍(第2部分)
  4. 微生物 研究_微生物监测如何工作,为何如此重要
  5. 墨刀原型制作 位置选择_原型制作不再是可选的
  6. leetcode 810. 黑板异或游戏
  7. 了解如何使用Flutter构建iOS和Android应用
  8. 为什么不应该使用(长期存在的)功能分支
  9. Oracle数据库中游标的游标的使用
  10. 第二学期-第一次作业