[.net 面向对象程序设计进阶] (24) 团队开发利器(三)使用SVN多分支并行开发(下)

本篇导读:

接上篇继续介绍SVN的高级功能,即使用分支并行开发。随着需求的不断变更,新功能的增加。特别是敏捷开发中,需要有一个稳定的分支随时可以打包版本。那么我们的项目不能把不稳定的代码放在主干上。对于新的功能有些需要进行技术试验,产生的不稳定代码不能影响项目的主干。对于中型项目,人数在20人及以上的情况下,往往需要分组开发,在代理管理中,我们就可以很好的利用SVN的分支功能。分支开发相对稳定以后,可以很方便的合并到主干上来。本篇最后会介绍一下如何在Visual Studio 2013/2015中使用SVN插件进行代码管理。

 1.建立分支

了解了分支的作用,假设我们有一个项目有很多功能,团队配置20人,主要功能有:核心业务模块、TCP/IP通讯模块、射频卡/IC卡通讯模块等。为了合理安排人员,我们将人员分为三个小组,第一小组负责主干业务模块开发,当然这些模块需要两个通讯模块的支持,另外两个小组各负责一个分支开发,当分支相对完善的时候合并到主干模块。

基于上面的开发模式,我们利用SVN的分支功能,下面具体介绍如何建立主干和两个分支。

先把我们主项目签入到服务器上,具体操作上篇中已经介绍了,签入后,我们打开服务器端,看一下主项目结构,如下:

项目名称“TestObject”,下面有三个模块,主模块“Main”,还有两个模块“RfIc”、“TcpIp”

废话不多说,我们创建两个分支分别名为  TestObject_Branch_1  和  TestObject_Branch_2

具体操作如下,在客户端机器主项目 目录上右击,点击 TortoiseSVN ,点击 “分支/标记”

在打开的分支窗口中

输入分支名称,路径为根目录,在下面目标URL,可以看到 新建的分支的完整路径,如上图,点确定

提示复制完成,我们第一个分支创建完成了,分支开发组的同学,需要使用分支路径打开项目。

同样的方法,我们再创建第2个分支 TestObject_Branch_2,这时候项目文件夹中仍然只有主干部分,我们想看到其他分支,可以在项目文件夹中,右击,SVN更新

可以看到 两个分支都更新到 本地了

 2.分支合并到主干

不同的项目组成员可以通过分支进行开发,版本相对稳定的时候,可以随时合并到主干,下面介绍一下如何合并到 主干

在此之前,我们先对两个分支及主干进行改动,分支开发,肯定会有很多地方产生差异。

我们先把主干项目的文件 \TestObject\Mian\index.txt进行如下改动

然后,再在主干下增加一个文件 second.txt

SVN提交,主干项目

然后,我们分别在两个分支上改动 \TestObject_Branch_1\Mian\index.txt  和  \TestObject_Branch_2\Mian\index.txt 文件 ,

并且在两个分支分别建立两个新文件 ,如下

分别提交以后。主干和两个分支,不仅主页文件不同,并且分支内的文件也不同

我们可以在服务端查看三个项目的结构,如下:

经过一段时间开发后,如果两个分支相对稳定,如何合并到主干呢?

注意:合并前,先更新三个项目到相到 稳定 待合并版本

如上图,在主干项目右击,TortoiseSVN,点 合并

按上图选择,点下一步

上面的URL是主干URL,下面是分支URL,我们有两个分支,重复一次合并,即可

两个分支合并完成后,我们再看一下主干目录下的变化

打开变更的文件 index.txt

我们看到,这里变更为最后一个合并的分支2的部分变更,刚才有合并分支2的时候,如果代码有冲突,会有一个提示,我选择的是 解决冲突,那么就替换掉了,如果选择不解决,可以保留主干上的更改。

具体要看冲突代码而定,即使我们手抖点错了,也可以通过上篇文章中提到的恢复功能,进行版本回退。

3.主干合并到分支

在项目推进过程中,如果分支代码需要主干部分的变更,我们可以通过主干合并到分支

我们先在主干上建立一个新文件fast.txt

提交主干,更改。

用同样的方式在分支上右击,打开 合并 窗口

注意:这次需要在要更新的分支上打开合并

合并窗口如下

和上次不同的是,主干 --》 分支,我们需要先选分支URL,下面选主干URL

完成后,我们看一下 分支1的目录

如上图,我们看到 ,分支1上合并过来了主干的文件 fast.txt.同时也将主干的差异文件也复制过来了

用同样的方法,可以将主干也更新到 分支2,不再赘述。

至此,SVN的分支并行开发就介绍完了,是不是非常方便?

下面我们介绍一下如何在Visual Studio 2013/2015 中使用 SVN,其他版本的 VS也适用

