svn conflict问题解决办法

时间:2022-09-23 13:32:34

转自:http://www.cnblogs.com/aaronLinux/p/5521844.html

目录

1. 同一处修改文件冲突

1.1. 解决方式一

1.2. 解决方式二

1.3. 解决总结

2. 手动解决冲突

2.1. 冲突背景1

2.2. 冲突背景2

2.3. 冲突解决

1. 同一处修改文件冲突

开发人员都知道代码管理工具是开发中一个必不可少的工具,这里也不废话详细介绍了。不管你个人喜欢git还是svn还是其他,但还有一大部分公司在使用svn做代码管理工具。这里详细介绍下SVN提交文件时冲突问题的解决方式。

  假设A、B两个用户,他们分别从svn服务器中检出了test1.txt文件,此时A、B、服务器三个地方的test1.txt的版本都是13(我测试环境的当前svn赋予的版本号)。A、B文件的内容如下图(左A右B):

  ·

  svn conflict问题解决办法

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

  svn conflict问题解决办法

  此时B用户和服务器的test1.txt的版本都变为14,只有A用户的test1.txt的版本还为13。接下来A用户添加一句“aa”,然后提交

  svn conflict问题解决办法

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

  svn conflict问题解决办法

  接下来就是我们要解决的问题了,解决方法分为以下两种方式。第一种方式:提交失败后直接选择revert,省去了解决冲突问题;第二种方式:提交失败后选择更新文件,这时会有冲突问题。详细介绍如下:

1.1. 解决方式一

  A放弃自己修改的内容,进行Revert操作,使其test1.txt成为13版本的最初内容。然后update使其test1.txt成为14版本,再在14版本上修改提交。操作如下图:

  svn conflict问题解决办法

  ==》

  svn conflict问题解决办法

  ==>然后再修改提交

1.2. 解决方式二

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

  svn conflict问题解决办法

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

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

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

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

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

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

  svn conflict问题解决办法

  接下来说一下如何解决。对于源代码文件或其他的纯文本文件,我们可以将上图的A用户test1.txt的内容整理下,使其满足条件,然后 选择svn conflict问题解决办法

,这时test.txt.mine、test1.txt.r13、test1.text.r14将会消失。用户A就可以顺利提交了。但是,如果test1.txt是一个非纯文本文件,比如excel,这时的test1.txt将没法手动合并了,不得不放弃自己的修改。可以在test1.txt上右键选择svn conflict问题解决办法,消除掉test.txt.mine、test1.txt.r13、test1.text.r14这三个文件。(点击Resolve不会更改test1.txt以及服务器端的内容,仅仅是消除了那几个文件。)此时的test1.txt文件是可以提交的,它对应的是服务器的最新版本,即14版本(因为这是svn将服务器最新版本14和A用户修改内容合并后的结果)。但这是svn帮我们合并的,是不合法的文件。我们可以右键然后选择svn conflict问题解决办法,然后test1.txt就会变成14版本,A用户的修改没有了,A、B、服务器的test1.txt都成为了14版本。如下图:

  svn conflict问题解决办法

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

1.3. 解决总结

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

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

  例如,如果sally修改了一个文件sandwich.txt,而harry也刚刚修改了这个文件的相同位置并提交到服务器。那么sally在做这个文件的update操作的时候会得到三个额外的文件sandwich.txt.mine、sandwich.txt.r1、sandwich.txt.r2。并且在提交的时候会遭到服务器的拒绝,因为这个文件的冲突问题还没有得到解决。要解决这个冲突,可以选择:

  a.手工合并SVN冲突文件(检查和修改文件中的冲突标志)。

  b.用一个临时文件(三个中的一个)覆盖你的工作文件。

  c.运行svn revert来放弃所有的修改。

  一旦解决了你的冲突,需要通过命令svn resolved让subversion知道并删除三个临时文件。这时才可以提交。

2. 手动解决冲突

2.1. 冲突背景1

  下面再说说手工合并SVN冲突。开始的时候让人觉得害怕,但做一段时间之后,就觉得不那么烦人了。

  看看如下文本:

svn conflict问题解决办法
 1   Mayonnaise
2   Lettuce
3   Tomato
4   Provolone
5   <<<<<<<.mine
6   Salami
7   Mortadella
8   Prosciutto
9   =======
10   Sauerkraut
11   GrilledChicken
12   >>>>>>>.r2
svn conflict问题解决办法

  CreoleMustard一连串的大于、小于、等于号是SVN冲突标记,这些数据得全部删除才可以提交。其中,

1 <<<<<<<.mine
2 Salami
3 Mortadella
4 Prosciutto
5 =======是你在冲突区里面做的修改。
1 Sauerkraut
2 GrilledChicken
3 >>>>>>>.r2 是别人在冲突区做的修改。

在SVN冲突区中,或许你需要和你的同事沟通来安排冲突区的文本内容,如果是程序代码,你需要和同事商量一下,中间的这段代码到底应该是什么样子的。

  所有冲突区得到合理的解决之后,你就可以提交你的文件了。

  版本冲突原因:

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

  版本冲突现象:

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

  假设文件名是kingtuns.txt

  对应的文件名分别是:

1   kingtuns.txt.r101
2   kingtuns.txt.r102
3   kingtuns.txt.mine
4   kingtuns.txt。

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

2.2. 冲突背景2

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

  svn conflict问题解决办法

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

  svn conflict问题解决办法

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

  svn conflict问题解决办法

  svn conflict问题解决办法

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

  svn conflict问题解决办法

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

  svn conflict问题解决办法

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

