welcome to my blog!我每天都会纪录我学习的点点滴滴,也希望各位前辈多指教.

Visual SourceSafe 教程(转)

上一篇 / 下一篇  2007-03-21 10:49:14 / 个人分类:study

作为版本控制的管理工具,虽然微软的Visual SourceSafe有许多不尽如人意的地方,这也是很多人所抱怨的。但是我认为,更多时候的使用不便,是因为对工具的不熟悉而导致的。这个教程是笔者在几个月前考察版本控制时根据VSS的联机帮助文档改编而成的。与其说是教程,到不如说是一本简明手册,因为其内容涵盖了VSS的全部功能,并从中提取了自认为重要的和有价值的东西,将之翻译成中文。其中不乏有好的建议和使用技巧,比如:定期备份完整的VSS数据目录,定期清除临时目录的内容,尽量使用一个数据库存放所有文件,使用虚拟回滚(Virtual RollBack)代替普通回滚,排他性签出的使用,Cloak操作等等,不一而足。

{!ZQI9Q(m't0  对于Branch/Share/Pin/Label这几项功能的融合使用,正文及附录的相关部分提供了相当不错的范例,演示了如何通过灵活运用诸项功能,以自如应对不同的开发场景。笔者在看到这部分内容时,一时间有了恍然大悟之感,心中不禁想到,原来VSS也可以如此用法。相信这些范例对大家也会有不小的启示和“震撼”的。

p)[_;t0zsu0  此外,附录部分的“VSS命令-权限级别对应表”是笔者整理之后的结果,有了它,大家对不同权限的用户可以使用何种功能,自会变得一目了然。

/d9L`s1AD0  希望这个教程可以对并不十分熟悉VSS的开发人员和管理人员有所帮助,同时也希望可以借此机会澄清一下大家对VSS的一些“偏见”:)


51Testing软件测试网Lj3R8z{(G)@

点击此处查看《Visual SourceSafe简明培训教程》51Testing软件测试网`u,|2h lW6a S

51Testing软件测试网#R;Bl#e d*|X|f;t kn

 目录

y4_Q$o;w \01 说明51Testing软件测试网?bv7C3z1T

fTJeLM$z"N02 概述51Testing软件测试网"R1gK,qJ)^

}8|$yN5GvJJ"`7|(b03 管理员部分4 普通用户部分附录

~ b ~-z2NT ?.@0

附表 VSS中部分命令的对应权限级别

J!lwo@0

4dIW+V?%q0下表中打星号表示具有该类权限的用户可以使用该命令。

功能RCAD
Add  **
Branch  **
Check In ***
Check Out ***
Cloak****
Create [1]  **
Delete  **
Destroy   *
Difference****
Get Latest Version****
History****
Label  **
Links****
Merge [2] ***
Merge****
Move [3]  **
Move   *
Pin ***
Purge   *
Recover  **
Rename  **
Rollback   *
Share [4] ***
Share  **
Undo Check Out ***
Set Working Folder****

(]f#dBeBk0

%x%lCq)f\0p$c0[1] 此处指用户必须有对Parent Project的A类权限。
{KZz$Wz0[2] 此处指用户必须有对目的Project的C类权限,同时有对原Project的R类权限。
y8uS(BMp_2[*Y \0[3] 此处指用户必须有对目的Parent Project的A类权限,同时有对原Parent Project的D类权限。51Testing软件测试网L`rXlM!E
[4] 此处指用户必须有对原Project的C类权限,同时有对目的Project的A类权限。51Testing软件测试网)M+J;HEpb

51Testing软件测试网5\V I)cI:l'j?Y*c:B O
1 说明

Z+Y*V'p3I"eJw ub0

R}(vd4@)Vo0一、本教程针对不同使用对象提供Visual SourceSafe 6.0的若干使用指导,阅读对象包括Visual SourceSafe的管理员和普通用户,以及希望了解如何采用Visual SourceSafe进行软件版本控制的管理人员。管理员或普通用户在使用Visual SourceSafe的过程中,如果遇到不知如何操作,或者对某些操作的注意事项不甚了解等类似情况时,可以查阅本教程。51Testing软件测试网Yr7LB_uWf ix

51Testing软件测试网6D:XF"L9Ccj3qp

二、本教程的"管理员部分"是管理员必读的,如果管理员在除履行其自身职责之外,还兼任普通用户的角色,则可以参阅教程中的"普通用户部分"。作为一般的普通用户,只需阅读"普通用户部分"即可。

|3\]N0t9UAY0

0C'}F h+b"DSs n0三、教程中列举的操作,加星号者,为高级用法(Advanced Usage),其余为基本用法(Basic Usage)。所谓基本用法是指一些通常使用频繁的,或者是使用方法较为简单的操作。所谓高级用法是指通常使用频率不多,或者较为重要的,或者用法复杂的操作。51Testing软件测试网'xb'`1BP|;}

51Testing软件测试网1i{+w$H)H(b]

四、本教程内容摘选并改编自Visual SourceSafe 6.0英文版联机帮助,从中提取了诸多重要信息、容易忽略的内容以及若干注意事项。一些基本内容(主要指某些基本操作的使用方法)只简单列举了条目,欲了解这些条目的详细情况请查看联机帮助的相关部分,可以通过列于这些条目之后的英文说明在联机帮助中搜索到相关内容。

)Jy*uO#LZB},@2a0

8z]2o8p:v'U)JC*fZ0五、本教程不涉及Visual SourceSafe图形用户界面操作的解释说明,对指定功能的具体操作步骤请查看联机帮助的相关部分。可以通过列于该功能之后的英文说明在联机帮助中搜索到相关内容。51Testing软件测试网 dH,F@ shK

