软件版本管理之Starteam HowTo
 

2009-06-12 作者:学无止境 来源:IT168

 

针对Starteam,写了如下HowTo。原因是图形界面的操作固然有其方便性,但也随处埋藏着地雷。
例如:权限设置不当,任何人可以选择工程的根目录,按一下DEL键,只有一次确认机会,便会在不到一秒种的时间,删除整个工程所有文件。如果这时不知所措,重新再次重建整个工程,比如重新 checkin整个工程的5000 个文件,则服务器中的文件个数翻倍。这些文件作为新文件,不但让你为找不回Commit LOG而头大,管理员总有一天也会为服务器存储空间头大。

1. Server Configuration

1.1 用户角度

在使用Starteam客户端连接服务器前,首先要设置服务器的IP地址、端口号等参数,以建立连接Starteam服务器的Profile。这可以称为用户眼中的Server Configuration。

用图形界面的Starteam客户端,按如下方式设置:

(1)Project->Open->Add Server

(2)设置服务器名、IP地址、协议(TCP/IP Sockets)、端口(49201)、加密(选择任意一种加密方式)。

命令行Starteam,请用我们自己封装的Wrapper: "st"。

obsd99:/home/jiangxin/work/src/project/main>st config
StarTeam Configuration
Original starteam server is 10.1.1.60
new server:[10.1.1.60]
Original starteam server port is 49201
new server port:[49201]
original username is jiangxin
new username:[jiangxin]
Password:[********]
Original checkout project is project
Project you want to checkout:[project]
Original checkout view is ("/" means root view)
View you want to checkout:[]
Original checkout folder is Development ("/" means root folder)
Folder you want to checkout:[Development]
Working dir is /usr/home/jiangxin/work/src/project/main
Your working directory:[/usr/home/jiangxin/work/src/project/main]
Sticky tag base on date : ("/" means not exist)
Date:[]
Sticky tag base on label : ("/" means not exist)
Label:[]
Sticky tag base on promotion-state : ("/" means not exist)
Promotion-state:[]

Server Configuration的配置保存在工作目录中;用户口令加密保存在用户主目录的文件.stpass中。

1.2 管理员角度

(1)一个服务器配置(Server Configuration),作为一个独立的服务运行,有独立的用户数据库,独立的版本控制文件仓库(Repository),独立的一个数据库来支持。

(2)一台服务器上可以运行多个不同的Starteam服务器配置,不同的Server Configuration需要分配不同的端口设置。

(3)一个服务器配置内可以运行多个工程(Project),一个Project中可以有多个视图(View),视图中有目录、文件、Change Request等元素组成。

(4)一个服务器配置中的文件等元素可以在工程之间,视图之间共享(类似于拷贝的动作);但是元素不能跨服务器配置共享。

(5)配置文件

Configuration\server.scg
Configuration\server.cph

(6)数据库文件

Database\StarTeamDB.mdb (Assuming Access database)

(7)数据仓库

版本控制文件仓库(Repository):Vault/Archive/;版本控制文件存储在该目录中,其中没有子目录,文件名以流水号依次排列;每个文件控制一个分支的所有版本文件的控制,类似于CVS的版本控制文件,但不同之处是该文件包含二进制的头尾,如果文件分支,CVS仍由一个文件来控制,而Starteam则形成一个新的文件;CVS的Tag包含在文件上,即如果对文件加Tag,文件被更新,而Starteam的Label(相当于CVS的Tag)不包含在文件中,而是存储在数据库中。

(8)Cache

Cache文件夹是为了加速文件Checkout。当一个文件被Checkout,便在该目录建立Cache,文件名结构为:文件名.版本号。

(9)其他

包括Log、Attachments(Change Request、Topic等的附件文件)

2. Project

2.1 用户角度

选择Server Configuration列表,输入正确的用户名和密码,即打开该Server Configuration下你有权限的工程列表,选择某一工程。

2.2 管理员角度

(1)在Server Configuration下,列表显示的工程列表,即代表了一个个工程。

(2)工程是由一系列视图组成,根视图通常作为工程的缺省视图,直接选择某工程,和选择缺省视图的效果一致;

创建工程,即创建工程的根视图。尽量在设置权限时,按照工程、视图、文件夹的方式来设置权限。