2.3. 冲突解决

  解决冲突有三种选择:

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

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

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

  C、手动解决步骤如下:

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

  svn conflict问题解决办法

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

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

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

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

  svn conflict问题解决办法

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

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

  svn conflict问题解决办法

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

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

  svn conflict问题解决办法

  6、 冲突解决

  svn conflict问题解决办法

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

  svn conflict问题解决办法

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

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

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

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

svn conflict问题解决办法的更多相关文章

  1. idea使用svn出现问题解决办法

    idea一直在refreshing vcs history:解决办法:      有些模块中的版本信息是错的,如拷贝过来的代码,其远程仓库是不存在的,      因此要删除这些模块中的.svn文件夹 ...

  2. svn冲突问题解决办法

    经常有人会说,树冲突是很难解决的一类冲突,其实一旦了解了其原理,要解决也不难.先回顾下对于树冲突的定义.     树冲突:当一名开发人员移动.重命名.删除一个文件或文件夹,而另一名开发人员也对它们进行 ...

  3. svn提交时提示 Aborting commit&colon; remains in conflict 解决办法,更改svn服务地址

    TortoiseSVN客户端如何更改新的URL 问题: 我们的服务器换了新的URL地址,这时候我们本地的SVN访问帐号和地址就要重新定义了. 解决步骤: 1:重新定义SVN的URL,右键(Tortoi ...

  4. Windows XP系统下添加任务计划常出现问题解决办法

    Windows XP系统下添加任务计划常出现问题解决办法 计划任务就是让电脑在指定的时间内执行指定的动作(计划动作),这些动作可以是一个程序,也可以是一个批处理,但是至少是可以运行的(通俗一些就是双击 ...

  5. svn conflict

    安装svn apt-get install subversion 当前两个人都更新版本为version1 A修改了monitor.txt文件 提交后版本为version2 B也修改了monitor.t ...

  6. Open Sans字体兼容问题解决办法&lbrack;font-face&rsqb;

    参考:http://www.tantengvip.com/2014/11/open-sans/ 1.font-face使用方法 font-face是CSS3中的一个模块,主要是把自定义的Web字体嵌入 ...

  7. ASP&plus;Access UTF-8 网页乱码问题解决办法

    用ACCESS数据库和ASP做网站时用UTF-8编码有时会出现乱码,再者网页出错或者刷新页面后就是乱码,如果数据库取值乱码在开头加上<%@LANGUAGE="VBSCRIPT&quot ...

  8. 易通电脑锁2007V6&period;3&period;3&period;3无法卸载问题解决办法

    易通电脑锁2007V6.3.3.3无法卸载问题解决办法把原版文件拷贝回去.bat@echo offcolor 2Fecho 该批处理会把易通电脑锁2007版原文件拷贝回去,解决易通电脑锁卸载时出现的运 ...

  9. 技术贴 本地代码与svn关联教程 svn upgrade问题解决

    背景: 以前从SVN上下载了项目源码,可是SVN抽风了,死活不显示我修改了哪些代码 自己从别人机器上搞来了项目源码,没有svn版本控制,但是svn上面有这些源码 如上两种,我想关联一下,把我本地的代码 ...

随机推荐

  1. Response&period;Redirect引起的性能问题分析

    现象: 最近做的一个系统通过单点登录(SSO) 技术验证用户登录.用户在SSO 系统上通过验证后,跳转到该系统的不同模块.而跳转的时间一直维持子啊几分钟左右. 分析步骤: 在问题复现时抓取Hang d ...

  2. Java虚拟机9:Java类加载机制

    前言 我们知道我们写的程序经过编译后成为了.class文件,.class文件中描述了类的各种信息,最终都需要加载到虚拟机之后才能运行和使用.而虚拟机如何加载这些.class文件?.class文件的信息 ...

  3. HTML5语义化标签

    在HTML5中最基础也是比较好理解的也就是语义化标签了,,顾名思义语义化也就是可以直接读懂的标签~,这样我们在项目开发过程中不但自己不会因为5花8门的标签命名而伤脑筋,跟同事对接项目也会节约很多时间~ ...

  4. webix源码阅读

    最近在用webix,需要一个类似九宫格的监控界面.自带的控件里没有,于是萌生出做一个Custom Component的需求.不过webix关于自定义控件的文档比较少,官方只有一篇<Creatin ...

  5. 【BZOJ】1295&colon; &lbrack;SCOI2009&rsqb;最长距离(spfa&plus;暴力)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1295 咳咳..此题我不会做啊..一开始认为是多源,可是有移除物品的操作,所以不行. 此题的思想很巧妙 ...

  6. Silverlight编程模型

    Silverlight支持Javascript API编程模型和托管API编程模型这两种编程模型,它们的基本作用都是用于XAML界面文件中的XAML对象,基于托管API编程的XAML应用程序是通过x: ...

  7. 用C&num;来查看电脑硬件和系统信息

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用C#来查看电脑硬件和系统信息.

  8. YII学习&comma;实现基于数据库的后台登录&comma;用户体系&period;

    上次研究Yii框架写到了要完成用户登陆系统.这次接着上次的写. 参考官方权威指南和参考手册,外加各种博客文章.历尽千辛万苦,数遍天上滴星星.完成了后台用户登录.这里用到了YII框架的 CUserIde ...

  9. 开发使用混合式Winform模块

    开发使用混合式Winform模块 1.Winform数据访问模式定义 传统的Winform程序模块:用于传统的数据库通讯获取数据,这种方式获取数据,方便快捷,可以用于常规的业务系统的场景,用于单机版软 ...

  10. JAVA基础-JDBC(一)

    一.JDBC的简介 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,由与各种数据库都有着一套自己的规范,JAVA对其操 ...