【SVN多用户开发】代码冲突&解决办法
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多用户开发】代码冲突&解决办法的更多相关文章
- 上传svn失败,代码冲突解决方式
1,修改文件后提交不了,大多是因为版本不一致造成的.更新一下,不产生冲突的情况,就可以提交了. 2,更新文件,如果出现冲突的情况,打开冲突文件test.php会看到类似以下的内容 <<&l ...
- Git应用--04遇到冲突解决办法git stash(转载)
git merge git pull时候遇到冲突解决办法git stash https://www.cnblogs.com/juandx/p/5362723.html 在使用git pull代码时,经 ...
- svn版本分支及冲突解决笔记
转载:http://blog.csdn.net/xuguiyi100/article/details/51966557 分支合并主干示例 1.主干工程右键选择merge合并下一步 2.选中merge ...
- 【小梅哥SOPC学习笔记】SOPC开发常见问题及解决办法集锦
SOPC开发常见问题及解决办法集锦 一.Symbol 'NULL' could not be resolved 近期在评估使用NIOS II处理器进行项目的开发,我使用的软件是Quartus II 1 ...
- Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法
Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...
- SVN操作出现locked错误解决办法
SVN操作出现locked错误解决办法:在SVN中执行 commit 操作时,在更新过程中,中断过,或者因为其他原因导致SVN 出现 locked 异常. 解决办法:1. 选中出现异常的文件,右键 - ...
- 记录一次gitlab版本回退以及代码冲突解决流程
版本回退 git clone -b 分支名 项目地址 克隆需要回退的分支代码 git pull 保证代码提交记录最新 git log --pretty=oneline 以行的形式展示提交记 ...
- SVN提交代码冲突解决方法总结
在近期svn提交代码时遇到多种情况的问题,现做一个解决办法的总结如下: 插播一条:idea下被svn版本控制各类文件的颜色区分,红棕色,未加入版本控制:绿色,已经加入控制暂未提交:蓝色,加入,已提交, ...
- git学习之冲突解决办法
1.如果本地项目和远程服务器的同一文件都有改动,那么就会产生冲突,导致git pull 失败,报错见下. 解决办法:先执行git stash指令,暂存当前的改动状态,再执行git pull指令,就可以 ...
随机推荐
- UML类图6种关系的总结
http://www.open-open.com/lib/view/open1328059700311.html
- 字符串s中从第i个位置起取长度为len的子串,函数返回子串链表
/*已知字符串采用带结点的链式存储结构(详见linksrting.h文件),请编写函数linkstring substring(linkstring s,int i,int len),在字符串s中从第 ...
- Kinect2 随记
2016.03.30 calibration工作: 地板砖1.24m一格,大概走到2.5m时5*7的pattern开始无法检测到. 20种板上位姿*20种黑板位姿=400幅图像. 距离越远,水平角能检 ...
- 在Windows server 2008 R2上安装Python3.5
最近弄了台机器,把以前的一些东西移植到这台机器上去,先远程看一下机器(其实就是一台虚拟机)配置,系统版本是Windows server2008R2 Enterprise,64位,4G内存,E7-885 ...
- Java 第18章 多态
18 章 --> 多态 继承: extends 抽象类 abstract (限制类的实例化) 抽象方法 public abstract void show(); //抽象方法只有方法的声明,没 ...
- [转]MySQL关键性能监控(QPS/TPS)
原文链接:http://www.cnblogs.com/chenty/p/5191777.html 工作中尝尝会遇到各种数据库性能调优,除了查看某条SQL执行时间长短外,还需要对系统的整体处理能力有更 ...
- Ubuntu下命令行方式对PDF文件进行缩放、合并、拆分
安装软件: sudo aptitude install ghostscript 然后执行命令: gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibili ...
- .NET 4.5+项目迁移.NET Core的问题记录
.NET 4.5+项目迁移.NET Core的问题记录 这几天试着把目前的开发框架迁移到新的.net core平台,中间遇到的问题在这里简单记录一下. 迁移过程遇到的最大的问题IOC容器.我目前使用的 ...
- MemCached 安装笔记
安装步骤: 1. 下载libevent & memcached 源码包 分别把memcached和libevent下载回来,放到 /tmp 目录下: # cd /tmp # wget ...
- Linux内核分析之理解进程调度时机跟踪分析进程调度与进程切换的过程
一.原理分析 1.调度时机 背景不同类型的进程有不同的调度需求第一种分类I/O-bond:频繁的进行I/O:通常会花费很多时间等待I/O操作的完成CPU-bound:计算密集型:需要大量的CPU时间进 ...