1.SVN产生冲突的原因:

有时候你从仓库中更新文件是会发生冲突,当两个或者更多的开发人员多同一个的某几行做了修改,就会产生冲突。因为Subversion对你的项目一无所知,它会把冲突留给开发人员来解决。只要冲突产生了,你就应该打开有问题的文件,然后找到以“<<<<<<<”开头的那几行,有冲突的区域会被下面这样标示:

<<<<<<< filename

your changes

=======

code merged from repository

>>>>>>> revision

另外对每个有冲突的文件,Subversion都会在你的目录中放三个另外的文件:

filename.ext.mine

这个文件是更新工作副本之前,冲突文件在你的工作副本中原来的样子。其中没有任何冲突标记。

filename.ext.rOLDREV

这个文件是版本号为OLDREV时的文件。也就是你做修改之前最后一次取出的文件。

filename.ext.rNEWREV

这是你更新时Subversion客户端从服务器收到的最新版本的文件。他是仓库的最新版本。

你可以在菜单中选择Edit Conflict来打开一个合并工具或冲突编辑器,或者用其他编辑器来解决这个冲突。你必须决定这些代码到底该是什么样子,做一些必要的修改,然后保存文件。

2.解决方案:

在解决冲突之后,需要使用svn resolved来告诉subversion冲突解决,这样才能提交更新。

冲突发生时,subversion会在WorkCopy中保存所有的目标文件版本(上次更新的版本,当前获取的版本--即别人提交的版本,自己更新的版本,目标文件)

假设有A,B两个用户,他们分别从SVN中检出test1.txt文件,此时A,B,服务器三地方的版本都是text1.txt的版本都是13(这是测试版本)

A、B文件的内容如下图(左A右B):

接下来B用户添加一句话,并提交,如下图

此时B用户和服务器的test1.txt的版本都变为14,只有A用户的test1.txt的版本为13,接下A用户添加一句话‘aa’,然后提交:

由于A用户是在13版本上的修改,而服务器已经是14版本了,所以会提交失败

接下来就是我们要解决的问题了,解决方案分为以下两种方式:第一种方式:提交失败后直接revert(回滚),省去了解决冲突问题。第二种方式:提交失败后选择更新文件,这是会有冲突问题。

第一种方式:

A放弃自己修改的内容,进行revert操作,使其test.txt1成为13版本的最初内容,然后update使test.txt1成为14版本,然后再在test.txt1的14版本上修改提交。

操作如下图:

第二种方式:

因为版本过时,提交失败后。A用户直接选择更新操作,结果如下图所示:

(这里注明一下:不要被文件的显示图标所惑,这是其他软件对它做了关联导致,没啥影响)

这里详细说一下产生冲突后的几个文件:

test1.txt.mine---这个文件是A用户在13版本上做了修改要提交的文件。它的内容是:text1.txt的13版本内容+A修改后的内容。

test1.txt.r13---这个文件A用户最初的13版本的test1.txt。它的内容是:text1.txt的13版本内容

test1.txt.r14----这个文件是SVN服务器中的test1.txt的最新版本,这里既是B用户提交后的14版本。它的内容是:13版本的内容+B用户修改的内容

test1.txt----由于A用户直接选择了更新,此文件就是SVN将最新版本14与A用户修改 合并后的文件。它的内容如下:

接下来说一下如何解决,对于源代码文件或则其他纯文本文件,我们可以将上图的A用户的test1.txt的内容整理一下,使其满足条件,然后选择,这时的test.txt.mine、test1.txt.r13、test1.text.r14将会消失。用户A就可以顺利提交了,但是,如果test1.txt是一个非纯文本文件,比如Excel,这时的test1.txt将没法手动合并了,不得不放弃自己的修改.可以在test1.txt上右键选择消除掉test.txt.mine、test1.txt.r13、test1.text.r14这三个文件。(点击Resolve不会更改test1.txt以及服务器端的内容,仅仅是消除了那几个文件。)此时的test1.txt文件是可以提交的,它对应的是服务器的最新版本,即14版本(因为这是SVN将服务器的最新版本与A用户修改内容后合并的结果)。但这是SVN帮我们合并的,是不合法的文件。我们可以右键然后选择,然后test1.txt就会变成14版本,如下图:

接下来A用户就可以进行在修改提交了。

总结:

对于纯文本文件因版本过时提交失败的情况,我们可以选择更新一下,然后打开”自己的修改和服务器最新版合并“后的文件(如上文发生冲突时的test1.txt文件),进行手动合并,处理好后选择resolve然后提交。

对于非纯文本文件因版本过时提交失败时,我们只能牺牲一下自己,选择,然后更新到服务器最新版本,再修改提交

