针对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. 客户端设置
选择根目录或者需要单独设置的目录,选择菜单: Folder->Properties->Files->Eol
Conversion,如图:
图9
选择 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
|