4. Visual Studio 2013/2015 中 SVN 安装

这里接上篇文章,如果直接跳到这里看的同学,可以看一下上篇,URL:http://www.cnblogs.com/yubinfeng/p/5177994.html

前提是我们已经安装了VS 2015/2013

我们找到上篇中下载的SVN for VS插件安装包,如下

双击安装(VisualSvn暂时没有中文版本,不过我们通过上面的介绍,应该已经很熟悉了,它的使用和前篇中介绍的SVN客户端基本一样,只不过,使用环境不同,一个是资源管理器,一个在VS中而已)

下一步,同意,下一步

这步,可以看到 ,VisualSvn,会检测你系统中已经安装的VS版本,能选的全选中,下一步,完成安装

完成安装后,我们打开Visual Studio 2015(我以2015为例介绍,其他版本VS类似)

可以看到 ,Visual Studio 2015 中多了一个菜单VisualSVN,如上图,说明我们SVN for Vs插件已经安装成功

下面,我介绍一下如何在Visual Studio 2015中使用SVN

5. Visual Studio 2013/2015 中使用 SVN 开发

打开VS 2015 在工具-选项中,设置一下你所要使用的源代码管理器

打开选项窗口

找到源代码管理 -》 插件选择  ,在当前源代码管理插件中,选择 “VisualSVN”,确定

接下来,我们要做的就是 打开已有的SVN服务端的项目或将现有工程加入到SVN服务器

如上图,我们事先没有VS工程,这里我选择 “Add Solution to Subversion...”将当前工程签入到SVN服务器

这里选择一下 将要签入的工程路径,如果当前打开工程,则默认当前工程路径

下一步后,如上图,这里有两个选基, 一是新建一个版本库,另一个是使用已有的版本库。一般情况下,开发电脑和SVN服务器并不是同一台机器,我们选择已有的版本库,如果没有创建,可以先在SVN服务器上创建版本库后,再在这里选择。点下一步

这里输入,我们已经在SVN服务器上创建好的版本库URL,下一步

提示会将现在的工程导入到 SVN服务器指定的版本库,点 导入 ,完成本地工程签入

这时,我们可以看到 解决方案中的文件前面多了一个 小圆点 表示当前项目已经受到版本控制

我们去SVN服务器上看,DataBase版本库,并没有文件,不要急,我们在VS资源管理器中,右击工程,点 Update

提示,工程文件已签入SVN服务器

此时,第一个版本1已经正式更新到 SVN服务器上了,我们去SVN服务器上看看

没有任何问题。

我们在VS中打开一个文件更改

可以看到 在资源管理器中,文件 前面的绿色 点变成了黄色,表示此文件被更改了。

关于状态图标,我们可以在VS的VisualSVN的选项中,打开,来更改图标样式,这点和Tortoisesvn差不多,只不过,状态只有三种

在VS用使用SVN和在WINDOWS中使用tortoisesvn客户端基本差不多,我们在VS文件管理器中,右击

可以看到 ,菜单中都是我们熟悉的。显示差异,更新,提示,日志,锁定,合并,分支,恢复版本等等,这些我们在前篇 和本篇 中都一一介绍过了,这里不再赘述了。。

至此,SVN的服务器配置,客户端使用,VS中的使用全部介绍完了。

哎马,好累 ~~~吃个苹果压压惊~

6. 本节要点

本节主要介绍了SVN的高级功能 利用分支并行开发,SVN在VS中的安装及使用,SVN的介绍就在此终结了,他的确是一款轻量级的,功能强大的版本控制系统,使用人数不计其数。其实只学会使用并不难,重要的是要利用好,如果在使用过程中

不讲究项目的管理方法,任何控制工具都是失控的。SVN也一样,如何分支,何时合并,都需要对项目的业务有一定的理解。下面要开启Git之旅了,希望大家支持一下。最后祝大家新年快乐,项目一帆风顺。

==============================================================================================

返回目录

<如果对你有帮助,记得点一下推荐哦,如有有不明白或错误之处,请多交流>

<对本系列文章阅读有困难的朋友,请先看《.net 面向对象编程基础》>

<转载声明:技术需要共享精神,欢迎转载本博客中的文章,但请注明版权及URL>

.NET 技术交流群:467189533

==============================================================================================