(3)设置权限时,一定设置工程和视图不能被任何人删除!因为一旦删除无法找回。

3. View

(1)通过Project->Open来打开某一工程,会显示视图列表。视图间的关系通过一个树图表示出来。根视图通常作为工程的缺省视图,直接选择某工程,和选择缺省视图的效果一致;

(2)根视图通常表示目前正在开发的版本;而分支视图表示维护的旧代码分支,或者功能独立的代码分支;

(3)视图是主要用途是管理分支,即将一个分支作为一个独立的视图;当然也可以对不同用户建立视图,但是通过对目录的权限控制来实现不同用户使用同一个视图更好;

(4)如果对视图中不同目录分别设置权限,则用户查看该视图,只能看到具有权限的目录。

(5)Label只在同一个视图中起作用,且View Label、Build Label、Promotion State作用于一个视图中所有文件;

(6)由于Change Request需要用到Build Label,测试人员用到Promotion State,因此需要在同一个视图内存放程序目录、Change Request目录、测试人员目录等;但文档具有相对独立性,建议单独建立工程,再共享到其他工程和视图中。

4. Branch

4.1 Starteam和CVS的分支不同点

(1)CVS基于文件管理,不同分支的同一文件,即使内容不同,也都体现在同一个文件中;Starteam建立分支是基于工程和数据库,两个分支的文件可以指到一个相同的物理文件,也可以使不同的物理文件,这样两个分支的文件可以同步变化(Float Branch),也可以分别独立控制(Fixed Branch);

(2)CVS分支用Tag来管理,不同分支用rtag/tag -b来建立,并且不同分支打的分支Tag或Tag,可以被其他分支看到。Starteam的分支不通过建立标签实现,而是生成另外的一套数据库。

(3)Starteam建立分支的方式:

  • 同一视图的不同目录

另外建立一个目录作为分支的根目录,用ctrl+Drag将预建立分支的版本在该目录建立共享,再选择Behavior Branch on change;则在这些文件修改并Checkin 时,会建立新文件而分支;也可以为方法1新创建的分支目录来建立视图来方便管理。

  • 不同的视图(建立分支视图)

创建分支视图,在创建过程中选择Permit items to branch within this view来创建分支。分支视图的好处是,有自己独立的Lable(Tag)命名空间,不象CVS只有一个Tag命名空间。

  • 推荐使用分支视图方式。

(4)CVS、Starteam都可以实现分支和主线和合并。

CVS命令行功能强大,可以通过命令行完成分支的管理;而Starteam对视图的管理只能通过图形界面实现。

4.2 建立分支注意事项

(1)通过分支视图建立

建立新视图,在步骤一,选择文件分支,如图1:

图1 建立分支视图步骤一

在步骤五,注意"Floating Configuration"和"Configure as ..."的区别:

图2 建立分支视图步骤五

一般情况下,请选择"Configure as ...",这样当建立完成后,程序即刻分支,否则选择"Floating Configuration",子视图在没做修改前,一直和父视图同步,称为"Variant View"。

如果选择了"Floating Configuration",可以通过将分支视图的所有文件强制Checkin,即可。

判断建立好的视图是否为分支视图,查看视图的属性:

图3 视图的属性

(2)通过文件共享建立分支

建立一个目录作为分支的根目录,用ctrl+Drag将预建立分支的版本在该目录建立共享,再选择Behavior->Branch on change;则在这些文件修改并Checkin时,会建立新文件而分支;

通过该方法建立的分支,分支文件仍和主干文件保持同步,直到分支的文件被修改而不是主干文件修改,方建立分支。

如果想从一开始便建立分支,将分支文件强制 Checkin,即可。

5. Label

Starteam的标签(Label)主要用来记录事件,如里程碑,和代码分支没有必然的联系;而CVS的分支必须依靠Tag来完成。

CVS的Tag是记录在文件中,建立Tag耗时;Starteam的Label是建立在数据库基础上的,建立Label属于毫秒级的动作。

Starteam的Label是建立在视图中,文件和视图脱离关系,该文件上的Label失去。

如何使用Label管理项目的示例,参见http://www.fox.se/english/starteam/best_practices/starteam_best_practices.htm,提供了Starteam利用Label协同工作的范例,这些工作有些是CVS很难做到的。

