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

news/2024/7/3 7:09:42

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");
<<<<<<< .minereturn 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

转载于:https://www.cnblogs.com/xing901022/p/4402686.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pgtn.cn/news/15599.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

UDP通信协议详解

中文名 用户数据报协议英文名 User Datagram Protocol 基础 IP数据包服务上增加一点功能 类别 传输层协议 特点 无连接、不可靠、快速传输 用途发送IP数据包 如右图所所示为udp协议的基本信息 上图就是UDP的数据报服务,sendto两次发送的是单独的两个个体,接收端…

简单的HTTP服务器程序的编写

HTTP 协议一般指 HTTP&#xff08;超文本传输协议&#xff09;。 超文本传输协议&#xff08;英语&#xff1a;HyperText Transfer Protocol&#xff0c;缩写&#xff1a;HTTP&#xff09;是一种用于分布式、协作式和超媒体信息系统的应用层协议&#xff0c;是因特网上应用最为…

【C++】何时需要自定义拷贝构造函数和赋值符

先来说结论&#xff1a;当类中有指针类型成员变量的时候&#xff0c;一定要自定义拷贝构造和赋值运算符 原因&#xff1a;当我们在有指针类成员变量的时候&#xff0c;还是用默认拷贝构造函数(拷贝构造函数执行的时候会调用赋值符)&#xff0c;默认赋值为浅拷贝&#xff0c;会…

iOS自动布局一

Align: Pin&#xff1a; 转载于:https://www.cnblogs.com/123qw/p/4404167.html

【C++】左值、右值、移动拷贝构造函数、移动赋值函数

左值和右值的定义以及区别: 先来看在C语言中的左值和右值 &#xff1a; 左值&#xff1a;可赋值的值为左值 右值&#xff1a;不可赋值的值为右值 再来看C中左值右值的定义如下&#xff1a; 左值&#xff1a;可以取地址的值&#xff08;有名字的值、非临时量&#xff09; …

【C++】typedfe和宏定义的区别

先来说结论&#xff1a; 1.宏定义作用于编译之前(也就是预编译阶段&#xff0c;而typedef作用于编译阶段 2.typedef仅限于类型的重定义&#xff0c;而宏定义不仅可以为类型起别名还可以为数值定义起别名(简单的替换) 下面来看一下区别 下面这是typedef的用法 typedef int* PI…

GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台

在当前很多的GPS平台当中&#xff0c;有很多是基于asp.NETsiverlight开发的遗留项目&#xff0c;代码混乱而又难以维护&#xff0c;各种耦合和关联&#xff0c;要命的是界面也没见到比Javascript做的控件有多好看&#xff0c;随着需求的增多&#xff0c;平台已经臃肿不堪。 设计…

【C++】虚函数

虚函数是构成C多态的重要一步&#xff0c;今天来说一下虚函数&#xff01; 虚函数&#xff1a; 在基类(或父类)中&#xff0c;使用virtual关键字对函数进行声明为并在一个或多个派生类(子类)中被重新定义的成员函数&#xff0c;通过指向派生类的基类指针或引用&#xff0c;访…