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. jsp实现回车登录

    <body onkeydown="if(event.keyCode==13){login()}"> 内容0...... </body> 注:body里面加上 ...

  2. js获取焦点

    <input type = "text" id="football" /> 对上面获取焦点. 1.获取dom对象 var domFocus = do ...

  3. css两列自适应布局的多种实现方式及原理。

    两列布局是非常常见的需求在实际项目中,实现的方式也有很多.究其原理也都不算复杂.这里主要提出几种实现方式和原理. html页面基本布局如下代码所示: 1 <div class="mai ...

  4. iptables之LOG目标 被拦截包分析

    iptables之LOG目标 问题 在iptables的INPUT链中发现有大量未知包被拦截,这种情况就有两种可能,一是自己的某个服务的iptables端口没有打开,二是服务器正在遭受攻击 分析 这就 ...

  5. Excel里内嵌在线翻译

    本来寻思着继续写点系统运行日志跟踪技术的,但早晨哥家领导从单位打来电话,让帮助她的闺蜜搞一个excel翻译的问题,总部IT搞不定.我过去是用excel做了几年工作,却都是些数学计算,跟翻译也扯不上啊: ...

  6. 【转】Backbone使用总结

    转自  http://www.pchou.info/javascript/2014/06/26/backbone-summary-01.html 开始在项目中大规模使用backbone,一路磕磕碰碰, ...

  7. android目录介绍

  8. UIAlertController的使用

    在iOS8中,苹果对UIAlertView和UIActionSheet进行了重新的封装,成为适应性更强,灵活性更高的UIAlertController.具体使用方法如下. UIAlertControl ...

  9. Android学习地址

    Google Android官方培训课程中文版http://hukai.me/android-training-course-in-chinese/

  10. 练习ajax的时候出现这个问题 还没解决

    VM601:1 Uncaught SyntaxError: Unexpected end of JSON input  应该怎么办呢