【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指令,就可以 ...
随机推荐
- jsp去掉小数点
<fmt:formatNumber value="${zyUser.user_gold}" pattern="0"/>
- sublime text3使用小结
一.下载 http://www.sublimetext.com/2 sublime text2下载页 http://www.sublimetext.com/3 sublime text3下载页 ...
- Mac下升级Nodejs
突然发现系统中的nodejs版本比较旧,想升级一下但又不想下载安装包一步一步安装, 发现还是可以很简单用命令行升级的. 首先得清理npm的缓存 sudo npm cache clean -f 安装 n ...
- Microsoft Office 2010/2013安装组件预设
日常维护中,多台电脑需要安装Office,可是Office包含的组件又很多(Excel/Word/PPT/OUTLOOK/ACCESS等),有些是不需要的,默认情况下Office都默认安装,一个一个调 ...
- Ubuntu下移植OpenCv
通过近一周的时候终于成功交叉编译opencv成功了,真心不容易.有一句话乃真理也,凡事贵在坚持.过程总是痛苦的,因为不懂得很多问题但是又需要面对很多问题,最大的收获就是耐心解决所有问题后就懂得这些了. ...
- strncpy和memcpy的区别
今天不小心在该用memcpy的时候,用了strncpy使自己吃了亏,所以写出这个博文. memcpy就是纯字节拷贝,而strncpy就不同了,字符串是以'\0'结尾的.如果一个字符buffer长度为6 ...
- 第56讲:Scala中Self Types实战详解
今天学习了self type的内容,让我们来看下代码 package scala.learn class Self{ self => val tmp = "Scala" ...
- Eclipse配置PHP及自动提示功能
Eclipse是一个开发工具,具有强大的插件功能,虽然用于Java理所当然,但为PHP所用,也为尝不可.虽然我一直用的是notepad,但发现开发工具也可以省去一些不必要的记忆. 言归正传,下面就来实 ...
- FastCgi 与 PHP-FPM
- 如果现在请求的是 /index.php,根据配置文件,nginx 知道这个不.是静态文件,需要去找 PHP 解析器来处理,那么他会把这个请求简单处理后交给 PHP 解析器.Nginx 会传哪些数据 ...
- glibc2.14 install from centos
安装glibc2.14 Tar xf glibc-2.14.tar.gz Cd glibc-2.14 Mkdir build Cd build ../configure –prefix=/opt/gl ...