例如,如果sally修改了一个文件sandwich.txt,而harry也刚刚修改了这个文件的相同位置并提交到服务器。那么sally在做这个文件的update操作的时候会得到三个额外的文件sandwich.txt.mine、sandwich.txt.r1、sandwich.txt.r2。并且在提交的时候会遭到服务器的拒绝,因为这个文件的冲突问题还没有得到解决。要解决这个冲突,可以选择:
a.手工合并SVN冲突文件(检查和修改文件中的冲突标志)。
b.用一个临时文件(三个中的一个)覆盖你的工作文件。
c.运行svnrevert<filename>来放弃所有的修改。
一旦解决了你的冲突,需要通过命令svnresolved让subversion知道并删除三个临时文件。这时才可以提交。
下面再说说手工合并SVN冲突。开始的时候让人觉得害怕,但做一段时间之后,就觉得不那么烦人了。
看看如下文本:
Mayonnaise
Lettuce
Tomato
Provolone
<<<<<<<.mine
Salami
Mortadella
Prosciutto
=======
Sauerkraut
GrilledChicken
>>>>>>>.r2
CreoleMustard一连串的大于、小于、等于号是SVN冲突标记,这些数据得全部删除才可以提交。其中,
<<<<<<<.mine
Salami
Mortadella
Prosciutto
=======是你在冲突区里面做的修改。
Sauerkraut
GrilledChicken
>>>>>>>.r2
是别人在冲突区做的修改。
在SVN冲突区中,或许你需要和你的同事沟通来安排冲突区的文本内容,如果是程序代码,你需要和同事商量一下,中间的这段代码到底应该是什么样子的。
所有冲突区得到合理的解决之后,你就可以提交你的文件了。

版本冲突原因:

假设A、B两个用户都在版本号为100的时候,更新了kingtuns.txt这个文件,A用户在修改完成之后提交kingtuns.txt到服务器,这个时候提交成功,这个时候kingtuns.txt文件的版本号已经变成101了。同时B用户在版本号为100的kingtuns.txt文件上作修改,修改完成之后提交到服务器时,由于不是在当前最新的101版本上作的修改,所以导致提交失败。

版本冲突现象:

冲突发生时,subversion会在当前工作目录中保存所有的目标文件版本[上次更新版本、当前获取的版本(即别人提交的版本)、自己更新的版本、目标文件]。

假设文件名是kingtuns.txt

对应的文件名分别是:

kingtuns.txt.r101

kingtuns.txt.r102

kingtuns.txt.mine

kingtuns.txt。同时在目标文件中标记来自不同用户的更改。

版本冲突解决:

场景:

1、现在A、B两个用户都更新kingtuns.txt文件到本地。

2、文档中原始文件内容如下:

3、A用户修改文件,添加内容“A用户修改内容”完成后提交到服务器

4、B用户修改文件,添加内容“B用户修改内容”完成后提交到服务器

B用户提交更新至服务器时提示如下:

B用户将文件提交至服务器时,提示版本过期:首先应该从版本库更新版本,然后去解决冲突,冲突解决后要执行svn resolved(解决),然后在签入到版本库。在冲突解决之后,需要使用svn resolved(解决)来告诉subversion冲突解决,这样才能提交更新。

解决冲突有三种选择:

A、放弃自己的更新,使用svn revert(回滚),然后提交。在这种方式下不需要使用svn resolved(解决)

B、放弃自己的更新,使用别人的更新。使用最新获取的版本覆盖目标文件,执行resolved filename并提交(选择文件—右键—解决)。

C、手动解决:冲突发生时,通过和其他用户沟通之后,手动更新目标文件。然后执行resolved filename来解除冲突,最后提交。

解决步骤如下:

1、  在当前目录下执行“update”(更新)操作

2、  在冲突的文件上(选中文件--右键菜单—TortoiseSVN—Edit conflicts(解决冲突)),出现如下窗口

Theirs窗口为服务器上当前最新版本

Mine窗口为本地修改后的版本

Merged窗口为合并后的文件内容显示

3、  如果要使用服务器版本,在Theirs窗口选中差异内容,右键,选择Use this text block(使用这段文本块)。

同理如果要使用本地版本,在协商后,在Mine窗口右键,选择Use this text block(使用这段文本块)。

4、  修改完成后,保存kingtuns.txt文件内容。

5、  在B用户的冲突目录下,选中文件--右键菜单—TortoiseSVN—Resolved(解决)。会列出冲突的文件列表,如果确认已经解决,点OK。

6、  冲突解决

7、提交解决冲突后的文件。

如何降低冲突解决的复杂度:

1、当文档编辑完成后,尽快提交,频繁的提交/更新可以降低在冲突发生的概率,以及发生时解决冲突的复杂度。