[.net 面向对象程序设计进阶] (24) 团队开发利器(三)使用SVN多分支并行开发(下)的更多相关文章

  1. [.net 面向对象程序设计进阶] (27) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git

    [.net 面向对象程序设计进阶] (26) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git 本篇导读: 接上两篇,继续Git之旅 分布式版本控制系统 ...

  2. [.net 面向对象程序设计进阶] (26) 团队开发利器(五)分布式版本控制系统Git——图形化Git客户端工具TortoiseGit

    [.net 面向对象程序设计进阶] (26) 团队开发利器(五)分布式版本控制系统Git——图形化Git客户端工具TortoiseGit 读前必备: 接上篇: 分布式版本控制系统Git——使用GitS ...

  3. [.net 面向对象程序设计进阶] (25) 团队开发利器(四)分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境

    [.net 面向对象程序设计进阶] (25) 团队开发利器(四)分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境 本篇导读: 前面介绍了两款代码管理工具 ...

  4. [.net 面向对象程序设计进阶] (23) 团队开发利器(二)优秀的版本控制工具SVN(上)

    [.net 面向对象程序设计进阶] (23) 团队开发利器(二)优秀的版本控制工具SVN(上) 本篇导读: 上篇介绍了常用的代码管理工具VSS,看了一下评论,很多同学深恶痛绝,有的甚至因为公司使用VS ...

  5. [.net 面向对象程序设计进阶] (22) 团队开发利器(一)简单易用的代码管理工具VSS

    [.net 面向对象程序设计进阶] (22) 团队开发利器(一)简单易用的代码管理工具VSS 本篇要点:在进阶篇快要结束的时候说说源代码管理器,我们的开发,不是一个人可以完成的事,团队协作很重要,而且 ...

  6. [.net 面向对象程序设计进阶] (1) 开篇

    [.net 面向对象程序设计进阶] (1) 开篇 上一系列文章<.net 面向对象编程基础>写完后,很多小伙伴们希望我有时间再写一点进阶的文章,于是有了这个系列文章.这一系列的文章中, 对 ...

  7. [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类

    [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类 本节导读: 关于JSON序列化,不能 ...

  8. [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序

    [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序 本节导读: 本节主要说明使用异步进行程序设计的优缺点及如何通过异步编程. 使用 ...

  9. [.net&#160;面向对象程序设计进阶] (9) 序列化(Serialization) (一) 二进制流序列化

    [.net 面向对象程序设计进阶]  (9)  序列化(Serialization) (一) 二进制流序列化 本节导读: 在.NET编程中,经常面向对象处理完以后要转换成另一种格式传输或存储,这种将对 ...

随机推荐

  1. Java怎么添加背景图片

    首先,导入相关的包: import java.awt.BorderLayout; import java.awt.Container; import javax.swing.ImageIcon; im ...

  2. C# 循环语句 for循环

    循环:反复执行某段代码. 循环四要素:初始条件,循环条件,循环体,状态改变.for(初始条件;循环条件;状态改变){ 循环体} 给出初始条件,先判断是否满足循环条件,如果不满足条件则跳过for语句,如 ...

  3. js 执行效率

    循环 在JavaScript中,我们可以使用for(;;),while(),for(in)三种循环,这三种循环中for(in)的效率极差,因为他需要查询散列键,只要可以就应该尽量少用.for(;;)和 ...

  4. [.NET]使用十年股价对比各种序列化技术

    1. 前言 上一家公司有搞股票,当时很任性地直接从服务器读取一个股票10年份的股价(还有各种指标)在客户端的图表上显示,而且因为是桌面客户端,传输的数据也是简单粗暴地使用Soap序列化.获取报价的接口 ...

  5. Oracle:select into 查询没有记录的解决办法

    在数据库编程中,select into 语句可以将数据库的某些值赋值给程序的变量,使用起来非常方便.但很多时候也会遇到查询出来没有记录的情况,这时程序会出错. 可以使用 exception when ...

  6. topcoder srm 610 div1

    problem1 link 计算每个格子向上的最大高度.然后每个格子同一行前面的格子以及当前格子作为选取的矩形的最后一行,计算面积并更新答案. problem2 link 对于两个数据$(x_{1}, ...

  7. springcloud Ribbon学习笔记一

    上篇已经介绍了如何开发eureka服务并让多个服务进行相互注册,接下来记录如何开发一个服务然后注册到eureka中并能通过ribbon成功被调用 开发一个用户服务并注册到eureka中,用户服务负责访 ...

  8. docker+jenkins实现spring boot项目持续集成自动化部署

    一.首先jenkins与docker的安装参考下面链接   安装jenkins:  https://www.cnblogs.com/jescs/p/7644635.html   安装docker:ht ...

  9. JS基础内容小结(基础)(一)

    字符串的各类方法 str.charAt(1); 从第0个开始计算获取第一个子符串,如str=‘你好吗’获取到‘好’ str.charCodeAt(1); 获取对应字符串的编码数字:从第0个开始计算 S ...

  10. django rest framework serializers小结

    注:转载至https://blog.csdn.net/l_vip/article/details/79156113 引言 serializers是什么?官网是这样的”Serializers allow ...