SVN是一款集中式的代码存储工具,可以帮助多个用户协同开发同一应用程序。

但是SVN不能完全代替人工操作,有时也需要程序员自己进行沟通确认有效的代码。

下面就简单的看一下,常见的代码冲突以及解决方法。

总结起来,无非是:

  1 避免开发人员共同开发同一文件

  2 开发前需要时常更新本地代码库

修改同一文件不同位置引发的冲突

  首先看一下问题背景:

  样例场景中有连个用户:xingoo和test。他们共同开发一个程序,改程序只有一个文件,原始的代码如下:

public void Test{
System.out.println("Test!");
return 1;
}

  此时用户xingoo,修改代码第2行,修改打印语句!

public void Test{
System.out.println("Test!xingoo");
return 1;
}

  用户test,修改代码第3行,修改返回值

public void Test{
System.out.println("Test!");
return 0;
}

  此时xingoo用户先提交了代码,当test提交代码时,提示错误:

  提示用户该文件已经过期,需要先更新文件。

  此时,SVN会自动把其他用户修改的操作更新到该文件中(前提是不同用户修改的位置不同),并且保存当前用户修改的部分。

  点击更新,更新代码。

  观察代码发现,已经更新为:

public void Test{
System.out.println("Test!xingoo");
return 0;
}

  再次提交,提示成功:

  这种情况,是最简单的代码冲突样例。不同用户修改了不同位置的代码,因此只需要在提交前进行更新,就可以解决冲突。

  那么如果用户修改的是同一位置呢?

修改同一文件相同位置引发的冲突

  前面例子中,xingoo的代码当前为,版本号为9:

public void Test{
System.out.println("Test!xingoo");
return 1;
}

  test的代码为,版本号为10:

public void Test{
System.out.println("Test!xingoo");
return 0;
}

  此时test的代码时最新版本的。

  如果此时,xingoo用户,想要修改 return 1; 部分的代码,提交时会发生什么呢?

  再次提交遇到错误:

  点击OK后,提示更新或取消,点击更新,更新代码!

  再次报错,提示:文件存在冲突!

  此时观察文件夹发现,多了3个文件

  分别打开这3个文件:

  test.txt中的内容,该文件记录了冲突的详细内容,

  其中<<<<<<.mine到====之间为当前用户修改的内容;

  ====到>>>>>.r10为版本库中的内容:

public void Test{
System.out.println("Test!xingoo");
<<<<<<< .mine
return 2;
=======
return 0;
>>>>>>> .r10
}

  test.txt.mine 记录当前用户修改后的文件内容快照

public void Test{
System.out.println("Test!xingoo");
return 2;
}

  test.txt.r9 记录当前用户修改前,版本库中的内容快照

public void Test{
System.out.println("Test!xingoo");
return 1;
}

  test.txt.r10 记录当前版本库中内容快照

public void Test{
System.out.println("Test!xingoo");
return 0;
}

  通过这四个文件就可以很快速的发现,哪里有冲突。

  至于如何修改,这里推荐:

  直接拷贝mine文件,然后把r10文件的r10后缀去掉,进行更新。更新后,对比mine中的内容在进行修改。

  也可以直接与其他人员进行协商沟通;更新版本库中的内容。

通过TortoiseSVN进行代码对比

  有时候,需要对比文件的历史修改内容,可以直接在该文件上右键,选择Diff

  该操作会自动对比代码库中文件的内容。

通过TortoiseSVN进行版本对比

  也可以通过查看文件的历史版本,来对比代码:

  选择Show log菜单

  在弹出对话框中,上面列出最近的几个版本;可以直接双击下方蓝色的文件名称,就可以直接使当前文件与该版本的文件进行对比。

参考

  【1】《版本控制之道》

  【2】慕课网,SVN版本控制:http://www.imooc.com/learn/109