下面具体介绍Label的几个不同的变种:View Label、Build Label、Promotion State、Revision Label。

5.1 View Label

View Label针对一个View中所有文件,可以用来记录项目的里程碑。

View Label非常灵活,可以将后来新增加的文件加入到View Label中。

文件移到到其他视图和文件删除对View Label有不同影响:移出文件的View Label会自动去掉,并且历史视图,该文件也不存在了,因为文件被移动了。删除的文件则不然,仍可以通过历史被访问到,并且删除前的文件仍然具有该View Label。

5.2. Build Llabel

在创建View Label中有"Use as Build Label"的选项,默认创建的View Label 就是Build Label。

Build Label基本上等同于View Label,除了Build Label在Change Request的工作流程中会被引用到。Build Label可以用来帮助测试人员了解Bug在哪一个 Build Label中被解决了。

5.3. Promotion State

Promotion State可以看作是是浮动的View Label、View Label的标签。

通常要建立的Promotion State有:Release、Beta Test、Alpha Test,...。并且要按照顺序建立,这样可以通过提升,将Beta Test对应的Build Label,提升为Release,即用Release来指向Beta Test的Label。

建立在View Label基础之上,为编译Checkout代码,提供一个一致的Label。可以方便地建立Nightly Build系统。

5.4. Revision Label

Revision Label可以用来对一个视图中单独的文件或某些文件(或元素如Change Rrequest),单独建立Label。便于文件查找。

同View Label一样,文件如果被移动到该视图之外,失去Revision Label。

6. 目录划分

表格 项目工程目录结构

目录 说明 权限
Development 程序源码,及帮助 组成员完全权限
Defect 用于记录缺陷控制的目录 组成员控制Chang Request完全权限;所有人具有添加修改Chang Request权限
Document 项目文档 组成员完全权限;文档工程师完全权限。(现已废弃不用)
ProjectManagement 项目范围控制,时间控制等  组成员读权限;项目经理完全权限

以上各个目录,只有项目管理人员和系统管理员具有修改安全设置权限。

6.1. 源码的版本控制

Development目录下建立各个相关模块目录;

模块的目录组织结构应该和Checkout 到本地的编译代码目录结构一致。

注意二进制文件尽量不要放在Starteam中,而改用其它方式(如文件服务器),来进行存储!

图4 CWAP 1.1分支视图目录结构图

6.2 文档的版本控制

文档的管理,涉及到大量的二进制文档(WORD),改用文件服务器来存储。

6.3 缺陷控制

建立Defect目录,并在其下建立需要测试的相应模块的目录。

目录的权限设置为只读(对QA经理开放建立目录权限等)。对于Change Request,设置为任何人/QA/组内人员具有添加,修改权限等。

建立Defect Tracing目录,而不是在根目录下存放Change Request的好处是:1. 便于设置权限;2. 建立相应模块,便于Bug归类存放,不用在Category中填写易出错。

图5 Defect示例

6.4 ProjectManagement目录

ProjectManagement下,通过文件和topic方式,存储TODO LIST、编程规范、需求变更等信息。用户进行范围管理、工作管理等。

ProjectManagement权限设置为项目经理完全权限。

7. 删除和反删除

删除和反删除文件是Starteam和CVS最大的不同点之一。如果处理不好,虽然不会造成信息丢失,但处理方式不擅,将给Starteam服务器端引入过多的数字垃圾。

原则是:

  • 添加文件慎重

添加文件前,一定要将临时文件和二进制文件(编译过程的目标文件,可执行文件等)排除在外,以免引入数据垃圾。因为Starteam很难将文件彻底从服务器端删除。

  • 反删除文件照章办事

反删除文件,按照本文档的步骤执行。严禁通过重新添加方式,反删除,否则同样引入数据垃圾!

7.1 Starteam文件存放机理

Starteam以数据库为核心,是面向工程的管理方式。版本控制文件的文件名由数据库管理,文件名不过是"指针"。方便文件在一个工程甚至同一个Server Configuration的不同工程中的共享,以及任意移动和组织。