'_+E x7l3v oq:uA"W0六、在其他Visual Studio产品中(例如:Visual C++)可以集成Visual SourceSafe的功能,本教程不涉及有关在其他集成开发环境下如何使用Visual SourceSafe功能的内容,这部分内容主要针对普通用户。对这些内容的了解,在阅读完本教程之后,将会变得容易。此外,某些操作在Visual SourceSafe环境下使用更为方便。51Testing软件测试网9f+jc'|7Jj

2 概述

h%x3m$e8T*R r+c"@2J051Testing软件测试网"Ensq xr$Sa

  Visual SourceSafe(以下简称VSS)是一种版本控制管理工具。它通过将各种类型的文件(包括:文本文件、图像文件、二进制文件、声音文件、视频文件等)存入其内部数据库的方式,帮助你有效地管理工程(Project,关于VSS中工程的概念请见下面)。它允许你在多个工程间共享同一组文件;你可以将一个文件添加到数据库中,以便其他相关人员使用;任何对文件的更改将被记录下来,以便在任何时候可以恢复到该文件的某个旧版本。51Testing软件测试网u,NH T2@ F5Za9?i

51Testing软件测试网9gm#v;?1d Z0O*^3i

  VSS的工程组织方式使团队协作开发变得更为容易和直观。一个工程是一组存放于VSS数据库内的任意类型的文件,一个工程类似于操作系统中的目录,但VSS为其提供了版本控制、历史记录、文件合并等更多的功能支持。

1b3R(j Q1z9N:S:}0

3 管理员部分

-GTY+h&WO d@0

3.1 维护用户列表(Maintain the User List)

Kg;k)[9E-K6tK\z0

3.1.1 添加用户(Add a User)

&pc)S*m r+^ PNV){)t0

  此处略,详细内容请查阅联机帮助。

