上一篇博客我们分享了新增需求的确定思想《站在全局看问题》。今天我们来分享项目开发中SVN冲突的解决经验:SVN冲突和处理!

引言

开发过项目的人都知道,公司开发一个项目都会使用到版本号控制工具,版本号控制工具非常多,比方Clear case,CVS,Visual
SourceSafe,SourceAnywhere ,StarTeam,SVN,CVS,GIT等等,有的是元老级开发工具,有的是后起之秀,各种版本号,百花齐放,这篇博客我们将要谈到的则是经常使用版本号控制工具:SVN的冲突和处理。

实例


1.冲突产生

如果A、B两个用户都在版本号号为1000的时候,更新了practice.txt这个文件,A用户在改动完毕之后提交practice.txt 到server,这个时候提交成功,然后practice.txt文件的版本号号已经变成1001了。同一时候B用户在版本号号为1000的practice.txt文件上作改动,改动完毕之后提交到server时,因为不是在当前最新的1001版本号上作的改动,所以导致提交失败。

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

(1)如今A、B两个用户都更新practice.txt文件到本地。

(2)文档中原始文件内容例如以下:

(3)A用户改动文件,加入内容“A用户改动-提交”完毕后提交到server

(4)B用户改动文件,加入内容“B用户改动-提交”完毕后提交到server

(5)B用户提交更新至server时提演示样例如以下:

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

2.冲突处理

方法一:放弃自己的更新,使用svn Revert(回滚),然后提交。



    当使用svn revert时不须要再用svn resolved来删除暂时文件了,由于撤销会恢复全部的文件到改动前,除了已删除的文件。

方法二:放弃自己的更新,使用别人的更新。使用最新获取的版本号覆盖目标文件,运行resolved filename并提交(选择文件—右键—解决);

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

(1)手工合并冲突文件:当查看了详细出冲突的文件后,能够打开该文件,找到冲突的标志。

      Top piece of bread

      Mayonnaise

      Lettuce

      Tomato

      Provolone

      <<<<<<< .mine

      Salami

      Mortadella

      Prosciutto

      =======

      Sauerkraut

      Grilled Chicken

      >>>>>>> .r2

      Creole Mustard

      Bottom piece of bread

      小于和大于符号之间的就是冲突的地方,假设有能力在改动完文件而且删除冲突标志之后,进行svn resolved来删除三个暂时文件

      注:假设改动时不是非常明确,能够參考冲突时的三个文件

 

    (2)复制某一工作文件(一般用的不是非常频繁):假设仅仅是希望取消本次的改动,你可拷贝svn为你生成的文件替换你的工作拷贝

      $ svn update

      C practice.txt

      Updated to revision 2.

      $ ls
practice.*

     
practice.txt
practice.txt.mine
practice.txt.r2
practice.txt.r1

      $ cp
practice.txt.r2
practice.txt(这里r2是版本号库里你此次更新前的版本号文件)

      $ svn resolved
practice.txt(用来删除三个暂时文件)

OK!冲突解决!

提交更新!

总结

有时候冲突是不可避免的,可是我们能够尽量减少冲突的复杂度,详细解决方案有:

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

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

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

项目优化经验分享(六)SVN冲突和处理的更多相关文章

  1. 项目优化经验分享(八)TeamLeader经验总结

    引言 通过前面的七篇博客.我把自己在项目优化过程的经验进行了分享,今天这篇博客,作为一个总结,就来讲讲作为一个TeamLeader,在项目管理中遇到的问题和解决经验! 正文 问题一:团队之间怎么沟通? ...

  2. Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)

    Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)    转 https://blog.csdn.net/lhl1124281072/article/details/800 ...

  3. Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理

    Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理 2017年01月04日 08:52:12 阅读数:18366 基于Lucene检索引擎我们开发了自己的全文检索系统,承担起后台PB ...

  4. Unity MMORPG游戏优化经验分享

    https://mp.weixin.qq.com/s/thGF2WVUkIQYQDrz5DISxA 今天由Unity技术支持工程师高岩,根据实际的技术支持工作经验积累,分享如何对Unity MMORP ...

  5. 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享四:部署到阿里云

    框架: SpringBoot+Mybatisplus+Shiro 简单介绍:关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍 阿里云开放必要端口,mysql与t ...

  6. 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享三:问题2

    框架: SpringBoot+Mybatisplus+Shiro 简单介绍:关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍 搜索框是该项目重要的一环,由于涉及 ...

  7. 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享二:问题1

    框架: SpringBoot+Mybatisplus+Shiro 简单介绍:关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍 添加时,如果失败,不能正确跳转 c ...

  8. Unite Europe案例项目《影子战术》层级优化经验分享

    http://forum.china.unity3d.com/thread-25087-1-9.html 在Unite Europe 2017的Keynote主题演讲中,我们为大家分享了将主机游戏&l ...

  9. Unity技术支持团队性能优化经验分享

    https://mp.weixin.qq.com/s?__biz=MzU5MjQ1NTEwOA==&mid=2247490321&idx=1&sn=f9f34407ee5c5d ...

随机推荐

  1. a标签阻止跳转的方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. MFC的最大化,最小化,关闭

    最大化.最小化和关闭按钮是窗口中最主要的元素.首先要说明,说他们是按钮其实是不准确的,按钮是一种窗口,而这三个组件根本就不是窗口,而是一个窗口常见的组成部分.出于习惯的原因,这里还是称呼他们为按钮. ...

  3. 倒计时IE10+

    直接上代码,dome 里边有我做的列表倒计时(多个同时倒计时)下面是我做的例子,颜色可以自己设置的 <p name="daojishi" style="width: ...

  4. Identifiers

    Identifier An identifier is an arbitrarily long sequence of digits, underscores, lowercase and upper ...

  5. BZOJ 3401: [Usaco2009 Mar]Look Up 仰望( 单调栈 )

    n <= 105 , 其实是10 ^ 5 ....坑...我一开始写了个模拟结果就 RE 了.. 发现这个后写了个单调栈就 A 了... ---------------------------- ...

  6. Linux 开放服务端口

    CentOS 6.5上安装Tomcat 服务器,需要开放服务端口,供其他计算机访问部署在Tomcat中的Web应用.下面是开放端口的方法. 我知道的方法有两种.下面以开放8080端口为例. 方法一:命 ...

  7. d3.js入门1:安装配置

    D3 是当前流行的数据可视化工具,通过本文能有对 D3 有一个初步认识. 1. D3 是什么 D3 的全称是(Data-Driven Documents),顾名思义可以知道是一个被数据驱动的文档.听名 ...

  8. Java -- WeakHashMap

    一.引言 Java中的引用类型由四种情况,强引用.软引用.弱引用.虚引用.关于这些的介绍可以参见鄙人另外一篇博文.                                           ...

  9. QT 静态编译后中文可能会出现乱码

    QT 静态编译后中文可能会出现乱码.这是因为处理文字编码的 libqcncodecs 库是以 plugin 形式存放在 QT 静态编译目录/plugs/codecs/libqcncodecs.a 文件 ...

  10. Python 2.7 学习笔记 列表的使用

    同其它编程语言一样,python也提供了丰富的数据结构,以方便数据的处理.本文介绍两种最基本的数据集合,列表和元组的使用. 一.列表使用介绍 可以理解为一个有序的序列.其使用方式举例如下: list= ...