【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菜单

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

 

本文转自博客园xingoo的博客,原文链接:【SVN多用户开发】代码冲突&解决办法,如需转载请自行联系原博主。

时间: 2024-10-23 21:03:01

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

arm-求编译LED闪烁代码出错解决办法

问题描述 求编译LED闪烁代码出错解决办法 如下错误如何解决?谢谢! C:KeilARMIncSTSTM32F10xstm32f10x.h(96): error: #35: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)" #error "Please select first the target

Mac OS SVN配置使用以及冲突解决

创建代码仓库 我首先在 ~目录下新建了一个svn目录$mkdir svn创建一个仓库,名称随意,我的名字是mycode$svnadmin create ~/svn/mycode目录结构应该如下所示:$ ls svn/mycode/README.txt conf/ db/ format hooks/ locks/ 配置svn的用户权限 修改~/svn/mycode目录下的3个文件1.打开svnserve.conf,将下列配置项的前面的#和空格去掉 anon-access = readauth-ac

git命令添加 修改 删除 冲突解决办法

  如果对git命令行不熟悉的话,用git图形界面工具,就比较合适了.建议使用tortoisegit这样的工具,命令行从学习到灵活掌握的时间成本比较高的. 1,添加 # git clone git@192.168.10.202:develop/test.git # cd test # touch test.txt //测试文件 # git add test.txt //git添加文件 # git commit -m 'test' //添加到本地版本库 # git push //push到远程 如

Jquery库及其他库之间的$命名冲突解决办法

首先我们应该知道,在jquery中,$(美元符号)就是jquery的别名,也就是说使用$和使用jquery是一样的,在很多时候我们命名空间时,正是因为这个$而产生的冲突的发生.比如说:$('#xmlas')和JQuery('#xmlas') 虽然在写法上不同,但在实际上却是完全等同的. 要想解决这个冲突,其实最简单的方法就是使用不同的名称来命名,或者让执行代码认为是不同的命名空间即可. 一. jQuery库在其他库之前导入,直接使用jQuery(callback)方法如:  代码如下 复制代码

flash AS 检测影片剪辑和鼠标冲突解决办法

在时间轴的图层 1 上选择第一个帧.选择"窗口">"动作",打开"动作"面板(如果尚未打开).  在"动作"面板中添加以下代码:  代码如下 复制代码 this.createEmptyMovieClip("box_mc", 10); with (box_mc) {     beginFill(0xFF0000, 100);     moveTo(100, 100);     lineTo(200, 1

调用discuz编辑器发布帖子显示html代码的解决办法

在discuz二次开发中调用discuz的编辑器是一件在所难免的事情,然而discuz的开发文档少得可怜:因此在二次开发的时候查看源码和各种莫名其妙的问题着实令人摸不着头脑.前面讲解了一下调用discuz编辑器的实例调用discuz编辑器再也不是问题了.然而这只是一个粗糙的例子,而discuz帖子存储在数据库的却是自定义的bbcode而不是正常的html代码.这也就导致直接调用discuz的编辑器发帖显示出来的帖子成了html源码. 网上找了很久也没找到相应的问题,最后通过数据库的字段对比才知道

ANDROID (eclipse)开发常见问题及解决办法汇总

1.ANDROID 在eclipse中没有出现AVD的解决方法(转)如果android安装正确的话,但是eclipse里面的导航条就是没有AVD 可以通过「Window」⇒「Customize Perspective」⇒「Tool Bar Visibility」Tab画面上选择 Android SDK and AVD Manager来显示http://blog.sina.com.cn/s/blog_79aa896901015iyc.html 2.Unable to get view server

svn list 显示中文乱码解决办法

一.背景 我们使用svn pre-commit hook做了一个svn锁定的功能,对于在上线前的svn提交进行控制,防止开发及策划胡乱提交,导致线上bug.这个平台有一个web界面功能,可以争对性给某些人开通一次提交权限,并记录他这一次的提交文件和log,乱码就出现了,web界面上显示的中文均乱码,包括log和提交文件名称 乱码的格式是:/design/X_?229?175?188?229?133?165?230?149?176?230?141?174/04_?233?129?147?229?1

Android Listview中Button按钮点击事件冲突解决办法

  今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录下,以便日后参考.      首先,其实Listview中Button按钮点击事件冲突这种问题压根就不是太大的问题,因为我们完全可以将一个TextView的Backgroud设置成一个selector,也可以将一个TextView设计成一个按钮的样子,这样就可以绕过ListView和Button