1I{/G7t-l7M7V'u0

3.1.2 更改密码(Change Passwords)

*oJ3ot#@H v@)]s0

  此处略,详细内容请查阅联机帮助。

bL#AT\ y0

3.1.3 创建用户列表(Create a User List)

qta7_H'd:w3U4}'Zt0

  此处略,详细内容请查阅联机帮助。

:]*{ mw*Gzl0

3.1.4 删除用户(Delete a User)

z%{"@'D?0

  此处略,详细内容请查阅联机帮助。51Testing软件测试网{S.y[f v_j m

3.1.5 编辑用户属性(Edit User Attributes)51Testing软件测试网w8n+\*p,P({-k

  此处略,详细内容请查阅联机帮助。51Testing软件测试网8F dJe WM$Z(S2?

3.2 管理数据库(Manage the Database)51Testing软件测试网)v&Kqe*d

3.2.1 分析数据目录(Analyze the Data Folder)*
;QUj `?d,nr0建议你定期备份完整的VSS数据目录(参见数据库打包)。VSS数据目录中包含有全部工程和文件的数据库信息。由于网络或操作系统的某些故障,VSS中的文件可能存在错误和不一致问题,Analyze VSS DB工具被用来查找和修复这些问题。在运行该工具前,需要锁定(Lock)所有用户并要求他们退出VSS,用户可以在一个数据库被锁定时保持文件的签出状态(参见锁定数据库)。建议分两次运行Analyze VSS DB工具,第一次修复错误,第二次核查是否仍然存在没有被修复的错误。数据目录的具体位置是由Data_Path初始化变量在SRCSAFE.INI文件中指定的(参见定制SS.INI和SRCSAFE.INI文件)。

^d&I3@[0

3.2.2 数据库打包(Archive Databases)*51Testing软件测试网X4O-@%m/`J

  你可能需要定期地备份VSS数据库,或者数据库的某一部分。VSS Administrator工具提供了此项功能。它可以:51Testing软件测试网j'B ?d } qfC5DP|

节省VSS数据库服务器的磁盘空间。51Testing软件测试网Xo%^%D,c
加快显示历史记录操作(Show History)的速度。51Testing软件测试网6rEC?0O7@&^;GV
便于在多个VSS数据库间传递文件和工程,保持历史记录完整无缺。51Testing软件测试网 Rp9[6\7~g,WN'jx
备份全部或部分VSS数据库内容并压缩成文件。51Testing软件测试网)d!j3n&]%b;@

~*yR1bY5f1]H"W@]5v2g [03.2.3 清除临时目录(Clean Temporary Folder)51Testing软件测试网$BI@pF Y!i

  VSS通常在运行时把临时结果放在临时目录里,并在退出前将之删除。由于某些原因,例如非正常重启,可能导致临时内容残留在目录中。作为管理员,你有责任定期清除临时目录的内容。每隔几周一次,当没有任何用户运行VSS或VSS Administrator时,请清除临时目录的内容。临时目录的具体位置是由Temp_Path初始化变量在SRCSAFE.INI文件中指定的(参见定制SS.INI和SRCSAFE.INI文件)。51Testing软件测试网?M HH qJM

3.2.4 锁定数据库(Lock a Database)

m-BeD&M\2F {0

  数据库锁定功能将不会自动锁定那些当前已经登录的用户,你应该在锁定数据库之前要求登录用户退出VSS。在重新允许用户使用VSS之前,需要解除对数据库的锁定。51Testing软件测试网;dWZ1h&]m

3p PWbPg-F(p0
C@Q-E Xw03.2.5 数据库恢复(Restore Databases)

|1w\,q,sF2^0

  此处略,详细内容请查阅联机帮助。
(mg+NtTQ%{051Testing软件测试网+^oU]6bq N }O
3.2.6 使用多个数据库(Work with Multiple Databases)*

s3T hq @ N_3R0

  缺省时,VSS将所有文件集中放在一个数据库中。如果可能,应尽量使用一个数据库存放所有文件,这比分多个数据库存放要好,因为:
p?"tT+t4d:c?0你不能在多个数据库间共享(Share)文件(参见对文件和工程的Branch/Share操作)。
1p~v(VW0将位于多个数据库中的内容集中在一起是比较困难的,需要使用VSS Administrator的Archive功能(参见数据库打包)。
-l;~ ]"_#^0出于安全的考虑,VSS的用户信息,包括密码在内,是和数据一起存放的。
\"I-Z!Oi4uo#^0如果为了安全起见,要将信息拆分成多个独立的数据库,
+Ny*z4M2Cv!Ex,Mv0
2Il]R/]0  缺省时,VSS将所有文件集中放在一个数据库中。如果可能,应尽量使用一个数据库存放所有文件,这比分多个数据库存放要好,因为:你不能在多个数据库间共享(Share)文件(参见对文件和工程的Branch/Share操作)。
G s"OzaI?0将位于多个数据库中的内容集中在一起是比较困难的,需要使用VSS Administrator的Archive功能(参见数据库打包)。51Testing软件测试网6nH)Ilk `%u)U]
出于安全的考虑,VSS的用户信息,包括密码在内,是和数据一起存放的。如果为了安全起见,要将信息拆分成多个独立的数据库,这种信息存储方式将带来极大的便利,但你必须为每个数据库都单独添加用户。
I|7B$Wras1T8W j_051Testing软件测试网.|1_0lwV)}C pM

"c].]F9R;vA$w7Z03.3 有关权限的话题(About Rights)

;BKk dJ^0

3.3.1 权限的传递(Rights Propagation)

,q^,AN v!uZM0

  当你添加了一个新用户,并为该用户设置了针对某个工程的权限时,将在VSS数据库中建立起一个assignment。该assignment将会沿着工程树向下传递直至遇到另一个assignment。51Testing软件测试网fV&^6\:n![3n#D

  例如:针对工程"$/" ,你为用户A指定了Add权限(参见安全访问权限),而对于工程"$/Sample",你没有为用户显式指定权限,则该用户将对工程"$/Sample"自动拥有Add权限。当你在工程"$/Sample/BusinessObject"处为其指定了Read权限后,将阻止早先assignment的向下传递过程,所以用户A对该工程(指"$/Sample/BusinessObject")及其子工程都只具有Read权限了。

-O1D6wcS&L%Uq0

  当你首次添加一个用户时,该用户在工程"$/"处被赋予的权限由"缺省权限"决定,缺省权限是通过在VSS Administrator里设置Project Security属性页的内容来定义的。你可以通过修改该页内容,全局性地变更所有用户的缺省权限。51Testing软件测试网?3[]5Oam8O

3.3.2 安全访问权限(Security Access Rights)

#l4lTH9v6H/p3A0

3.3.2.1 缺省安全设置

1fJ$N"sw'F0

  当安装VSS后,缺省安全设置将被启用。你可以利用定制的方式,使某些用户拥有对某些工程和某些VSS命令的特定权限。

N@(VE5g Z` w0

  缺省安全设置很简单,当添加新用户时,你只有两种级别的访问权限可供选择:51Testing软件测试网? \Utq+z RU

只读权限(Read-only rights):用户可以查看VSS中的任何内容,但不能更改。51Testing软件测试网uXCu@"]RE
可读写权限(Read/write rights):用户可以查看和修改VSS中的任何内容。

v q A'@kk5D-c0

  如果这样的访问权限级别足以应对日常使用,那么就无需再增强安全控制的级别了。

'O4s&SD&bv,a a0

  所有的VSS安全管理都在VSS Administrator中进行。任何能运行该程序的用户都可以改变VSS的任意特性,所以最好只有管理员才使用该程序。51Testing软件测试网3PQ&h7`I

3.3.2.2 更高级别的安全控制51Testing软件测试网$y{Q`E]h

  在VSS中,对工程的安全性控制,是通过制定用户访问权限来实现的。每个工程仅能被那些具有相应权限的用户访问到,每个命令仅能被那些具有相应权限的用户使用。可以通过VSS Administrator来定制权限,以达到更高级别的安全控制。

2jyv5~d"K$PB0

  以下是VSS的权限级别列表,下列每种权限都拥有该权限之前的全部权限。例如:拥有Check Out权限的用户,也将同时拥有Read权限。(参见附录A2:VSS中部分命令的对应权限级别)51Testing软件测试网 B;U fv!a,dn"^

权限 描述51Testing软件测试网 t#Rc E9Q,D!ryT
Read (R) 类似于缺省安全设置中的只读权限
x9x;Ho8b7X6e0Check Out (C) 可以使用Check Out/Check In/Undo Check Out等命令对文件进行修改51Testing软件测试网%mj%g)Hp$m
Add (A) 可以使用Add/Delete/Label/Rename等命令对文件进行修改51Testing软件测试网I'_&i?#l+P\
Destroy(D) 可以使用Destroy/Purge/Rollback等命令对文件实施永久删除操作
x@QG|g9x0

f+R6We/Tj[0

4 普通用户部分51Testing软件测试网uOCo~8kr

4.1 对工程、文件的一般性使用(Normal Use about Projects and Files)

#Fj6ovy M0

4.1.1 打开/关闭数据库(Open/Close a Database)

@B:Q D#I4M:H iC-q0

\LZ II0j0  此处略,详细内容请查阅联机帮助。

Pve9qO J?2|0

4.1.2 创建新工程(Create New Projects)

;V1H ?O0_0

*^dF#CS0  此处略,详细内容请查阅联机帮助。

gHuzUs"kA0

4.1.3 添加文件、目录、工程(Add Files,Folders,and Projects)51Testing软件测试网*lY_:RMy

$dxx^}MS2T0  此处略,详细内容请查阅联机帮助。

'|:Q*@^Dl0{2ZH ~0

4.1.4 删除和恢复文件、工程(Delete and Recover Files and Projects)

z2P-j9|LiC051Testing软件测试网 X6`6H3t9Iy

  VSS提供了3种删除文件的方法:

pbh `w _wxE0

%o-]E&J0x:`%S0

y/t Gv6Y0  对于共享文件,Delete和Destroy仅将文件从当前所选工程中删除掉,其他共享了该文件的工程,以及VSS数据库中,仍留有此文件。

!P*_F0l!z0X{6pl2w0

4.1.5 移动文件和工程(Move Files and Projects)51Testing软件测试网F:S}$OT%E&x

K2Wc(@#p"] q0  移动一个文件的唯一方法是,在文件新所在位置的上一级工程(parent project)处使该文件共享(参见对文件和工程的Branch/Share操作),然后将原有工程(original project)下的该文件Delete或者Destroy(参见删除和恢复文件、工程)。移动后,文件的历史记录将被保留。51Testing软件测试网)[)JT6_v)e3YL

51Testing软件测试网#TR'^8}vA D1L-I

  通过使用Move命令,你可以将一个子工程(subproject)从某个上级工程重置到另一个工程下。该操作不会改变子工程的内容和历史记录,但它会影响上级工程的历史记录(包括子工程所在的原有上级工程和新的上级工程)。当移动一个工程后,你将无法重建原有上级工程的某个旧版本。51Testing软件测试网0p/jm(eP dzI:_

4.1.6 重命名文件、工程(Rename Files or Projects)

J"q'qGm)c+S7bb0

NAy:W%~I?m%aqk0  若某个文件被多个工程所共享,对该文件的重命名将影响所有工程,而在Branch状态下,则不影响(参见对文件和工程的Branch/Share操作)。

.`.a uGc$]"rp(@1j0

4.1.7 设置工作目录(Set Working Folders)51Testing软件测试网N+z2~Ceqq M Zb

51Testing软件测试网 N"b2U,g6O{L;YAfe

  此处略,详细内容请查阅联机帮助。

`M%W\4wK Xgex0

4.2 签入、签出、获取、查看及相关操作(Check In/Out、Get、View and Other Related Use)51Testing软件测试网Mta:y2hn6b L"u

4.2.1 签入签出操作(Check In and Check Out Files)51Testing软件测试网dn~@!RI2R

RTY\%Q0  此处略,详细内容请查阅联机帮助。51Testing软件测试网Ac"pI?

4.2.2 撤销签出(Undo Check Out)

:C v!`*k^%K"q1xd5i0

8GM,Wn,{b,j2T|t0  执行该操作时,若用户选择了替换本地文件,则用户将丢失最近一次签出后对该文件在本地的更改。

%[UA e T0

4.2.3 获取最近版本(Get Latest Version)51Testing软件测试网dmbm.gf

6P:[(L D _ |J0  此处略,详细内容请查阅联机帮助。51Testing软件测试网U5Hbn/U

4.2.4 获取早期版本(Get Earlier Version)51Testing软件测试网]Ac-[y

.C wNLm~TU0  此处略,详细内容请查阅联机帮助。

gd)N4A%V8Q0

4.2.5 获取和查看文件、工程(Get and View Files and Projects)51Testing软件测试网 |%g3WcD

!EJx\7Rs%m0  Get操作将文件或工程拷贝至本地的工作目录,并设置为read-only属性。可以用View操作查看文件内容,此时用户无需设置工作目录。

'dq"]9nOS051Testing软件测试网h VqQ({I1Rk l$^)uQ

  尽量不要删除vssver.scc文件。本地工作目录及每个子目录下都包含一个这样的文件,VSS利用其中记录的信息确定本地目录中哪个文件已经更改了。删除后,将使新一次的Get操作速度减慢。51Testing软件测试网$W w+W_%_}2E

4.2.6 回滚到以前版本(Rollback to Previous Versions)51Testing软件测试网(R5{#r;n|lQ

51Testing软件测试网&D ]2jeAW

  该操作将使文件的内容恢复到先前某个版本时的状态,它将使所有在该版本后所做的改动丢失。如果你所回滚的文件被多个工程共享,则操作只影响你所指定的那个工程,并且它会自动实行Branch操作(参见对文件和工程的Branch/Share操作)。建议你使用虚拟回滚(Virtual Rollback),它将不会使随后的改动永久丢失。具体操作如下:

  • 选择你要回滚的文件并签出
  • 使用Get命令获取某个原有版本到本地
  • 签入该文件
51Testing软件测试网C+o CQ.h.iq+f!g

51Testing软件测试网x'Li5SLdnz

4.2.7 多人同时签出一个文件(Check Out Multiple Files)*51Testing软件测试网 Z}!Ce V*O @

BP ff9ly+p0  缺省状态下,一个文件只允许一个人签出,管理员可以通过修改配置,允许多人同时签出。此时,VSS将跟踪所有签出该文件的用户。每当用户签入时,VSS都将和当前存于数据库内的最新版本进行比较,若用户修改的是同一文件的不同处,VSS将进行简单的合并(Merge),否则提示用户,并且不允许签入。用户可以通过VSS提供的Visual Merge工具,比较存放于VSS数据库中的文件和本地文件的异同,手工修改本地文件,直到认为已经可以签入时,方才执行最终签入操作。(参见合并

@C9vG nn$fl0

4.2.8 合并(Merge)*

7g+` j#_;V051Testing软件测试网e(@G"K\T

  在VSS中,合并可能发生在3种场合下:使用Multiple Checkout的工作方式;合并原先已经Branch了的文件;获取(Get)文件。

&i2Iz*hr+x$vI5Z0

:{;Y`w5znYb0

eSU4I@\9A1n y/E0  在完成一个合并之后,VSS遵循如下规则:

  • 如果仍有冲突,VSS维持文件的签出状态,为了使文件能顺利签入,你必须排除这些冲突。
  • 如果你使用Merge Branches命令,将一个文件合并到一个工程中,而该工程中的对应文件已被签出,该文件将继续保持签出状态(参见对文件和工程的Branch/Share操作)。
  • 在任何其他时候,VSS将会提示你,或者在合并后自动签入,或者保持文件的签出状态以使你在更新VSS数据库中内容之前再核查一边。
51Testing软件测试网 t8n3E8z+ch Pg1t

Q8F9[7p$Cd051Testing软件测试网'\a%Y(|'j r e

  缺省情况下,当发生冲突时,VSS将启用其Visual Merge工具。51Testing软件测试网Ui(ZI{2XP

4.2.9 排他性签出(Exclusive Check Out)*51Testing软件测试网szWY(Z;h

51Testing软件测试网 Dq3O?:O"E~d

  允许多人同时签出一个文件是针对整个VSS数据库而言的,但用户仍可以根据实际情况,针对某些文件修改该规则。对某个文件实施排他性签出,则其他用户将无法签出该文件,直至该用户使用了签入操作。

.W.@Eo:B;a!z0

4.2.10 对工程的Cloak操作(Cloak Projects)*51Testing软件测试网u+U A"|#I6Z

51Testing软件测试网#J3^Yr1d g|

  若对某工程实行了Cloak操作,则当对该工程的上一级工程进行Get/Check In/Check Out/Undo Check Out/Project Difference操作时,将不会影响该工程及其子工程。而在该工程上进行类似操作时,则和平常得到的结果一样。这一属性将传递给其下的子工程。

2Qq"^gx051Testing软件测试网1xgi5Sx |i"M

  例如:某个工程其路径为$/Application,下面有三个子工程:$/Application/Code,$/Application/Test,$/Application/Docs,而Docs工程下的内容可能对你没有任何用处。当你每次从$/Application处进行Get操作后,都需要从本地删除多余的Docs目录。此时可以对Docs进行Cloak操作。这样,每次的Get操作将只把Code和Test下的内容放到本地。如果你需要获取Docs工程下的内容,则可以单独从Docs处进行Get操作。

cPS"y9YV1K L0U.M/e0

4.3 Branch、Share、Label和Pin操作(Branch、Share、Label and Pin)51Testing软件测试网2G9e"k2j ?

4.3.1 对文件和工程的Branch/Share操作(Branch and Share Files and Projects)*51Testing软件测试网8N o_3PL.mc @g `#R

7rxN B/S#XZ g S,L0  在VSS中,通过Share操作,一个文件可以被多个工程共享,在任何一个工程中对该文件的更改,都将反映到其他相关工程里。51Testing软件测试网Oh2uoF5qqw

51Testing软件测试网 ev R3v$L.i&e9f

  Branch操作则消除这种共享,每次将一个被共享的文件拆成两个分支,在不同工程中分别跟踪该文件。通过查看文件属性的Links属性页可以了解该文件被哪些工程共享,通过查看Paths属性页可以了解文件的分支状况。51Testing软件测试网'UaFc7|/NzC

0gts3{`Y'Vy0  例如:产品目前的正式版本为2.0(工程路径为$/Application),在加入新功能后将升级为3.0。但在开始升级的过程中,其间的一个过渡版本2.1存在bug,需要修改。此时可以进行如下操作:选择被Label标识为2.0的那个版本(参见给文件、工程指定标签),利用Share功能创建过渡版本(工程路径为$/Application2.1),此时两个工程中的文件是共享的,且$/Application2.1中的所有文件都处于Pin状态(参见Pin操作),即:在向3.0升级的过程中,对$/Application中相关文件的更改,将不影响$/Application2.1下的内容,但此时文件仍是共享的。仅对需要修改bug的文件采取Branch操作。这样做的好处是,中间版本的bug修改工作和3.0的升级工作可以同时进行,并且最大限度的降低了所需的存储空间。

@?1^ d#{jQ0

4.3.2 给文件、工程指定标签(Label Files and Projects)*

Ak|S D,gK d0

i/Q.q ^-MSd@.oQ0  VSS使用3种方式跟踪文件的历史记录:内部版本号,日期,用户自定义标签。

ip o0J9TkC:?W0

xKNE+N9U;D0  标签可以是一个不超过31个字符长度的串,例如:"1.0"、"2.01b"、"Final Beta"、"Approved for QA"。应用Label功能,用户就可以获取某个特定时期的软件内容了。所有当前工程下的文件和子工程都将继承该标签。

Q PUt&mg051Testing软件测试网y)O3b1~w@|

  注意下面几点:

  • 当使用Label功能时,表明你在所选工程的历史记录里创建了一个新的版本,但文件和工程本身的内容并未发生变化。
  • 对某个工程的某个标签再次使用Label操作将覆盖原来的标签内容。
51Testing软件测试网+z)kUMh:l

%gmS9B} H(?4G051Testing软件测试网 Jw]0vv

  请参见附录A1:同时维护一个工程的多个版本

0O{ t7eQP1{0

4.3.3 Pin操作(Pin)*51Testing软件测试网A!lct {7y5b{

kBk\}$uUt0  该功能对共享文件很有用,尽管它的使用不仅限于共享文件,也包括其他任何文件。当你对一个文件实施Pin操作后,你将不能对之做任何修改。如果一个文件在Pin之后又被实施了Share操作,而被Pin的那个版本同时也是被共享的版本,则所有共享该文件的工程都不能更改该文件。如果一个文件先被实施了Share操作,而后在某个工程中被Pin了,则除了这个工程外的其余工程仍可以更改该文件(参见对文件和工程的Branch/Share操作)。
M:J0]y+n-s"[O051Testing软件测试网3o0Ve Q5w

4.4 其他操作(Other Use)51Testing软件测试网6BO z0{8L2{E

4.4.1 扩展关键字(Expand Keywords)*51Testing软件测试网:X+_?.Oe+pV

?+M+c6p/`O%lE2XZ L"E0  VSS可以将某些指定信息(例如:VSS内部版本号)直接插入文本文件中。用户只要将某些关键字放入文件的注释中,每次添加(Add)或签入(Check In)文件时,VSS都会自动查找这些关键字,并将相关信息置于其后。51Testing软件测试网zD]+o(V5a-m9N

)j{-PA9O-Zh$Q:u0  VSS中常用的关键字:

关键字描述
$Archive: $文件在VSS中的路径名
$Author: $最近一次更改文件的用户
$Date: $最近一次签入的时间
$History: $文件的历史记录
$Revision: $VSS内部版本号
$NoKeywords: $使VSS对其后的所有关键字不进行扩展

~#c8}3d4d8^3U6b@0

2Qby3S*t0  例如:51Testing软件测试网[!F Q&e Q/ha L

BR:Of1q5k1^t-K0  在某文件中加入如下一行:

.kuk+e[6e/Rp_051Testing软件测试网|$A9D(A0^LS

  $Revision: $

/NMD%[E^2e C0

?#n$vbjC:](q"E0  若当前该文件在VSS内部的版本号是22,则签入后VSS会将之修改为:

4a_*Gq d4e051Testing软件测试网C1zL \)K}R9|

  $Revision: 23 $

h{2x0\+OCQHp B0

4.4.2 使用Shadow目录(Work with Shadow Folders)*51Testing软件测试网K {NB.F5|;i

H4v? |_:@bt0  Shadow目录位于服务器端,包含了工程中所有的文件。这些文件既非位于VSS数据库中的master copy,亦非位于本地工作目录的local copy,而是最近一次签入的所有内容。Shadow目录应该由管理员来设置。

+Ql.Z `lG0

?&u,O @;@ ?9o0  是否使用Shadow目录功能是可选的,通常在如下两种情况下可以考虑使用该功能:

  • 为使某些用户能查看文件(但不能更改),这些用户可能没有对VSS的访问权限。
  • 不让你的本地工作目录保留可编译的软件副本。为使每个用户都能得到一个最新版本的软件,所有用户可能希望在某个目录下集中进行编译,而非在各自的工作目录下编译。在这种情况下,Shadow目录功能通常和添加(Add)、签入(Check In)之后的Remove Local Copy结合使用。

lZ2D&BO-@DVj051Testing软件测试网"kt n2~X"V`

6jt$y:Z:c;d0  Shadow目录不会跟踪子工程的变化,例如:你有一个被Shadow的工程$/A,包含两个子工程:$/A/1和$/A/2,而你又将$/A/2重命名为$/A/B,这种变化将不会被反映到Shadow目录中。你可以手工修改,或者利用Reconcile All功能,使之保持同步。

2F[^ w_q0

4.4.3 性能优化(Optimize Performance)*51Testing软件测试网jS1] AHo ~#w[9]

^3_8_7d/q,ZE0  有两种方法可以改善VSS的性能:尽可能多的将内容通过网络拷贝至本地来做;修改初始化文件对VSS的性能进行微调。

E8kB Z!UW[B0

Y7o!v9~R;}H1v0  具体优化措施:

Jcs8E'S+g!l(RME051Testing软件测试网 ctds ~1B

4.4.4 查找文件(Search for Files)

,b(k qk*H051Testing软件测试网gk3P!W8Z2{b/O%|

  VSS Explore的list view缺省时只显示当前工程中的所有文件。通过使用Search命令,可以只显示符合指定要求的文件。例如:只显示.h文件,只现实被签出的文件。Search命令是允许递归的。

;]!@sdT0

4.4.5 设置密码(Set Passwords)51Testing软件测试网:G(u)N9jI,crq

51Testing软件测试网wBr8MsUF3O

  如果VSS管理员指定域账号为VSS登录账号,则用户登录VSS时将不会提示输入密码。51Testing软件测试网LZ4`7|&n-e E

4.4.6 编写批处理文件(Writing Batch Files)*

HrSj!XMT[4M051Testing软件测试网~ rm#I'm

  在编写批处理文件时,一些在命令行方式下使用的交互手段需要改变。

D'l)G3sus(m Hu q"`2R6J I051Testing软件测试网E!N}Y Ld

  • 屏蔽输入(Disable Input)51Testing软件测试网/IDa | `F

    如果你的批处理文件中包含了一系列VSS命令(它们可能需要整夜运行),你一定不希望程序执行期间会停下来提示用户输入信息。有3个命令行选项可以解决此类问题。51Testing软件测试网FT$l|#\!U

    (y7` P}US0缺省时,VSS在执行诸如添加(Add)、签入(Check In)等操作时会提示你输入注释(Comment),利用-c选项可以避免该类提示:

    命令描述
    -c-不添加注释
    "-cHello"使用Hello字串作为注释
    -c@COMMENT.TXT使用comment.txt文件的内容作为注释

    ^ a vz0u051Testing软件测试网NtTZHe/h/KEZ

    此外,VSS通常会要求用户回答yes或no,你可以使用-i选项避免此类问题:

    命令描述
    -i-y对所有此类提问自动回答Yes
    -i-n对所有此类提问自动回答No
    -i使用缺省回答

    hw^L1K e1V8x051Testing软件测试网,O(o{:_N7V ag.O

    VSS也可能会提示登录名,你可以使用-y选项提供足够多的信息。

    7_%Nt!UwYEoYyQ]0
  • 重定向输出

    ;e%E \k*oa0缺省时,VSS将所有输出定向到屏幕,在命令行状态下你可以使用-o选项分页输出,而在批处理文件中你同样可以利用-o屏蔽输出或重定向输出。

    命令描述
    -o-屏蔽输出
    -oRESULTS.TXT重定向所有输出到文本文件results.txt中,如果该文件已存在,输出内容将追加到该文件末尾。
    51Testing软件测试网-yv@/b8wP \:V#D

  • 使用命令行返回值

    (Uu/{ y4U%vYV u0在命令行状态下运行VSS时,VSS会设置一些返回值来标明运行状态。你可以在批处理文件中根据VSS的返回值采取相应措施。

    返回值描述
    100表明出错,例如:VSS无法找到数据库文件,或者你试图签出某个早已被签出的文件。
    1表明一个不是很严重的错误,将在如下三种情况下发生:
    #w@x\x vbY0当你使用ss Dir时,没有找到任何条目。51Testing软件测试网N^7g0[\3S+l8g
    当你使用ss Status时,至少有一项被签出。51Testing软件测试网2T%d*n-A+~%_"{0d
    当你使用ss Diff时,至少有一个文件不一致。
    K9_(m*s If0所有这些情况表明,即使本次操作是成功的,你执行的下一个VSS命令也可能操作失败。
    0VSS成功执行。
    51Testing软件测试网!f yt` ^C

$\8|E%`h9Y6f+kD)T051Testing软件测试网j+{'zwh @

4.4.7 定制SS.INI和SRCSAFE.INI文件(Customize the SS.INI and SRCSAFE.INI Files)51Testing软件测试网SB+B S U w](O3Y

51Testing软件测试网[ {*l6p[o8G

  VSS有两类初始化文件,它们包含了VSS的一些环境变量:SS.INI,每个用户都有一个这样的文件;SRCSAFE.INI,仅有一个,定义了VSS的一些全局变量,只有管理员才有权修改它。51Testing软件测试网4J @ZD1qdc

附录 同时维护一个工程的多个版本(Maintain Multiple Versions of a Project)

G\.U"Tt1T8BBgIIz051Testing软件测试网[L%M j0u6r

  你可以使用Share/Pin/Branch的方式,也可以使用Label方式。如果你所处的环境只要求少量的改动,比如:轻量级的patch,使用Label比较合适;如果你正在规划大量的开发内容,使用Share/Pin/Branch比较合适。例如:在软件处于Beta版时,你可以通过Label功能冻结(freeze)之,并同时修改Beta版的bug。当你正同时维护着某个产品的1.1版和2.0版时,合理的做法是,为每个版本创建一个新的工程,Share并Pin所有的文件,在需要的时候Branch。当1.1发布时,你可以将1.1版的工程Label,而后将对1.1版的改动重新Merge到2.0版中。下面的几个场景为你使用Label功能提供指导:51Testing软件测试网8RB}r-ZN

*nj9Y jf9o |My{0场景1:理想情况51Testing软件测试网0?%]O2w%[(kI@ H`/q

51Testing软件测试网%\A{%D.n?:E3S

1、对即将到达Beta 1版的工程进行开发和测试51Testing软件测试网\x2B z$Z-pG$O
2、当你认为时机适宜时,将之Label为"Beta 1"。
eZz{0l,i03、开始Beta 2版的工作。

Kk'[~/TV/L%i#fT$o0

!D*rv]4M0场景2:文件A的某个版本被错误地包含在Beta 1版中

;d%?"@1W HG k)f9c051Testing软件测试网%nk.s Sls]

1、对即将到达Beta 1版的工程进行开发和测试。51Testing软件测试网 o.~O IW,CV!P0F
2、当你认为时机适宜时,将之Label为"Beta 1"。
BM-YcC7F03、开始Beta 2版的工作。
)][TTfb5`:_7}S2B8m04、如果发现文件A某一时期的版本被错误的包含在了Beta 1版中,选择该文件的正确版本并Label为"Beta 1"。51Testing软件测试网8eM)N#\C[ ^
5、获取(Get)Beta 1版的工程。51Testing软件测试网C&Y bjD7r

.N] Da`CUTZ0场景3:需将bug-fix后的文件A被包含在Beta 1版中,而其余文件未曾改动51Testing软件测试网m i%S'[4q/s

!l0Kr,v.VS&_A1L1n[[01、对即将到达Beta 1版的工程进行开发和测试。51Testing软件测试网'V@2l?b;cq
2、当你认为时机适宜时,将之Label为"Beta 1"。
,j n4FE8nR03、开始Beta 2版的工作。
cC$l3V Nd$r04、你发现,包含在Beta 1版中文件A的那个版本存在bug,必须改正,而工程中的其余文件则不须改动。
o4` ^ o\05、签出该文件,改正,然后签入。
:x1r!Y DB'Z*}06、将工程重新Lable为"Beta 1"(你将被询问是否确认删除原有标记)。

A#w2[t`6Gu#m051Testing软件测试网|$YTPGt

场景4:需将bug-fix后的文件A包含在Beta 1版中,而其余文件也作了改动51Testing软件测试网X3b)E)s'ff

0A1T^b;`z01、对即将到达Beta 1版的工程进行开发和测试。
dQZ B xO6A g,Fg02、当你认为时机适宜时,将之Label为"Beta 1"。
/w7V g-i H,Lh:e03、开始Beta 2版的工作。51Testing软件测试网0o,yJ;?3Y:` F
4、你发现,包含在Beta 1版中文件A的那个版本存在bug,必须改正,而工程中的其余文件已经改动过且已经被签入。
)~h*yHFjiC05、签出该文件,改正,然后签入(此时该文件的VSS内部版本号将自动加1)。
q0f"q*Y*Agy3L06、将该文件Label为"Beta 1"(和工程的Label同名),这将使该文件的现有版本被指定为"Beta 1"。51Testing软件测试网9P^#kP-U!`"E

2s2La _C/x0场景5:文件A的一个原有版本需要进行bug-fix,并加入Beta 1版中

^F-TP#{7v~f}f0

,@V pe+{4j dD.i1C01、对即将到达Beta 1版的工程进行开发和测试。
4Jy$Ct'x6M8e02、当你认为时机适宜时,将之Label为"Beta 1"。
!a$T;q6t%w/T2~F-t03、开始Beta 2版的工作。
*z"R3aLp5Mb ~3tn04、你发现,包含在Beta 1版中文件A的那个版本存在bug,必须改正。例如:文件的当前内部版本号是6,且包含了为达到Beta 2版所做的某些改动,而你不希望将这些改动并入Beta 1版中。51Testing软件测试网!Z%@{3l2EC:W~&b
5、签出文件A(Version 6)
,{%a(d k1v6}.Q06、获取Version 4,覆盖Version 6的本地版本。
doT/@ ]}|-D k;J07、修改该文件Beta 1版中的bug,然后签入。这将使文件A的内部版本号升至7(Version 4的内容加上bug-fix后的内容,但没有包含Version 5和Version 6的内容)
{F2tE!m*c A08、将Version 7 Label为"Beta 1"。这将使文件A的Version 7版被指定为"Beta 1"。现在,如果你尝试获取Beta 1版的工程时,你将会得到包含bug-fix后的文件A(被单独Label)连同原来Label为"Beta 1"的工程中的其余文件。
f rJsnP;L%_e:dn%w*O09、为了继续Beta 2版的工作,需要恢复在Version 5和Version 6上的改动,再次签出文件A(Version 7)
P2Gm.K}(c010、获取Version 6。
"j*e'Z'q(o*t+L011、覆盖Version 7的本地版本,或合并之(这将使本地版本变成Version 6的内容加上你在Version 7中为"Beta 1"所做的bug-fix)。51Testing软件测试网#^-G}_$|&n px
12、继续修改文件A的本地版本直到你满意,然后签入。这将产生文件A的Version 8,现在你将可以继续Beta 2版的工作了。51Testing软件测试网8]8F,izS

51Testing软件测试网$iXk,MN
51Testing软件测试网 sD;lWx(l

TAG: study

 

评分:0

我来说两句

我的栏目

日历

« 2024-04-07  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 61381
  • 日志数: 76
  • 图片数: 1
  • 建立时间: 2007-03-07
  • 更新时间: 2008-05-31

RSS订阅

Open Toolbar