【SVN多用户开发】代码冲突&解决办法的更多相关文章

  1. 上传svn失败,代码冲突解决方式

    1,修改文件后提交不了,大多是因为版本不一致造成的.更新一下,不产生冲突的情况,就可以提交了. 2,更新文件,如果出现冲突的情况,打开冲突文件test.php会看到类似以下的内容 <<&l ...

  2. Git应用--04遇到冲突解决办法git stash(转载)

    git merge git pull时候遇到冲突解决办法git stash https://www.cnblogs.com/juandx/p/5362723.html 在使用git pull代码时,经 ...

  3. svn版本分支及冲突解决笔记

    转载:http://blog.csdn.net/xuguiyi100/article/details/51966557 分支合并主干示例 1.主干工程右键选择merge合并下一步 2.选中merge ...

  4. 【小梅哥SOPC学习笔记】SOPC开发常见问题及解决办法集锦

    SOPC开发常见问题及解决办法集锦 一.Symbol 'NULL' could not be resolved 近期在评估使用NIOS II处理器进行项目的开发,我使用的软件是Quartus II 1 ...

  5. Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法

    Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...

  6. SVN操作出现locked错误解决办法

    SVN操作出现locked错误解决办法:在SVN中执行 commit 操作时,在更新过程中,中断过,或者因为其他原因导致SVN 出现 locked 异常. 解决办法:1. 选中出现异常的文件,右键 - ...

  7. 记录一次gitlab版本回退以及代码冲突解决流程

    版本回退 git clone -b 分支名 项目地址 克隆需要回退的分支代码 git pull    保证代码提交记录最新 git log --pretty=oneline    以行的形式展示提交记 ...

  8. SVN提交代码冲突解决方法总结

    在近期svn提交代码时遇到多种情况的问题,现做一个解决办法的总结如下: 插播一条:idea下被svn版本控制各类文件的颜色区分,红棕色,未加入版本控制:绿色,已经加入控制暂未提交:蓝色,加入,已提交, ...

  9. git学习之冲突解决办法

    1.如果本地项目和远程服务器的同一文件都有改动,那么就会产生冲突,导致git pull 失败,报错见下. 解决办法:先执行git stash指令,暂存当前的改动状态,再执行git pull指令,就可以 ...

随机推荐

  1. 用eclipse搭建SSH(struts+spring+hibernate)框架

    声明: 本文是个人对ssh框架的学习.理解而编辑出来的,可能有不足之处,请大家谅解,但希望能帮助到大家,一起探讨,一起学习! Struts + Spring + Hibernate三者各自的特点都是什 ...

  2. windows8 APP开发的远程调试

    Win8上面的App开发远程调试: 这里先简单介绍一下对于win8的app的远程调试,环境设置:开发机器装有vs2012的win8系统,目标机器为虚拟机,预装win8系统. 1. 在虚拟机上安装vis ...

  3. being词典案例分析

    一.调研评测: 1.软件bug: 1.输入空格分号回车之后并不给用户报错,说明他的异常处理机制有问题. 2.对于中文的很多口头语和方言,并不能给出翻译或者说,也并没有给出网络搜索后的结果. 3.添加生 ...

  4. 【转】IE劫持原理 BHO

    为什么"浏览器劫持"能够如此猖狂呢?放眼众多论坛的求助贴,我们不时可以看到诸如"我的IE被主页被改了,我用杀毒工具扫了一遍都没发现病毒,我把主页改回自己的地址,可是一重启 ...

  5. PYTHON学习之路_PYTHON基础(1)

    学习内容: 1.Python介绍 2.Python程序初接触和变量 3.Python用户交互 4.Python数据类型 5.Python循环if...(elif)...else 6.Python循环w ...

  6. easyui 》 radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中

    获取一组radio被选中项的值var item = $('input[@name=items][@checked]').val();获取select被选中项的文本var item = $(" ...

  7. maven创建 web项目

    Maven教程初级篇03: 创建Web应用 1. 使用如下命令创建Web应用: 代码 mvn archetype:generate -DgroupId=net.jianxi.tutorials.mav ...

  8. python发邮件实现Redis通知功能

    # -*- coding:utf-8 -*- import smtplib #import os from email.mime.text import MIMEText from email.mim ...

  9. CrossOver 13.0 发布,Windows 模拟器

    允许在 Linux 和 OS X 平台运行 Win32 程序的 CrossOver 套件发布 13.0 版本,带来了完全重构的 3D 处理流程,将大幅度提高游戏性能. Linux 平台相关变化有: 带 ...

  10. SQL入门经典(四)之创建和修改数据表

    本章主要讲如何使用脚本创建数据库:如何使用脚本创建表:如何删除对象和修改对象. CREATE 语句:CREATE <object type> <onject name> 创建数 ...