在《Starteam中使用标签管理里程碑版本》和《Starteam中使用View Label来自定义版本》中,我们使用了标签来管理项目的阶段性版本,此方法简单直观,但又不乏蹩脚之处。本文试图为您介绍一个基于视图(View)的项目版本分支管理方法。
试想,当我们的项目在经历了1.0、2.0到达3.0版本时,发现2.0版本出现了一处问题,需要被修复,那么用我们之前提到的方法,就可以Check Out 2.0版本,修正之后再Check In回服务器。问题来了,处在同一开发小组的其它成员,却发现当前开发的3.0版本有了一个过期的文件,但是,当他们Check Out到本地时,却发现这个文件是2.0版本的一个patch,严重影响了整个开发的流程。
显然,上述问题出在我们使用的版本管理模式,前文提到的方法是线性的管理模式,仅仅用来管理串行的阶段版本,虽然使用View Label可以让我们查看不同版本的各个文件,但这种方法还是无法解决上述并行版本的问题。那么,我们要更换版本控制工具?NO!逃避问题不是我们的风格,况且Starteam已经为我们提供了强大的分支版本管理功能,那么Let’s go!
View的概念和特性我们已经在前文中介绍过,不了解的朋友可以到《Starteam中使用View Label来自定义版本》一文中查看相关内容,在此不再赘述。
与此同时,强大View功能也为我们提供了分支版本管理的功能。
还是以前面的问题为例,我们在开发3.0版本的时候,需要修正1.0或者2.0版本,那么我们需要在每个大版本(也称发行版本)确定的时候创建一个分支View,方法如下:
比如,我们需要在开发1.0版本的时候,新创建一个2.0版本,但不影响1.0版本的开发。我们可以创建一个全新的View来管理我们的2.0版本,前提是我们在之前建立了以下若干视图标签(View Label),比如Version 1、Version 2、Version 3(当然不创建这些视图标签也可以正常使用分支功能,但需要手动Check Out相应的文件版本)。
通过View -> new菜单来打开新建视图窗口,如图:
图1 新建视图并选择视图类型
从 View Type (视图类型)列表框中选择一个可用的选项。不是所有视图类型都会
显示出来,这取决于当前打开的视图。
全部分支(Branch All)(默认)
选择此项,则会使子视图作为一个新的分支出现,子视图中的新项和对这些项的更改将只出现在子视图中,不会影响父视图。
无分支(Branch None)
选择此项,新视图中所有项的分支行为未设置为“更改时分支”,但可以在以后更改此选项。设置为此项时,对父视图和子视图中大多数项进行的更改能够在两个视图中得到反映。
我们选择Branch All来创建一个全新的分支,填写好View Name,点“下一步”进入“选择父文件夹”窗口,如图:
图2 “选择父文件夹”窗口
我们选根目录,点击“下一步”进入“选择工作目录”窗口,如图:
图3 “选择工作目录”窗口
此窗口让我们选择一个工作目录来放置新的分支版本,以独立与旧版本,这样我们可以单独开发此版本。选择完毕,点击“下一步”进入“配置”窗口,如图:
图4 “配置”窗口
此界面有四个选项,其功能如下:
Floating Configuration (浮动配置)
该选项不创建新的分支,只创建一个别名式视图(类似于数据库系统的View)
Labeled Configuration (加标签的配置)
此项中列出了先前创建的所有View Label(父视图未创建View Label时,该界面为不可用状态,设置对当前的所有文件有效),选中该项,新视图中的所有项将带有指定的标签,并回滚至该标签。对父视图的更改不会影响到新视图。
Promotion State Configuration (提升状态配置)
类似上一个选项,只是该配置针对于提升状态标签。
Configuration As Of (日期配置)
选择该项,新视图将只包含在指定日期和时间存在的项,而且它们将恰好回滚至该日期和时间前。对父视图的更改不会影响到新视图。
我们可以选择除第一项外的其它选项,点击“完成”,一个新的版本诞生了。
以此方式建立另外两个版本的视图Version 2和Version 3,我们便可以在这些View中进行与父视图相同的所有操作,而不用担心互相的影响和冲突。使用Files -> Open Project便可以在各个版本中切换。
至此,使用View特性,我们顺利解决了项目版本分支的问题。实际开发中,由于具有多个发行版本,项目并行分支开发的情况比较常见,而每个发行版本的内部版本则基本没有分支的存在,因此使用分支View来管理发行版本,而使用标签来管理内部版本不失为一种清晰、高效的方式。(其实这就是Starteam的本意)
最近公司要使用starteam,我对状态提升的使用不太理解,麻烦兄台有空讲解一下