前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【SVN多用户开发】代码冲突&解决办法

【SVN多用户开发】代码冲突&解决办法

作者头像
用户1154259
发布2018-01-17 17:05:33
1.2K0
发布2018-01-17 17:05:33
举报

SVN是一款集中式的代码存储工具,可以帮助多个用户协同开发同一应用程序。 但是SVN不能完全代替人工操作,有时也需要程序员自己进行沟通确认有效的代码。 下面就简单的看一下,常见的代码冲突以及解决方法。 总结起来,无非是:  1 避免开发人员共同开发同一文件   2 开发前需要时常更新本地代码库

修改同一文件不同位置引发的冲突

  首先看一下问题背景:

  样例场景中有连个用户:xingoo和test。他们共同开发一个程序,改程序只有一个文件,原始的代码如下:

代码语言:javascript
复制
public void Test{
    System.out.println("Test!");
    return 1;
}

  此时用户xingoo,修改代码第2行,修改打印语句!

代码语言:javascript
复制
public void Test{
    System.out.println("Test!xingoo");
    return 1;
}

  用户test,修改代码第3行,修改返回值

代码语言:javascript
复制
public void Test{
    System.out.println("Test!");
    return 0;
}

  此时xingoo用户先提交了代码,当test提交代码时,提示错误:

提示用户该文件已经过期,需要先更新文件。

此时,SVN会自动把其他用户修改的操作更新到该文件中(前提是不同用户修改的位置不同),并且保存当前用户修改的部分。

  点击更新,更新代码。

  观察代码发现,已经更新为:

代码语言:javascript
复制
public void Test{
    System.out.println("Test!xingoo");
    return 0;
}

  再次提交,提示成功:

  这种情况,是最简单的代码冲突样例。不同用户修改了不同位置的代码,因此只需要在提交前进行更新,就可以解决冲突。

  那么如果用户修改的是同一位置呢?

修改同一文件相同位置引发的冲突

  前面例子中,xingoo的代码当前为,版本号为9:

代码语言:javascript
复制
public void Test{
    System.out.println("Test!xingoo");
    return 1;
}

  test的代码为,版本号为10:

代码语言:javascript
复制
public void Test{
    System.out.println("Test!xingoo");
    return 0;
}

  此时test的代码时最新版本的。

  如果此时,xingoo用户,想要修改 return 1; 部分的代码,提交时会发生什么呢?

  再次提交遇到错误:

  点击OK后,提示更新或取消,点击更新,更新代码!

  再次报错,提示:文件存在冲突!

  此时观察文件夹发现,多了3个文件

  分别打开这3个文件:

  test.txt中的内容,该文件记录了冲突的详细内容,

  其中<<<<<<.mine到====之间为当前用户修改的内容;

  ====到>>>>>.r10为版本库中的内容:

代码语言:javascript
复制
public void Test{
    System.out.println("Test!xingoo");
<<<<<<< .mine
    return 2;
=======
    return 0;
>>>>>>> .r10
}

  test.txt.mine 记录当前用户修改后的文件内容快照

代码语言:javascript
复制
public void Test{
    System.out.println("Test!xingoo");
    return 2;
}

  test.txt.r9 记录当前用户修改前,版本库中的内容快照

代码语言:javascript
复制
public void Test{
    System.out.println("Test!xingoo");
    return 1;
}

  test.txt.r10 记录当前版本库中内容快照

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-04-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 修改同一文件不同位置引发的冲突
  • 修改同一文件相同位置引发的冲突
  • 通过TortoiseSVN进行代码对比
  • 通过TortoiseSVN进行版本对比
  • 参考
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档