2、在提交时,写上明确的message,方便以后查找用户更新的原因,毕竟随着时间的推移,对当初更新的原因有可能会遗忘

3、养成良好的使用习惯,使用SVN时每次都是先更新,后提交。每天早上打开后,首先要从版本库获取最新版本。每天下班前必须将已经编辑过的文档都提交到版本库。

SVN解决冲突Resolving Conflicts相关推荐

  1. linux上SVN解决冲突命令

    svn resolve --accept working abc.c (这条命令会删除abc.c.mine abc.c.r1234 abc.c.r1235等文件) 注意,此处的accept前是双连字符 ...

  2. SVN 解决冲突问题

    SVN冲突出现场景 如今是一个团结协作的时代,开发一个系统,往往会多人协作共同完成.版本管理是必不可少的,常用的软件有Git,SVN等.今天说一下,SVN管理版本时,如果出现冲突后,如何快速解决冲突. ...

  3. SVN解决冲突的办法

    解决版本冲突的命令.在冲突解决之后,需要使用svn resolved来告诉subversion冲突解决,这样才能提交更新.冲突发生时,subversion会在Work Copy中保存所有的目标文件版本 ...

  4. 【SVN】svn解决冲突

    1.预测冲突 svn status -u 预测svn update命令将从服务器带来的更新. 2.先更新 $ svn update U INSTALL G README C bar.c U和G没必要关 ...

  5. svn解决冲突Postpone , Accept base, Accept incoming, Reject incoming, Accept incoming for conflictsu区别

    Postpone(推迟):暂时不处理冲突,先将其标记为未解决状态,以便日后再次进行处理. Accept base(接受基础版本):使用服务器上的基础版本,放弃本地修改,将其标记为已解决状态. Acce ...

  6. linux下svn解决冲突

    1. 使用svn status + 文件路径+文件名 查看文件或目录的状态(该状态可自行进行百度),属性状态为'C'的表示,改文件或目录处于冲突状态 2. 使用svn resolve --accept ...

  7. SVN解决冲突命令resolve和resolved

    使用如下命令解决冲突 svn resolve index.html 手工编辑修复,而不是命令解决冲突,需要执行如下命令通知SVN服务器冲突已解决 svn resolved index.html 注意一 ...

  8. SVN解决冲突的几种情况

    SVN是非常实用也好用的版本管理工具,但不是万能的,有时候还需要你手动解决. 一般在你准备提交一个新版本时,首先update一遍,有时候update完之后发现跟本地版本有冲突,这时候,在有冲突文件的地 ...

  9. svn解决冲突,storyboard打不开怎么办

    提交SVN的时候,如果有冲突,解决了提交自然是再好不过.但是如果手贱直接点击了 resolve 然后就提交了,就会发生工程打不开的情况. 解决办法:在svn提交界面,打开工程文件,在 .xcode.x ...

最新文章

  1. python基础练习(八)
  2. 2018.4.13 用java配置/生成Xml文件 结合IO流知识点
  3. 用CRT查找内存泄漏
  4. 机器学习003-Kernel
  5. python 外部程序 交互_使用Python与其他程序交互
  6. HDLBits答案(19)_Verilog有限状态机(6)
  7. 如何用计算机绘图画图,2018年《计算机绘图》考试试题及答案【完整版】.doc
  8. 【Flink】Flink RecordWriterOutput pushToRecordWriter InterruptedException
  9. UML--类之间的五种关系
  10. 三星android webview,[转]三星GS4(Android 4.3)上webview crash问题
  11. [已解决] org.hibernate.HibernateException:未配置CurrentSessionContext
  12. Jeecg-Boot前端部署
  13. 化妆品级羧甲基纤维素钠(CMC)-市场现状及未来发展趋势
  14. 十沣科技TF-Dyna不亚于国际主流商业软件 应用领域广泛
  15. 今日头条18校招第一批算法笔试
  16. 计算机网络域名解析,域名解析是什么意思?
  17. python--lintcode109.数字三角形(动态规划)
  18. ThinkPad P52鲁大师测试
  19. 50hz 60hz 级联 陷波器_自适应陷波器级联神经网络抗干扰算法
  20. Error creating bean with name ,Unsatisfied dependency expressed through field

热门文章

  1. matlab多项式多个值代入求值,[转载]Matlab 解惑之——多项式运算
  2. 稀疏矩阵求解库详解 UMFPACK
  3. Windows串口通信有关的MSComm控件
  4. Android 解决大字体模式下页面变形的问题
  5. 【html字体放大布局不会受影响变形】
  6. AccessController.doPrivileged
  7. D3.js绘制树形图
  8. 该计算机不支持更改权限,不能删除文件,也不能修改文件权限. 解决方法
  9. 笔记本加装内存条步骤
  10. Teigha .dwg文件开发——从零开始