CVS、Perforce以文件为核心,即面向文件的管理方式,文件可以方便的重新组合以及移植。原子化的Checkin、二进制文件的版本控制是Perforce的优势。但是缺点是很难完成一个工程中,文件的移动及文件改名给前后不同版本/分支带来问题;不当处理或者丢掉以前版本控制中的文件部署,或者增加由于文件冗余增加占用空间。

Starteam的不利因素是很难将一个工程或者Server Configure中的文件分离、组合、单独移植。其数据仓库Repository像一个黑盒子,所有Project的所有版本控制文件,都放在同一个目录下(Vault/Archive目录下,这是Starteam的不足)。目前缺乏良好的文件管理工具,是一个缺憾。

Starteam一旦对文件进行版本控制,就丢入Repository目录中,很难在从中删除。这应当看作是其最大的Bug。

7.2 删除

无论文件从哪个视图(根View,子View)添加目录和文件到Starteam,在该View下显示的文件夹和文件只不过是Vault/Archive目录下文件(以流水号作为文件名),在数据库(Starteam的管理核心)中的一个"指针",删除文件,不过是删除了"指针",虽然没有真正删除文件,但是如果数据库中的所有关于某个文件的 "指针"都删除,文件只能通过历史来查看。但可以通过适当方法,通过历史的 "指针"重新找回版本控制。

7.3 移动

文件在同一个视图中移动时,历史被保留;但当文件在不同视图中移动(注意不是删除)时,原视图即使在历史中也找不到该文件,该文件从该视图中彻底消失了。如果将一个视图彻底删除,如果该视图下文件没有在其他视图中建立共享的话,则造成文件丢失,无法找回。

为防止此类事故的发生,经常备份,并设置任何人都没有工程和视图的删除权限。

7.4. 反删除的步骤

(1)同时打开当前视图和删除文件之前的视图,拷贝历史视图的文件到当前视图。

图6

(2)设置新视图中历史文件的属性。

图7

(3)设置新视图中历史文件的属性。由历史Reversion的只读版本修改成为Floating版本即可。

图8

8. 文件服务器和个人版本控制

Starteam的使用,并不能取代现有文件服务器的功能,因为Starteam的版本控制系统文件存储的特殊性。

Starteam所有版本控制文件存贮在同一个目录下(Vault/Archive),没有任何子目录,文件名按照流水号递增,并且一个文件一旦进入版本控制,一直不会删除。

优点是可以方便文件的改名,重新的目录组织,而不是象CVS那样很难修改文件名。

缺点是无法控制文件存储方式和存储量,对二进制(包括WORD文档)的版本控制管理不好。因此一些工具及不需要版本控制的文件尽量仍放在文件服务器上。
Starteam不是百宝箱,但更不能成为垃圾桶。如对一些不需要纳入工程,统一管理的,但仍需要版本控制的文件,建议使用CVS,进行个人维护。CVS有Unix和NT版本的Server,都很好用。

9. 客户端设置

  • 换行符转换(CRLF->LF)

选择根目录或者需要单独设置的目录,选择菜单: Folder->Properties->Files->Eol Conversion,如图:

图9

  • Workstation Options

选择 Tools->Workstation Options

  • Workstation Options: Workspace

图10

(1)在目录和Change Request中切换过程中,不改变文件夹

(2)改变路径时,取消文件递归,避免打开文件递归,切换到文件较多的目录,影响响应速度

(3)切换文件夹,保持对Filter的修改

(4)对多用户环境(如管理员)有帮助

  • Workstation Options: Files

图11

(1)将文件的最后修改时间作为检出时间(强力推荐),否则为当前时间

(2)只在必要时,打开Merge程序解决冲突

(3)设置默认文字处理程序,如:Ultraedit

(4)吴昭坚报告说:“如果把Optimize for slow connection的勾给选上了,结果在Checkout文件时极慢(Check一个文件要差不多1分钟)”

(5)如果网络速度足够快,就把这个钩去掉,以减轻服务器和客户端的计算负担。吴昭坚还报告说st命令行亦会变慢,我觉得st变慢,是由于IP反向解析造成的超时,可以在hosts中加上Starteam服务器的相关地址映射(如:10.0.0.60 starteam),更极端的做法是删除/etc/resolv.conf。

  • 修改口令和个人信息

选择 Tools->Server Administration->My Account


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织