【SVN多用户开发】代码冲突&解决办法
2016-11-25 11:44
204 查看
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菜单
在弹出对话框中,上面列出最近的几个版本;可以直接双击下方蓝色的文件名称,就可以直接使当前文件与该版本的文件进行对比。
相关文章推荐
- 【SVN多用户开发】代码冲突&解决办法
- 【SVN多用户开发】代码冲突&解决办法
- 【SVN多用户开发】代码冲突&解决办法
- SVN多用户开发 代码冲突&解决办法
- iOS中团队开发上传SVN后代码不同步的解决办法
- 禁止在 .NET Framework 中执行用户代码。启用 "clr enabled" 配置选项 解决办法
- VM中使用svn检出代码出现Password for '(null)' GNOME keyring问题的解决办法
- 用户 'sa' 登录失败。该用户与可信 SQL Server 连接无关联'。错误代码:18452 解决办法
- Eclipse中提交代码时SVN冲突的解决办法
- 【Windows】SVN服务器&&客户端的安装以及用户搭建使用、冲突解决
- iOS 开发 git和代码时xib出现冲突的解决办法
- 在 Eclipse 下安装 SVN 插件,遇到代码更新冲突问题的解决办法
- 关于组件化开发中常用到的svn,cocoapods代码管理工具错误解决办法(持续更新)
- SVN出现叹号文件冲突解决办法
- Exchange与Sharepoint用户权限冲突的解决办法(转)
- 解决svn冲突的办法
- 操作中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_CI_AI" 之间的排序规则冲突 的解决办法
- 提交代码到svn时服务器重启导致svn无法更新问题解决办法
- Web开发敏捷之道-应用Rails进行敏捷Web开发-第三版 92页 错误提示 syntax error, unexpected ')' ..._cart" , :id => product } do ).to_s) 解决办法
- 用户 'NT AUTHORITY/NETWORK SERVICE' 登录失败解决办法