1 VSS概述
版本控制是工作组软件开发中的重要方面,它能防止意外的文件丢失、允许反追踪到早期版本、并能对版本进行分支、合并和管理。在软件开发和您需要比较两种版本的文件或找回早期版本的文件时,源代码的控制是非常有用的。
Visual SourceSafe 是一种源代码控制系统,它提供了完善的版本和配置管理功能,以及安全保护和跟踪检查功能。VSS通过将有关项目文档(包括文本文件、图象文件、二进制文件、声音文件、视屏文件)存入数据库进行项目研发管理工作。用户可以根据需要随时快速有效地共享文件。文件一旦被添加进VSS,它的每次改动都会被记录下来,用户可以恢复文件的早期版本,项目组的其他成员也可以看到有关文档的最新版本,并对它们进行修改,VSS也同样会将新的改动记录下来。你还会发现,用VSS来组织管理项目,使得项目组间的沟通与合作更简易而且直观。
VSS可以同 Visual Basic、Visual C++、Visual J++、Visual InterDev、Visual FoxPro 开发环境以及 Microsoft Office 应用程序集成在一起,提供了方便易用、面向项目的版本控制功能。Visual SourceSafe 可以处理由各种开发语言、创作工具或应用程序所创建的任何文件类型。在提倡文件再使用的今天,用户可以同时在文件和项目级进行工作。Visual SourceSafe 面向项目的特性能更有效地管理工作组应用程序开发工作中的日常任务。
1.1 VSS中的文件
当你要修改某个文档时,需要先从数据库中将它签出(check out),或者告诉VSS你要编辑该文档。VSS会将该文档的副本从数据库中拿到你的工作文件夹(working folder)中,你就可以修改你的文档了。如果其他用户再想对同一文档进行修改,VSS会产生一个信息,告诉他,该文档已被签出(check out),从而避免多人同时修改文档,以保证文档的安全性。
当你完成修改之后,需要将文档 签入(check in)VSS。这个操作从你的工作文件夹(working folder)中复制被你修改的文档,并将它放回VSS数据库,以便其他用户能够及时看到文档的改动。VSS能够保存文档的所有改动,并显示最新版本,同时早期版本也会被跟踪记录下来。VSS对反增量技术的运用,仅需要用很少的磁盘空间就能使得用户获取文档的所有版本。
如果你没有修改文档,你可以执行撤消签出(undo check out)命令,文档将被保存为被签出(check out)之前的状态。
如果你只需读取某一文档而并不需要编辑它,你可以执行取出(get)命令,将文档放入你的工作文件夹,再选择查看文档(view),来查看你的文档的最新版本。
1.2 VSS中的项目
项目(project)是指用户存储在VSS数据库中的所有文件(file)的集合。用户可以在项目之间或项目内部实现文件的添加(add)、删除(delete)、编辑(edit)、共享(share)。一个“项目(project)”在很大程度上类似于一个普通系统的的文件夹,不同的是它能更好地支持文件合并(merge)、跟踪(archive)和版本控制(version control)功能。
文件保存在VSS数据库中的项目(project)里。你无须管理存储在VSS 中的文件正本,除非你要检查或与其它拷贝进行比较。
VSS为每一位用户提供了一份备份文件放入工作文件夹(working folder),供用户对文件进行查看与编辑。尽管没有工作文件夹也可以查看文件,但要想真正实现对文档的处理,必须建立工作文件夹。
1.3 VSS的版本控制功能
VSS能够保存文件的多个版本,包括文件版本之间每一处微小的变动。版本控制有以下几方面的内容:
l 组内合作——在缺省的情况下,一般一个文件在某一时间只允许一个用户对其进行修改,这样可以防止文件意外地被其他用户改动或者覆盖。但管理员可以改动这种缺省的设置,允许文件多层签出。这种设置也能防止过多的、不必要的改动。
l 版本追踪——VSS能够对源代码和其他文件进行存储和早期版本的追踪,从而实现重建文件早期版本等有关功能。
l 跨平台开发——在多平台开发的情况下,版本追踪用于维护核心代码。 l 代码的再使用—— 追踪程序基准使得代码可重用。
1.4 文件的拆分和共享
在VSS中可以实现一个文件被多个项目共享(share)。在一个项目中对文件的改动可以自动反映到其他共享的项目中去。这正提倡了代码重用。在file菜单中的properties中,点击link,可以查看某一文件的共享情况。
拆分(branch)是将文件从原来共享的项目中分离出来的过程。它使得VSS可以实现从不同的路径追踪文件。
注:在其他版本控制系统中,分支是通过跟踪版本号来实现的。例如:版本“2.3.9.2”是版本2.3的第二个修订版本的第九个分支。而VSS通过明显不同的项目名称实现对文件分支的跟踪。 拆分文件就断开了共享连接,使得本项目中的文件与其他原来共享的项目无关。对此文件的修改将不会再反映到其他项目上。拆分是这样被建立的:两个文件以前有着共同的历史记录,从实现拆分开始,他们的历史记录将被VSS分别追踪。
拆分文件之后,link按纽将不再显示已断开的连接,但你可以用path(file菜单中的properties项)按纽浏览拆分的历史记录。
共享(share)文件就是在多个项目间建立文件的连接。拆分(branch)文件就是在项目之间建立了不同的文件路径。
1.5 工作文件夹(working folder)
VSS是存储和管理文件的工具,但是编辑和编译文件必须在VSS指定文件夹中进行。这个文件夹叫工作文件夹,它可以是现存的文件夹,也可以是VSS新建的文件夹。VSS浏览器在文件列表上方显示了文件的工作文件夹的路径。
在VSS系统中,工作文件夹才是你真正用于处理文档的地方。当你要编辑或修改某个文档时,必须对文档实施check out 操作(详见3.3.5修改和编辑文件),VSS将该文档从项目中拷贝出来,放入你的工作文件夹。当你修改完毕并check in 文件之后,VSS又将文件重新拷贝到数据库中以记录你的修改。
一旦你将文件签出,VSS就开始在你的本地机上创建并管理你的工作文件夹。 每一个用户、每一个项目或每一台微机都可以有自己的工作文件夹。如果Joe在项目
$/SpreadSheet和$/WordProcessor上工作,他就有相应的2个不同的工作文件夹。如果Hanna在同样的项目上工作,对于每一个项目她又有自己的工作文件夹。
当你为某个项目设置了工作文件夹,你可以用它来放置你该项目中包括子项目再内的所
2 VSS的客户端安装
2.1 安装VSS的系统条件
l 计算机/处理器: 处理器为486DX/66MHz或以上PC机推荐Pentium或更高级的处理器。 l 内存:Windows 95或以后的版本要求16 MB RAM (推荐32 MB);Windows NT 4.0要求24 MB (推荐32 MB)。
l 硬盘:客户机:典型安装:59MB; 72 MB;安装过程:66 MB; l 服务器:典型安装:128 MB;最大安装:141 MB;
l 附加硬盘要求:Internet Explorer:典型为43 MB,最大59 MB;MSDN:典型57MB,最
大59 MB
l 驱动器:CD ROM
l 显示:VGA或更高级显示器,推荐Super VGA。
l 操作系统:Microsoft Windows 95或以后版本或者Microsoft Windows NT 4.0,NT要求Service Pack 3或更高版本(包括Service Pack 3〕
l 外围设备/其它: Microsoft Internet Explorer 4.01 Service Pack 1 (包含).
2.2 从网络安装VSS客户端
1) 打开本地计算机的“网上邻居”属性对话框; 2) 点击“配置”按纽;
3) 将“MICROSOFT网络用户”的属性设置为:登录到WINDOWS NT 域,域名为PLANNING; 4) 添加TCP/IP、NETBEUI、IPX/SPX协议; 5) 重新启动计算机,登录“planning”域;
注:管理员为每位NT用户设置的登录密码为“111”,用户在第一次登录时,计算机会提示用户修改密码。
6) 从“网上邻居”的“planning”域中查找服务器“VSSDATA”; 7) 打开共享的“VSS”文件夹并双击“NETSETUP”; 8) 按照安装程序的提示开始安装。
3 VSS的基本使用操作
3.1 登录VSS
点击VSS图标或从程序菜单中运行Visual SourceSafe 6.0,即可打开VSS浏览器。 如果用户登录的VSS密码和登录PLANNING域的密码是一致的,系统将不再提示输入进入VSS
数据库的密码;如果用户为VSS设置的密码与登录PLANNING域的密码不同,系统将提示用户输入VSS的登录密码。关于如何修改VSS用户密码,详见“3.2.14修改用户密码”。
3.2 VSS浏览器
当你一打开VSS,如果你设定了密码的话,它会提示你输入密码。如果你没有设定密码,你可以直接看到浏览器。在浏览器上,你可以浏览你的数据库、查看项目列表、显示文件统计信息、执行命令对文件和项目进行操作等。浏览器的最上方的标题栏是你当前连接的数据库。VSS使用符号来提供有关文件和项目信息。
菜单栏的下面是常用工具栏,这里有许多常用命令的按纽,它可以帮你快速地执行对文件的操作。 在项目栏中,显示有项目列表,包括特殊项目的有关信息。文件栏显示了当前项目的所有文件的列表。结果栏显示当前你所执行的操作的结果。
3.3 VSS基本操作
3.3.1创建新的文件夹
1) 选中要创建新文件夹的项目(上级文件夹); 2) 在file菜单中选中creat project;
3) 写入要添加的文件夹的名称,同时也可以在comment栏中为新建的文件夹添加备注; 4) 点击OK。
3.3.2添加文件夹
1) 选中你要添加文件夹的项目(上级文件夹); 2) 在file菜单中选中add files; 3)在文件夹列表中选中要添加的文件夹;
4)点击add,同时可以在comment栏为你添加的文件夹做一个简单备注; 5)如果你要连同子文件夹一起添加,选择Recursive;
5) 点击OK,成功添加了一个带有备注的文件夹。或者点击close,退出操作,返回add files对话框,点击close。
3.3.3添加文件
3.3.2.1使用add命令添加文件 1)选中你要添加文件的文件夹; 2) 在fil菜单中选中add files;
3) 在文件列表中选中要添加的文件;如果要添加多个文件,可以使用CTRL键或SHIFT键,同时选中多个文件;
4)点击add,同时可以在comment栏为你添加的文件夹做一个简单备注; 5)点击OK。
3.3.2.2用拖动的方法添加文件/文件夹
1)打开VSS浏览器,调整其大小,使得Windows资源管理器能够显示出来; 2)打开Windows资源管理器,调整大小,使得两个浏览器可以同时显示; 3)从Windows资源管理器中选择你要添加的文件或文件夹;
4) 拖动你所选的文件或文件夹,放入VSS浏览器,文件被添加进项目,而添加的文件夹将作为项目的子项目。
3.3.3查看文件
1) 在文件列表中选中要查看的文件; 2) 在EDIT菜单中选中view,打开对话框;
3)选中view SourceSafe’s copy of this file; 4)点击OK。
3.3.4创建工作文件夹
在执行签入(check in)、签出(check out)、撤消签出(undo check out)、取出最新版本(get latest version)和文件合并(merge branches)等命令时都必须使用工作文件夹。工作文件夹可以随时设定或修改,VSS系统中可以通过两种方式设置工作文件夹。 3.3.4.1专门创建工作文件夹
1) 在VSS浏览器的文件或项目列表中选中要设置工作文件夹的文件/文件夹; 2) 在file菜单中选择set working folder,打开对话框; 3) 在资源管理列表中选择或新建文件夹; 4) 点击OK。
3.3.4.2利用check out操作设置工作文件夹
在对文件执行check out操作时,如果该文件还没有设置工作文件夹,系统会提示用户为文件创建或指定工作文件夹,用户可以根据系统的提示对文件进行工作文件夹的设置。
3.3.5修改和编辑文件
1) 在edit菜单中选中edit file,打开对话框;
2) 选择check out this file and edit it in your working folder; 3) 点击OK。
注:如果用户已经为文件设置了工作文件夹,VSS会将该文件的一个COPY放入你的工作文件夹并打开文件,让用户进行修改和编辑;如果用户还没有为文件设置工作文件夹,VSS系统会提醒用户设置工作文件夹,用户可根据系统提示,先设置工作文件夹,才可以对文件进行编辑。
3.3.6移动文件/文件夹 3.3.6.1移动文件
你只有一种方法移动文件:将文件共享(share)到项目中,再将其从原来的项目中delete或是destroy。移动文件后,历史信息仍然有效。但是你不能用move命令来移动单个的文件。 3.3.6.2移动文件夹(project)
注:要使用移动(move)命令,必须先请管理员为你设置对移动目的项目的添加(add)权限和对源项目中文件的破坏(destroy)权限。
使用移动命令你可以重新定位子文件夹,将其从一个文件夹移动到另一个文件夹中。这个命令重新定义了被移动文件夹的路径。
这个命令不可以重命名文件;你只能通过执行重命名命令来实现它。这个移动命令不会改变文件夹的内容或其中子文件夹的历史信息,它只会影响到新的和旧的上级文件夹的历史信息。 警告:当你移动一个文件夹之后,就不能再如实地重建其上级文件夹的早期版本。 移动文件夹的具体操作步骤如下: 1) 选中要移动的文件夹;
2) 在file菜单中选中move,打开对话框; 3) 在列表中选择目标文件夹; 4) 点击OK。
3.3.7共享文件/文件夹(share)
1) 在VSS浏览器中选择你要共享的目标项目。 2) 在SourceSafe菜单中选择share,打开共享对话框。
3) 在file to share列表中选择你要共享的文件,如果文件没有显示,可以旁边的项目列表中查找。
4) 点击share。 5) 点击close。
3.3.8拆分文件(branch) 3.3.8.1拆分被共享的文件
1) 在浏览器中选中你想要拆分的文件;
2) 在SourceSafe菜单中选择branch,打开拆分对话框; 3) 在comment中填写备注; 4) 点击OK。
3.3.8.2用一步操作完成文件的拆分与共享
1) 在VSS浏览器中选择你要branch/share的项目; 2) 在SourceSafe菜单中打开share对话框;
3) 在file to share列表中选择要共享的文件,如果你要的文件没有显示,在项目列表中
3.3.9删除/恢复文件或文件夹
如果想从VSS中移走某个文件,你必须首先确定是仅仅从项目中移走,还是从VSS数据库中移走。你还必须确定是要删除文件,但使其能够恢复,还是永久性地破坏它。 VSS中有以下三种途径可以实现从数据库中移走文件。 3.3.3.9.1删除(delete)
将文件从项目中移走。该文件仍然存在于你的VSS数据库和其它共享该文件的项目中,你可以恢复它。此命令同样适用于项目。 1) 选择文件或项目;
2) 选择file菜单中的delete命令;
3) 点击OK。
3.3.3.9.2破坏(destroy)
删除(delete)对话框中有永久性破坏(the Destroy Permanently)选项,你一旦选中它,文件或项目将从VSS数据库中被移走,你不能再恢复它。此外,当Destroy 和Destroy Permanently命令用于共享文件时,它只作用于当前文件夹,其它共享的文件夹仍然保留该文件,该文件依然保存在VSS数据库中。 1) 选择文件或项目;
2) 选择file菜单中的delete命令; 3) 选中 Destroy Permanently 选项; 4) 点击OK。
3.3.3.9.3清除(Purge)
这个命令将永久性地移走你已经删除的文件或项目,但没有破坏它。你可以使用这一命令清空你的文件或项目中的所有内容,但不能恢复它们。 1) 在VSS浏览器中选中项目;
2) 打开file菜单的properties对话框,按delete按纽; 3) 在列表中选择要清除的文件名; 4) 点击purge;
5) 如果要继续,在VSS给你的提示栏中点击yes。
3.3.10查看文件/文件夹的历史信息或早期版本
在历史信息中保存有每一个文件的详细信息。在history对话框中,你不仅可以浏览到文件的版本信息、备注、以及文件的相关历史记录,也能够获取文件的某个旧版本。
注:只有文件(file)可以从历史信息中check out,文件夹(project)不能从中check out。
你还可以从历史信息对话框中执行get、check out、diff、pin、unpin、roll back和reprot等操作。
要查看历史信息:
1) 在tool菜单选中show history,打开history options对话框; 2) 点击OK。
3.3.11获取文件的最新版本
1) 选择你要操作的文件,也可以是多个文件或某个项目; 2) 在SourceSafe菜单中选择get latest version;
3) 如果你事先没有设定工作文件夹,VSS会提示你是否设定一个工作文件夹,点击OK,设定一个工作文件夹;
4) 如果你已经确定了选项,VSS就会显示get latest version对话框,你就可以从当前的项目中获取文件的最新版本的备份,它放在你的工作文件夹中。
3.3.12获取文件的早期版本 1) 选中你要查看的文件;
2) 在tool菜单中选中show history,打开history option对话框; 3) 点击OK,打开history对话框; 4) 选中你要看的版本; 5) 点击get,打开get对话框;
6) 如果你事先没有设定工作文件夹,VSS会提示你是否设定一个工作文件夹,点击OK,设定一个工作文件夹;
7) 在取出对话框中点击OK,文件版本的备份就会从当前项目调入你的工作文件夹。
3.3.13修改用户密码
使用更改密码命令来设置或更改你的密码。要更改密码,必须首先知道当前的密码,如果你忘记了自己的密码,请与管理员联系。
登录的时候,VSS会提示你输入密码以确认你的身份。如果管理员为你设置的用户名与你的网络名是相同的,VSS将不会再提示你输入密码。
注:你的VSS的密码可以与你使用的操作系统的密码相同,也可以不同,它并不会替换你操作系统的密码。 如何更改密码:
1) 从tool菜单打开change password对话框; 2) 在旧密码框里键入你当前的密码; 3) 在新密码框里键入你的新密码;
注:密码可以设1到15个字符,它以*的形式显示; 4) 在确认框里再次键入新密码; 5) 点OK。
3.3.15打开/关闭数据库
如果你使用了VSS,你的文件和项目就会被存储在一个数据库中。它安全地保存你的信息并为你提供重要的历史信息和版本跟踪。要创建新的数据库,要与VSS管理员联系。 3.3.15.1打开现有的数据库
要运行你的VSS,你必须与存储你的文件的数据库连接。这一步通常由VSS自动完成,除非你要选择其他的数据库。如果数据库还没有安装,请与管理员联系。 1) 从file菜单,选择open SourceSafe database,打开对话框; 2) 从数据库列表中选择一个数据库;
3) 点击open,打开数据库。 3.3.15.2关闭数据库
你只能在一个数据库中进行工作。因此,如果要关闭一个数据库,只需打开另一个数据库即可。
Visual SourceSafe如何支持并行开发
前言
如今随着软件项目规模的日益增大以及项目复杂性的不断加剧,软件配置管理(SCM)的重要性已越来越受到大家的认可。许多优秀的软件配置管理工具也应运而生,使得我们能够轻松有效地管理我们的软件项目,作为这其中的一员,Microsoft Visual SourceSafe具有简单易用、方便高效、与Windows操作系统及微软开发工具高度集成等优点。
我相信有相当一部分人曾经使用或者正在使用VSS,对于它的一些基本用法在这里不再赘述,本文将主要探讨Visual SourceSafe 6.0中的一些高级特性,希望给大家在实际的工作过程中带来一些帮助。
我们知道随着软件规模的日益增大,软件开发周期会变得越来越长,投入的人力也会越来越多。在整个过程中,将不可避免地会产生并行开发的情况,那么在VSS中是如何支持并行开发的呢?在并行开发的过程中要注意些什么呢?这就是本文希望与大家分享的。
本文要求读者对VSS有一定的熟练程度。
一些有用的设置
在讲解并行开发之前,让我们先来看看VSS中一些非常有用的系统设置,他们可以用来加强管理或者简化你的工作。首先是一些与你的项目安全管理策略有关的设置,比如\"是否允许
multiple checkouts\"、\"是否激活项目安全机制(project security)\"等。还有一些是方便工作的,比\"设置影子目录(shadow folders)\"、\"重用上次注释\"、\"双击直接编辑文件\"、\"是否采用图形化归并\"等。这些你都可以在\"Tools\"-〉\"Options\"里进行设置。
什么情况下会出现并行开发
不知道有没有喜欢听评书的朋友?我想一定和我一样最讨厌听到:欲知详情如何,且听下回分解。不过我们今天要讲的是另外一句话:花开两朵,各表一枝。我记得当时虽然这边打得热火朝天,大呼过瘾,但是心里总是惦记着那边怎么样啦!真恨不得有两个电台,一边是鲁智深大闹野猪林,一边是林教头风雪山神庙。那么在实际的项目开发过程中,什么时候会出现花开两朵的情况呢?
1、 你想修改项目早期版本中的某个bug。
2、 其它的小组成员占有了你希望处理的文件。你可以等他将该文件check in,或者你可以采取multiple checkouts,你还可以选择在一个分支上工作。
3、 你所做的工作涉及到许多文件,你选择一个分支流就可以避免经常打乱别人的工作。同时你可以将所有的工作测试完后再将它们集成到你的项目中。
4、 项目规定你不能够在主线上工作。相反地,项目被分成许多小的部件,每个部件是一个分支,只有该部件完成后,才会将它合并到主线中。
那我们是不是需要两个电台呢(建立两个项目)?可喜的是,VSS中提供了共享、分支等操作来解决并行开发的问题。
文件共享(share files)的概念
在VSS中你可以在不同的项目之间共享文件。我们知道,在VSS的数据库中有且仅有文件的唯一拷贝--主控拷贝(master copy),因此共享文件也就是在不同的项目里建立了指向该主控拷贝的链接。如果你在其中一个项目中改变此文件,那么其他项目中所有的共享也随之改变。此外,如果选择共享某个项目中的所有文件,我们也可以称之为共享该项目。
如何实现文件共享
1、 在VSS Explorer中,选择你希望在其中共享文件的项目。
2、 选择SourceSafe菜单,单击Share,或者单击右键菜单中的Share显示Share对话框。
3、 通过选择Project和File to Share下拉框来选择你准备共享的文件。
4、 点击Share.
5、 点击Close.
如果你选择的是某个项目,系统还会提示你输入新的共享项目名称。操作完成后,你会发现在当前项目中增加了刚才选择的文件。如附图一所示,我在项目$/projectname/sourcecode/client中共享了项目bugfix,操作完成后在client下增加了目录bugfix,而且我将$/bugfix项目中的network.txt文件check out出来后,项目$/projectname/sourcecode/client/bugfix中的network.txt文件也自动被check out。(见附图二)
附图一:文件共享
附图二:文件共享后
文件共享机制确实为我们带来了不少便利之处,它可以减少数据库中文件的数量,能够实现文件的重用。但是,文件共享机制的\"非各自独立性\"也限制了它扮演更重要的角色,真所谓\"成也萧何,败也萧何\"!
分支操作(branching)
要真正地支持并行开发,就不得不用到分支操作。与共享操作不同的是,分支操作实际上是将文件放在不同的项目中来实现完全的独立性,此时在一个项目中的文件修改不会影响到其他的项目中的文件。此外,共享操作后形成的位于不同项目里的两个文件拥有一个共同的祖先,也就是他们的历史(history)记录是从同一点分离出来的。
如何实现分支操作
注意,在进行分支操作前,你必须确认已经共享了该文件。当然,你也可以将共享、分支操作放在一起完成。
1、 在VSS Explorer中选择目标文件。
2、 选择SourceSafe菜单,单击Branch显示Branch对话框。
3、 如果需要,你可以在Comment框中加入注释。
4、 单击OK。
附图三:分支操作
操作完成后,你将会发现项目$/projectname/sourcecode/client/bugfix中的文件network.txt由check out状态变成了uncheck out状态,而且改变项目$/bugfix中的network.txt文件对它也没有任何影响。
如何在具体的应用中使用这些特性
那些书上的大侠们学好本领后,都要到江湖上去闯荡一番。那我们了解这些基本的操作后,也一定希望能够在实际的项目中小试牛刀,我们就以早期版本中的bug修改为例。
我们假定我们项目的2.0版本刚刚完成,项目开发小组继续朝着3.0版本前进,同时试用项目维护人员需要一个临时的2.1版本来修改试用过程中发现的bugs。具体的步骤如下:
1、 将当前项目$/projectname/sourcecode/client加上标签(Label)--Version 2.0。
2、 继续在该项目上进行修改,形成新的版本。(如附图四)
3、 这个时候在版本2.0的试用过程中发现错误,你需要一个临时的版本来修改错误同时又不影响版本3.0的开发。
4、 选择Tools菜单,单击Show History显示Project History Options对话框。
5、 选中Include Labels复选框。
6、 单击OK显示History of Project对话框。
7、 选择加有标签\"Version 2.0\"的版本。
8、 单击Share显示Share From对话框。
9、 选择将要产生的项目的父项目,我们选择$/。
10、单击OK显示Share对话框。
11、将此项目命名为bugfixAfterV2.0,单击Close退出History of Project对话框。
12、操作完成后会发现在VSS中增加了一个项目$/bugfixAfterV2.0(注意此时文件2.txt前面的图标形状,如附图五),试着check out文件2.txt,系统会提示你所有的文件已被\"钉住\"(pinned),操作不成功。是的,你还需要下一步操作。
13、选定那些你确实需要修改的文件,然后进行分支操作。这样你就可以任意修改这些文件,而且你会发现图标也恢复到原来的样子。
附图四:分支操作前的项目历史记录
附图五:分支操作完成后
文件归并(merge files)
正所谓,分久必合,合久必分。分支操作以后,你肯定需要重新将这些文件合并到一起,比如上面那个例子,你肯定希望在版本2.0中被修改了的错误不要在版本3.0中再出现,这个时候你就需要用到归并操作。
所谓文件归并就是将由一个文件产生的多个不同拷贝重新形成一个唯一的新的文件版本,一般都是将分支上的改变反映到主线上,所以称之为归并操作(当然还存在其他两种情况,使用multiple checkouts,某些情况下get一个文件的时候)。在文件归并过程中VSS并不能去决定文件差异的取舍,它只是将这些文件间的异同提交给你,由你自己来确定最后的文件内容。当然比较的基准就是我们前面提到的它们共同的祖先。
有两种方法可以进行归并操作,一种是默认的visual merge,另一种是manual merge。一般推荐使用前一种方法。
文件归并过程中涉及到两个概念,一个是投送者(contributor),另一个是目标(object)。投送者就是你在分支上的那些文件,目标就是你在主线上的那些文件,归并操作完成后,只有目标的内容改变,而投送者的内容保持不变。
如何实现归并操作
1、 在VSS Explorer中选择目标文件或者项目。
2、 选择SourceSafe菜单,单击Merge Branches显示Merge To对话框。
3、 在Projects框中选择投送者所在的项目名称,所以说该对话框的名称应该为Merge From,而不是Merge To。
4、 单击Merge显示Comment对话框。
5、 输入注释,点击OK。
6、 如果两者之间的差异很明显(比如一个文件比另外一个文件多出一行),系统会自动帮你决定目标文件的内容。反之,系统显示Visual Merge对话框,你可以自己决定目标文件的内容。(3)
操作完成后,查看一下目标文件是不是变成了你希望的内容。
好啦,至此所有的工作已经完成。你可以放松一下来杯浓茶,不敢喝咖啡,怕被Sun公司控告侵权。但是中国人有个习惯,不管什么东西都喜欢分出个高低,排个名次。我记得小的时候对隋唐演义中的好汉排名津津乐道,什么第一名李元霸,第二名宇文成都等等。那好,我们也来啰嗦一下,评评VSS的功过是非。(4)
评说VSS
在支持并行开发方面,VSS提供了大量优秀简洁的特性,但是在以下几个方面稍显不足:
1、 在进行分支操作的时候,灵活性不是很大,只能是单一地选择某个项目中的所有文件,不能进行一些自定义的设定,比如我只希望选取所有的文本文件。
2、 由于VSS中主线和分支是采用不同的项目来区分,所以很容易被混淆而且增加项目的数量,不如采取版本号来区分直观。
3、 在进行归并操作时,投送者与目标的概念很模糊,而且没有显示地提出这两个概念。
4、 由于VSS中没有版本树的概念,所以分支操作后没有一个直观形象的版本演化的感官认识,就像Rational ClearCase中那样,这样使得不能把分支和主线很好地联系在一起。
总结
本文主要讲解一些VSS使用中的高级特性,使得你能够用来应付一些比较复杂的情况。但是,VSS毕竟只是一种工具,项目配置管理的成败主要取决于项目的配置管理策略。
说明
1) 本文所有的例子都是基于Visual SourceSafe 6.0英文版,其他的版本可相应对照。
2) 这两个概念是从Rational ClearCase借用过来的。
3) 关于Visual Merge对话框的详细信息,可以参考VSS的帮助文档。
4) 当然本文不准备在整体上来评价VSS,主要是从支持并行开发这个方面来说说VSS的不足之处,只要与Rational ClearCase进行对照。
SourceSafe中的权限管理
前言
如今随着软件项目规模的日益增大以及项目复杂性的不断加剧,软件配置管理(SCM)的重要性已越来越受到大家的认可。许多优秀的软件配置管理工具也应运而生,使得我们能够轻松有效地管理我们的软件项目,作为这其中的一员,Microsoft Visual SourceSafe具有简单易用、方便高效、与Windows操作系统及微软开发工具高度集成等优点。今天,我们就来讲讲VSS中的权限管理。
首先我将讲解VSS中权限机制实现的原理,这里面设计到VSS的默认安全访问机制、项目安全等内容,接着我将告诉实现权限机制的具体方法,最后我将结合一个软件移交项目的具体情况来谈谈权限管理如何应用到实际的项目过程中。
一、VSS默认的安全访问控制
每次你安装VSS以后,系统自动激活默认的安全访问控制机制。这套机制非常简单,它包括两个等级的权限:
1) 只读权限:用户可以查看VSS数据库中的所有对象,但是不能够修改
2) 读写权限:用户可以查看和修改VSS数据库中的任何对象
每次你增加新用户的时候,你可以决定该用户的权限等级。在“Add User”对话框中包含一个“Read Only”复选框,你可以通过它来确定用户具有的权限。
我们前面说过这只是个极其简单、粗线条的解决方案,但同时也是最简单的。在实际过程中,你可能需要更细化的权限分配,甚至希望每个文件针对不同的用户都能设置不同的权限。那我们就得亲自动手设置我们项目的安全机制。
注意:SourceSafe中的所有安全设置都是在Visual SourceSafe Administrator中进行的,所以在深入以下细节之前,你必须确认一件事情:你的Admin密码足够安全,除你之外没有任何人可以随心所欲地进入Visual SourceSafe Administrator。否则,一切安全考虑都是徒劳。
二、项目安全与用户访问权限
在讲解项目安全之前我们先来回顾一下VSS的基本组成框架,VSS包含多个数据库(database),每个数据库又包含许多的项目,而且可能项目里嵌套着不同的子项目,最后才是你的源文件。你可以把这个类比成操作系统中的磁盘分区,目录,子目录,文件,每台机器包含许多的磁盘分区,每个分区中包含无数个目录、子目录,在子目录下才是你的文件。VSS中的用
户是基于VSS数据库的,也就是说每个数据库都包含有自己的用户清单。用户访问权限意思是用户可以访问(包括查看、修改和执行命令等)数据库中的哪些项目,对项目来说就是它只能被那些已经授权的用户访问,也就是所谓的项目安全。
很遗憾VSS只提供了到项目(对应于目录)的用户权限控制,并不能针对每个文件来设置不同的用户访问权限(比如Rational ClearCase等就提供此功能)。虽然你可以用某种变通的方法来做到这一点,比如增加子项目,不过那样就破坏了整个项目结构的规范性、可读性和合理性,甚至产生些无任何意义的子项目。
VSS定义了四级用户访问权限,级别由低到高,后者包括所有前者的权限,比如说拥有Check Out权限就自动拥有了读的权限。
1) 只读(R):允许查看文件,对应于View、Get等命令
2) Check Out(C):可以使用Check Out,Check In,Undo Check Out等命令修改文件内容
3) 文件增删(A):可以在项目中增加、删除、重命名文件或者给文件加标签,对应的命令有Add,Delete,Label,Rename等
4) 破坏(D):这级权限对应于那些具有巨大破坏性的操作(就是那些一不小心就可能被炒鱿鱼的操作),请牢记它们的名字:Destroy,Purge,Rollback。所以亦有人戏称之为自杀权限。
其实你可以发现默认安全机制中的两级权限是和这四者对应起来的,只不过后者把前者的读写权限细分为三个不同的级别。好啦,了解每级权限各自的含义之后我们就可以开始设置不同用户的权限啦。
设置用户权限之前,你必须激活项目安全机制。打开VSS Administrator的Tools菜单,点击Options得到SourceSafe Options对话框,选取Project Security并且勾上Enable project security复选框。(如下图所示)
图一 激活项目安全机制
VSS中有三种方法可以设置用户的项目访问权限:针对项目设置每个用户的权限,针对用户设置访问每个项目的权限,拷贝用户权限,它们分别对应于Tools菜单下的Assign Rights by Project,Rights Assignments for User,Copy User Rights。我们以方法一为例做一简单说明。如下图所示,在左边框中选定项目,在右上框中选定用户,右下脚的User rights中就显示该用户现具有的权限,选中不同的复选框来设置你自己的权限。注意:对每个项目的用户权限设置自动反映到该项目的所有子项目中。
图二 用户授权
三、权限管理在实际项目中的应用
在本小节中,我主要结合在实际项目过程中作为配置管理员的经验来谈谈权限管理的实际应用,以及在应用过程中需要考虑的因素。
我们要接触的这个项目为一软件移交的项目,这个项目团队的成员组成和职责分配如下:
项目经理:1人,负责协调整个项目
业务分析师,1人,负责整个系统业务的掌握 系统架构师:1人,负责整个系统的系统架构
Package Owner:3人,分别负责系统前端、中间层及后台数据库三个部分 模块负责人:3-5人,分别负责各个模块 数据库管理员(DBA):1人,负责系统数据库
Test/QA:1人,负责整个软件的测试和质量保证 Technical Writer:1人,负责相关技术文档的写作
变更控制委员会(CCB):3人,负责项目需求的变更审核及执行,包括软件配置管理员,外方项目经理
实际过程中大多会发生人员交叉现象,比如我们项目的实际人数就只有9人,项目经理又同时是CCB中的一员,Package Owner同时兼任模块负责人。根据我们项目的实际组成情况,我在VSS中给出了如下所示的项目结构:
图三 VSS项目结构
图示说明:
1、exec项目中主要存放项目可执行文件或者软件安装文件,由于该项目比较复杂,建立过程耗时长且比较复杂,所以直接在VSS中存放可执行文件。一般的项目不推荐这样使用。
2、图中只是显示整个项目结构的主要部分,省略了细节部分,比如client项目中包含有许多的小项目。
接下来,就需要为每个项目、子项目设置不同的用户访问权限。由于所有的软件重大变更都需要交由CCB审核签字后方可执行,所以我们把整个项目的D(6)级权限赋给CCB成员。而项目经理主要负责项目的整体进度的把握以及与外方项目组、其他部门的协调工作,所以拥有整个项目的R权限并且拥有development document的A权限。配置管理员的权限有两者可能,一种就是拥有整个项目的A权限,另外一种可能就是只拥有部分项目的A权限,这主要取决于赋予给配置管理员的实际权限有多大。以此类推,各个模块负责人拥有各自模块的A权限。此外由于移交项目的特殊性,一般在项目开始过程中主要以培训为主,很少涉及到软件的修改,所以建议在项目开始阶段不赋予开发工程师用户C权限以免引起不必要的错误和争论。
总结
本文通过讨论VSS中权限管理实现的具体机制,并且结合例子讲解了在实际过程中的应用。虽然移交项目有着它本身的特殊性,但我相信对于任何项目来说其安全管理的基本思路是相通的,希望此文能够给大家以一定的启示和借鉴。
参考
1) 本文中会大量涉及到“项目”一词,有的时候它是指实际的软件项目,有时它又是指VSS数据库中的项目、子项目,请注意区分。
2) 有关软件配置管理的更详细信息,可以参考本网站相关内容。软件配置管理主要包括版本管理、变更管理、权限管理等方面,本文主要涉及权限管理。
3) 软件版本采用Microsoft Visual SourceSafe 6.0英文版,其他的版本请进行相应的对照。
4) 所有这些命令的详细信息可以参考VSS帮助。
5) 项目背景大致介绍:所移交的软件为一国外公司的软件,是基于Microsoft的DNA架构的三层应用,代码量为150万行左右。移交的目标:掌握现有系统,充分了解相关的商业逻辑,为以后开发出自己的符合中国国情的软件做好充分的准备。这其中可能涉及到需求的再分析、系统的重新架构以及向Java平台的迁移。
6) 我们分别用R、C、A、D来表示VSS中的四级权限Read,Check Out,Add,Destroy。
实用指南
一、版本管理的必要性
如果说70年代的软件危机导致了软件工程思想的诞生和理论体系的发展,那么80~90年代尤其是90年代软件产业的迅猛发展导致了另一种新思想的产生和实现,这就是软件的版本管理。
只要参加过软件开发的人都清楚,现在的软件项目完全由一个人来完成是难以想象而且也是不可能的,通常是有一个研发小组来共同分析、设计、编码和维护,并有专门的测试小组对已完成编码调试的软件进行全面的测试。在软件开发这个庞大而复杂的过程中,需要涉及到各个方面的人员,信息的交流反馈不仅仅是在研发小组的成员之间及各个研发小组之间,还存在于客户和研发者之间。所有的这些交流反馈意见信息都有可能导致对软件的修改,小的可能只是对某个源文件中的某个变量的定义改动,大到重新设计程序模块甚至可能是整个需求分析变动。在这个工程中,由于软件开发所固有的特征,可能会形成众多的软件版本,而且我们并不能保证不出现错误的修改,而这样的一个困难局面却又非常现实地摆在项目开发管理者的面前,他/她该如何有效地解决这些问题,具体地说就是如下一些问题: 1. 怎样对研发项目进行整体管理;
2. 项目开发小组的成员之间如何以一种有效的机制进行协调;
3. 如何进行对小组成员各自承担的子项目的统一管理; 4. 如何对研发小组各成员所作的修改进行统一汇总; 5. 如何保留修改的轨迹,以便撤销错误的改动;
6. 对在研发过程中形成的软件的各个版本如何进行标识,管理及差异识辨等等。
一个非常直接的反应,我们必须要引进一种管理机制,一个版本管理机制,而且是广义上的版本管理,它不仅需要对源代码的版本进行管理,而且还要对整个项目进行管理。以往的那种被誉为具有良好编程风格的做法,诸如在对他人的源程序进行修改时注释修改原因,修改人和日期,如果是多个成员同时进行了修改,那么需要进行及时的人工的差异比较和综合以便形成一个统一的新版本。这种做法在当前的大型软件的开发中已经越来越没有空间了,可以说是一种以小作坊的形式来面对软件的社会化大生产,再也不可能行得通了。
其实,版本管理的思想很早就存在于软件开发者的头脑之中,只是以往的认识没有现在人们所意识到的那样迫切。UNIX的程序开发系统较早就提供了能够进行开发小组中源代码版本管理的工具,现在的Linux更是提供功能强大的能够跨平台的版本管理器,国外公司的基于Windows的版本管理器也已经有了比较成熟的产品,国内的研究单位如北京大学计算机系CASE实验室也在致力于这方面的工作。在众多的成熟产品和试验产品中,这里只将对使用比较广泛,有较大用户前景且又能较易获得的版本管理器产品Microsoft公司的Visual SourceSafe 6.0进行详细的介绍,针对普通的研发小组的解决方案,及具体的实现。
二、Visual SourceSafe 6.0(VSS 6.0)简介
VSS 6.0现在是作为Microsoft Visual Studio 6.0这个开发产品家族的一员,如Visual C++ 6.0和Visual J++ 6.0一样。
1. VSS的简单工作原理
Microsoft的VSS 6.0解决了软件开发小组长期所面临的版本管理问题,它可能有效地帮助项目开发组的负责人对项目程序进行管理,将所有的项目源文件(包括各种文件类型)以特有的方式存入数据库。开发组的成员不能对该数据库中的文件进行直接的修改,而是由该版本管理器将该项目的源程序或是子项目的源程序拷贝到各个成员自己的工作目录下进行调试和修改,然后将修改后的项目文件作Checkin提交给VSS,由它进行综合更新。VSS也支持多个项目之间文件的快速高效的共享。当某个成员向VSS中添加文件时,该文件将会被备份到数据库中,以便所有的成员都能共享该文件。而且每个成员对所有的项目文件所作的修改都将被记录到数据库中,从而使得修改的恢复和撤销在任何时刻,任何位置都成为可能。小组的成员可能得到该项目的最新版本,对它进行修改,并保存一个新的版本。
VSS的项目组织管理使得开发小组的协调变得简单容易且很直观,当一个和一组文件发放给另一个成员,小组,Web站点或是任何其他的地址,VSS确保他们之间的真正共享及所选的一组文件的不同版本的安全性。现在,越来越多的开发者可以通过他们的开发环境来访问VSS的功能。而且VSS可以很容易地于Microsoft Access、 Visual Basic、 Visual C++、Visual FoxPro和其他的开发工具集成在一起,一旦VSS集成到开发环境中,就可以象控件一样使用,能够很好地体现出VSS的易用性和强大功能。
2.VSS中的几个重要概念
为了更好的了解VSS,有必要对如下一些概念给予说明。
首先是项目的概念,所谓的项目是一组存在VSS中的文件(任何类型),可以在项目中或是项目之间进行文件的添加、删除、编辑和共享。一个项目与操作系统的文件夹有很多的相似之
处,但它更好地支持文件合并、历史和版本控制。所有的文件存在VSS数据库的项目中,开发组成员不能在VSS中的主备份文件上工作(除了检查和版本比对等特殊情况外)而是VSS为每个成员在各自的工作目录下提供一个拷贝以供工作。尽管在没有工作目录的情况下也可以查看某个文件,但如要真正在VSS管理下工作,就必须要创建一个工作目录。
VSS能够维护一个文件的多个版本,包括一个从不同版本之间进行修改的记录。版本控制包括如下方面:
组内协调—在一般情况下,确保在任何时刻都只有一个成员对某个特定的文件进行修改,这样可以防止文件被其他成员的修改意外更新。当然,VSS管理员可以改变此缺省设置以允许对单个文件同时有多个Checkout,并且仍禁止对他人的修改进行覆盖。
版本跟踪—对老版本的源代码和其他文件进行归档和跟踪,而且这些版本能够被重新得到以便进行bug跟踪或其他目的。
跨平台开发—支持同一代码在跨多个开发平台时的版本控制。
重用或面向对象代码—跟踪哪些程序使用了哪些代码可被重用的模块。
版本控制的涵义在以后的章节中将会得到更进一步的论述。
我们已经知道,VSS 提供版本控制和历史服务,以保证一个文件的每个版本都是可恢复的。VSS用日期/时间戳来记录文件是何时被Checkout或是何时被修改的,它主要有三种方法来跟踪文件和项目的版本:
版本号:这是由VSS维护的内部数码,用户对它没有控制权。每个文件和项目的每个版本都有一个版本号,这些版本号总是一个整数且是递增的。
标签:这些是用户赋给某个项目或文件的某个版本的一个字符串,可以是任何格式的长度不超过31字符的字符串。
日期/时间戳:它给出了一个文件何时最后被修改的信息,或者是一个文件何时被Checkin。VSS同时支持12小时和24小时的时间格式。
工作目录是用户真正对项目文件进行调试修改的地方,当用户Checkout 或提取一个文件时,VSS将该项拷贝到用户的工作目录下,当用户修改了该文件并将其Checkin或提交时,VSS再将它从用户的工作目录拷回到VSS的数据库中。在用户作Checkout时,VSS将会自动管理他的工作目录,诸如创建必要的子目录。而且工作目录可以随时创建或修改。
3. VSS 6.0的一些新增的特征和功能
归档和恢复—在VSS 6.0中这两个操作是在一个用户界面友好的VSS管理员wizard中进行的,而在以前的版本中,它们只能通过命令行来实现。
移动文件—当用户移动文件时,VSS 6.0自动将该文件共享到一个新的项目中,并在原项目中将其删除。在新项目中,该文件的属性是共享的。
多个项目之间的差异比较—该功能允许用户在不同的项目之间进行差异比较。
单个文件的展开—在以前的版本中,VSS只能展开一个目录(文件夹),在VSS 6.0中,同时可以展开一个文件。
快速提取—由于VSS 6.0在性能上的提高,现在的文件提取速度比以往VSS版本的快两倍左右。
历史信息过滤—VSS 6.0 支持查看那些没有标签的文件和项目的历史。
清除临时文件夹选项—该新功能可使用户很方便地清除临时文件夹。
检查外部的超连接—在VSS 的较早的版本中,只有内部的超连接和项目内的跳转才得到检查,VSS 6.0允许用户检查项目之外的超连接和跳转。
创建打开VSS数据库的快捷键—用户可以使用VSS Explorer中该新功能创建一个打开某个特定VSS数据库的桌面快捷键。
HTML格式的帮助—VSS的以往版本使用的是WinHelp格式。
三、VSS 6.0的解决方案
在对VSS 6.0的工作原理,功能和新增特征有了一个较全面的了解后,我们开始进入到本节,即如何运用VSS 6.0来实际解决软件开发工程中的版本管理和控制问题,怎样有效地构架一个系统的解决方案。
首先看一下我们的开发小组所处于的实际情况,最一般的情况是整个项目使用的就是微机环境,每个开发者在各自的Windows微机下利用Microsoft的VC、VB、VJ等等来开发项目中各个子项目或子模块,通常这个小组是局域网的一部分或者是一个较为独立的子网,可能配有专门的服务器。这样的一个开发环境对于实现用VSS 6.0来进行版本控制和管理是非常有利而且是比较直观的,因为VSS 6.0也需要这个网络环境。
其次是对于项目本身来说的,一个项目经过分析设计后一般都会分成若干个子项目由若干个开发小组各自负责编码调试,但软件开发的实际情况决定了各个小组之间并不是完全独立的,他们在很多情况下都需要协调交互和信息反馈,开发过程中的每一步都有可能会导致对前一阶段工作的修正,因为软件开发很大程度上是一个螺旋式的过程,更不用说小组之内的相互交流了。在这个不断交互改动的过程中,将可能形成的项目的阶段版本、部分版本和完整版本的数量是可想而知的,而以往的通常的版本人工管理方法已是不能胜任了。而且还有一个非常重要的方面不可忽略,这对系统软件的开发尤为明显,即软件的层次结构。一般的做法是在通用的系统软件之上为多个应用开发相应的应用程序,与此相对照的项目开发组也一般分为系统开发组和各个应用开发组,应用软件的开发和使用过程中将会反馈回无数的应用本身和系统软件的问题,如果只是针对每个应用来单独修改更新系统软件版本,这样就不可避免地导致多个系统版本的不一致,这样对于真正解决系统所存在的问题就显得力不从心了。而VSS 6.0正适合于这种软件的开发体系结构,可以为各个小组创建自己的项目,而这些项目又从属于一个总的项目,所有的修改都将被汇总处理以形成一个统一的最新版本。
针对这样最为普通的一个软件开发环境和组织结构,运用VSS 6.0进行版本控制管理的非常有效而且代价较小的解决方案是:
在一台Windows NT服务器或者是一台较为独立的Windows 98/95 PC上安装VSS 6.0的服务器端软件,创建一个为该整个项目存放用的数据库,然后在该数据库中创建各个项目和子项目,并由VSS管理员为小组的每个成员创建一个帐号及他们各自的权限;
在开发小组其他成员的PC上安装VSS的客户端软件,并创建自己的工作目录,这样在软件的开发过程中,他们只要通过该客户端软件登录到VSS服务器上,Checkout当前要进行工作的项目或文件,如有修改的在工作结束时将其Checkin提交给VSS服务器进行统一更新。
解决方案如下图所示。
四、VSS6.0服务器的安装
在我们给出整个解决方案后,现在来看一下如何安装VSS服务器。VSS 6.0是Microsoft Visual Studio 6.0 套件的成员,我们就以这个版本为例进行说明。
第一步,将Visual Studio 6.0 的CD1放入CD-ROM,自动进入安装程序,选择第二项“Server Applications and Tools(Add Only)”,如图1所示;
第二步,然后在\"Server Setups\"的\"Server Components\"中选择\"Visual Source Safe Server\按\"Install\"按钮后,根据提示放入CD2,如图2所示;
第三步,根据Installation Wizard的提示,继续安装过程,选择安装路径,按图3左上角的按钮,系统继续进行安装,直至提示你重启以使新安装的程序生效,重启计算机。
VSS 6.0服务器的安装比较简单,它既可以安装在Windows NT下,也可以安装在Windows 9x下。
五、VSS 6.0客户端的安装
在VSS 6.0服务器安装完毕后,就可以在VSS管理员的指导下安装客户端的软件。由于我们是在一个Windows环境的子网内,每台PC客户机均可通过网上邻居来访问VSS服务器。在VSS管理员为用户指明VSS客户端软件的安装程序“Netsetup.exe”的位置后,用户可以直接通过资源管理器“Explorer”在网上邻居中找到该程序,并双击以运行它,如图1所示。
Netsetup.exe被启动后进入VSS客户端的安装,在如下提示框中输入用户名和工作组名,如图2所示。
选择VSS的安装路径后,在图3中点击安装图标,进入实际安装步骤,以后的工作将由系统自动完成。
当系统提示你,VSS已成功安装,到此所有的安装工作已经完成。
六、VSS6.0服务器的配置和管理
在VSS 6.0服务器安装完毕后,就可以针对开发项目进行VSS服务器的配置和管理,这些工作均需由VSS管理员来完成。
首先,为整个项目创建一个VSS数据库(在VSS服务器安装时,系统已经创建了一个缺省数据库Common),启动Visual SourceSafe 6.0 Admin(Start /Programs/Microsoft Visual Studio 6.0/Microsoft Visual SourceSafe/Visual SourceSafe 6.0 Admin),跳出如图1的窗口,点击下拉菜单Tools中的Create Database...菜单项,将出现如图2的窗口,选择新数据库的路径,例如创建MyApp数据库,然后点击OK按钮,系统将完成创建工作。
第二步,为新创建的数据库(例如MyApp)建立用户,首先需要打开该数据库,点击下拉菜单Users/Open SourceSafe Database...,然后选择数据库MyApp,打开它,如图3所示。再选择菜单项Add User...,输入用户名和口令,如图4所示。然后依次创建其他的用户。
第三步,在该新建的数据库中创建项目Project。启动Microsoft Visual SourceSafe 6.0 (Start/Programs/Microsoft Visual Studio 6.0/Microsoft Visual SourceSafe/Microsoft Visual SourceSafe 6.0),出现如图5的窗口,点击下拉菜单File中Open SourceSafe Database...,跳出如图6的对话框,选择一个数据库(例如MyApp),双击它或按Open按钮一打开该数据库;一个项目Project是一组相关的文档或者是一个文件的集合,VSS允许你以任何的层次结构来存贮和组织你的项目。在VSS数据库中,你可以创建一个或者多个项目。点击菜单File中的命令Create
Project...,创建一个项目,例如MyProject,如图7所示;创建完项目MyProject后,需要向MyProject中添加文件,点击File中Add Files命令,将跳出对话框,选择相应文件或目录,点击Add按钮,将它们添加到MyProject中去,如图8所示。
VSS服务器的配置到此基本上已经完成了,创建了数据库和项目,并为它们建立了相应的用户,这样用户在客户端的VC等集成开发环境中就可以直接登录到VSS服务器上,进行在VSS控制管理下的开发工作。
七、在客户端的VC中使用Source Code Control
当VSS服务器端的安装配置工作全部完成,并在客户端也完成了VSS的安装,这样就可启用VSS来管理控制整个开发小组的源代码和文档的版本管理。本节我们以应用比较广泛的VC++ 6.0为例来说明如何坐在客户端运用VSS,以实现所有的开发工作均处于VSS的有效的控制管理之下。
启动Microsoft Visual C++ 6.0,在VC的集成开发环境中,点击File菜单的Open Workspace 命令,跳出的对话框如图1所示,与没有安装VSS客户端软件的VC有一个明显的区别:在对话框的底部增加了一项“Open a project from source code control source control”。
点击source control 按钮,将跳出如图2的登录对话框,输入你的用户名和口令,通过Browse...按钮选择你要登录的数据库。选择一个项目Project,在文本区输入它在本地的工作目录,VSS
服务器将在该工作目录下拷贝一份源代码以供用户开发调试和修改,如图3所示。其他的操作就如同在本地开发一样,将鼠标移至VC窗口的边框,按右键选上Source Control,就会出现Source Control工具条,如图4所示。选择Source Control工具条中的相应按钮,可以完成诸如获取某项目文件的最新版本,向VSS数据库中添加新文件,将修改后的文件Checkin提交给VSS数据库,查看某个项目文件的历史信息,进行不同版本文件及不同项目之间文件的差异比对,还有共享某个项目或文件。这样操作起来是不是很轻松呢?!
简明教程
1 说明 2 概述
3 管理员部分
3.1 维护用户列表
o 3.1.1 添加用户 o 3.1.2 更改密码 o 3.1.3 创建用户列表 o 3.1.4 删除用户 o 3.1.5 编辑用户属性
3.2 管理数据库
o 3.2.1 分析数据目录 o 3.2.2 数据库打包 o 3.2.3 清除临时目录 o 3.2.4 锁定数据库 o 3.2.5 数据库恢复 o 3.2.6 使用多个数据库
3.3 有关权限的话题
o 3.3.1 权限的传递 o 3.3.2 安全访问权限
4 普通用户部分
4.1 对工程、文件的一般性使用
o 4.1.1 打开/关闭数据库
o 4.1.2 创建新工程
o 4.1.3 添加文件、目录、工程 o 4.1.4 删除和恢复文件、工程 o 4.1.5 移动文件和工程 o 4.1.6 重命名文件、工程 o 4.1.7 设置工作目录
4.2 签入、签出、获取、查看及相关操作
o 4.2.1 签入签出操作 o 4.2.2 撤销签出 o 4.2.3 获取最近版本 o 4.2.4 获取早期版本 o 4.2.5 获取和查看文件、工程 o 4.2.6 回滚到以前版本 o 4.2.7 多人同时签出一个文件 o 4.2.8 合并 o 4.2.9 排他性签出
o 4.2.10 对工程的Cloak操作
4.3 Branch、Share、Label和Pin操作
o 4.3.1 对文件和工程的Branch/Share操作 o 4.3.2 给文件、工程指定标签 o 4.3.3 Pin操作
4.4 其他操作
o 4.4.1 扩展关键字 o 4.4.2 使用Shadow目录 o 4.4.3 性能优化 o 4.4.4 查找文件 o 4.4.5 设置密码 o 4.4.6 编写批处理文件
o 4.4.7 定制SS.INI和SRCSAFE.INI文件
附录
A1 同时维护一个工程的多个版本 A2 VSS中部分命令的对应权限级别
1 说明
一、本教程针对不同使用对象提供Visual SourceSafe 6.0的若干使用指导,阅读对象包括Visual SourceSafe的管理员和普通用户,以及希望了解如何采用Visual SourceSafe进行软件版本控
制的管理人员。管理员或普通用户在使用Visual SourceSafe的过程中,如果遇到不知如何操作,或者对某些操作的注意事项不甚了解等类似情况时,可以查阅本教程。
二、本教程的\"管理员部分\"是管理员必读的,如果管理员在除履行其自身职责之外,还兼任普通用户的角色,则可以参阅教程中的\"普通用户部分\"。作为一般的普通用户,只需阅读\"普通用户部分\"即可。
三、教程中列举的操作,加星号者,为高级用法(Advanced Usage),其余为基本用法(Basic Usage)。所谓基本用法是指一些通常使用频繁的,或者是使用方法较为简单的操作。所谓高级用法是指通常使用频率不多,或者较为重要的,或者用法复杂的操作。
四、本教程内容摘选并改编自Visual SourceSafe 6.0英文版联机帮助,从中提取了诸多重要信息、容易忽略的内容以及若干注意事项。一些基本内容(主要指某些基本操作的使用方法)只简单列举了条目,欲了解这些条目的详细情况请查看联机帮助的相关部分,可以通过列于这些条目之后的英文说明在联机帮助中搜索到相关内容。
五、本教程不涉及Visual SourceSafe图形用户界面操作的解释说明,对指定功能的具体操作步骤请查看联机帮助的相关部分。可以通过列于该功能之后的英文说明在联机帮助中搜索到相关内容。
六、在其他Visual Studio产品中(例如:Visual C++)可以集成Visual SourceSafe的功能,本教程不涉及有关在其他集成开发环境下如何使用Visual SourceSafe功能的内容,这部分内容主要针对普通用户。对这些内容的了解,在阅读完本教程之后,将会变得容易。此外,某些操作在Visual SourceSafe环境下使用更为方便。
2 概述
Visual SourceSafe(以下简称VSS)是一种版本控制管理工具。它通过将各种类型的文件(包括:文本文件、图像文件、二进制文件、声音文件、视频文件等)存入其内部数据库的方式,帮助你有效地管理工程(Project,关于VSS中工程的概念请见下面)。它允许你在多个工程间共享同一组文件;你可以将一个文件添加到数据库中,以便其他相关人员使用;任何对文件的更改将被记录下来,以便在任何时候可以恢复到该文件的某个旧版本。
VSS的工程组织方式使团队协作开发变得更为容易和直观。一个工程是一组存放于VSS数据库内的任意类型的文件,一个工程类似于操作系统中的目录,但VSS为其提供了版本控制、历史记录、文件合并等更多的功能支持。
3 管理员部分
3.1 维护用户列表(Maintain the User List)
3.1.1 添加用户(Add a User)
此处略,详细内容请查阅联机帮助。
3.1.2 更改密码(Change Passwords)
此处略,详细内容请查阅联机帮助。
3.1.3 创建用户列表(Create a User List)
此处略,详细内容请查阅联机帮助。
3.1.4 删除用户(Delete a User)
此处略,详细内容请查阅联机帮助。
3.1.5 编辑用户属性(Edit User Attributes)
此处略,详细内容请查阅联机帮助。
3.2 管理数据库(Manage the Database)
3.2.1 分析数据目录(Analyze the Data Folder)*
建议你定期备份完整的VSS数据目录(参见数据库打包)。VSS数据目录中包含有全部工程和文件的数据库信息。由于网络或操作系统的某些故障,VSS中的文件可能存在错误和不一致问题,Analyze VSS DB工具被用来查找和修复这些问题。在运行该工具前,需要锁定(Lock)所有用户并要求他们退出VSS,用户可以在一个数据库被锁定时保持文件的签出状态(参见锁定数据库)。建议分两次运行Analyze VSS DB工具,第一次修复错误,第二次核查是否仍然存在没有被修复的错误。数据目录的具体位置是由Data_Path初始化变量在SRCSAFE.INI文件中指定的(参见定制SS.INI和SRCSAFE.INI文件)。
3.2.2 数据库打包(Archive Databases)*
你可能需要定期地备份VSS数据库,或者数据库的某一部分。VSS Administrator工具提供了此项功能。它可以:
节省VSS数据库服务器的磁盘空间。
加快显示历史记录操作(Show History)的速度。
便于在多个VSS数据库间传递文件和工程,保持历史记录完整无缺。 备份全部或部分VSS数据库内容并压缩成文件。
3.2.3 清除临时目录(Clean Temporary Folder)
VSS通常在运行时把临时结果放在临时目录里,并在退出前将之删除。由于某些原因,例如非正常重启,可能导致临时内容残留在目录中。作为管理员,你有责任定期清除临时目录的内容。每隔几周一次,当没有任何用户运行VSS或VSS Administrator时,请清除临时目录的内容。临时目录的具体位置是由Temp_Path初始化变量在SRCSAFE.INI文件中指定的(参见定制SS.INI和SRCSAFE.INI文件)。 3.2.4 锁定数据库(Lock a Database)
数据库锁定功能将不会自动锁定那些当前已经登录的用户,你应该在锁定数据库之前要求登录用户退出VSS。在重新允许用户使用VSS之前,需要解除对数据库的锁定。 3.2.5 数据库恢复(Restore Databases) 此处略,详细内容请查阅联机帮助。
3.2.6 使用多个数据库(Work with Multiple Databases)*
缺省时,VSS将所有文件集中放在一个数据库中。如果可能,应尽量使用一个数据库存放所有文件,这比分多个数据库存放要好,因为:
你不能在多个数据库间共享(Share)文件(参见对文件和工程的Branch/Share操作)。 将位于多个数据库中的内容集中在一起是比较困难的,需要使用VSS Administrator的Archive功能(参见数据库打包)。
出于安全的考虑,VSS的用户信息,包括密码在内,是和数据一起存放的。如果为了安全起见,要将信息拆分成多个独立的数据库,这种信息存储方式将带来极大便利,但你必须为每个数据库都单独添加用户。
3.3 有关权限的话题(About Rights) 3.3.1 权限的传递(Rights Propagation)
当你添加了一个新用户,并为该用户设置了针对某个工程的权限时,将在VSS数据库中建立起一个assignment。该assignment将会沿着工程树向下传递直至遇到另一个assignment。 例如:针对工程\"$/\" ,你为用户A指定了Add权限(参见安全访问权限),而对于工程\"$/Sample\",你没有为用户显式指定权限,则该用户将对工程\"$/Sample\"自动拥有Add权限。当你在工程\"$/Sample/BusinessObject\"处为其指定了Read权限后,将阻止早先assignment的向下传递过程,所以用户A对该工程(指\"$/Sample/BusinessObject\")及其子工程都只具有Read权限了。
当你首次添加一个用户时,该用户在工程\"$/\"处被赋予的权限由\"缺省权限\"决定,缺省权限是通过在VSS Administrator里设置Project Security属性页的内容来定义的。你可以通过修改该页内容,全局性地变更所有用户的缺省权限。 3.3.2 安全访问权限(Security Access Rights) 3.3.2.1 缺省安全设置
当安装VSS后,缺省安全设置将被启用。你可以利用定制的方式,使某些用户拥有对某些工程和某些VSS命令的特定权限。
缺省安全设置很简单,当添加新用户时,你只有两种级别的访问权限可供选择:
只读权限(Read-only rights):用户可以查看VSS中的任何内容,但不能更改。 可读写权限(Read/write rights):用户可以查看和修改VSS中的任何内容。
如果这样的访问权限级别足以应对日常使用,那么就无需再增强安全控制的级别了。 所有的VSS安全管理都在VSS Administrator中进行。任何能运行该程序的用户都可以改变VSS的任意特性,所以最好只有管理员才使用该程序。 3.3.2.2 更高级别的安全控制
在VSS中,对工程的安全性控制,是通过制定用户访问权限来实现的。每个工程仅能被那些具有相应权限的用户访问到,每个命令仅能被那些具有相应权限的用户使用。可以通过VSS Administrator来定制权限,以达到更高级别的安全控制。
以下是VSS的权限级别列表,下列每种权限都拥有该权限之前的全部权限。例如:拥有Check Out权限的用户,也将同时拥有Read权限。(参见附录A2:VSS中部分命令的对应权限级别) 权限 Read (R) 描述 类似于缺省安全设置中的只读权限 Check Out (C) 可以使用Check Out/Check In/Undo Check Out等命令对文件进行修改 Add (A) Destroy(D) 可以使用Add/Delete/Label/Rename等命令对文件进行修改 可以使用Destroy/Purge/Rollback等命令对文件实施永久性删除操作 4 普通用户部分
4.1 对工程、文件的一般性使用(Normal Use about Projects and Files) 4.1.1 打开/关闭数据库(Open/Close a Database) 此处略,详细内容请查阅联机帮助。 4.1.2 创建新工程(Create New Projects) 此处略,详细内容请查阅联机帮助。
4.1.3 添加文件、目录、工程(Add Files,Folders,and Projects) 此处略,详细内容请查阅联机帮助。
4.1.4 删除和恢复文件、工程(Delete and Recover Files and Projects) VSS提供了3种删除文件的方法:
Delete:VSS只把指定文件从当前工程中删除,而在VSS数据库中仍留有该文件的记录。此外,其他共享了该文件的工程仍保留此文件(参见对文件和工程的Branch/Share操作)。 Destroy:VSS将把指定文件从VSS数据库中彻底删除,其后将无法恢复。 Purge:永久性删除已被Delete掉的文件,其后将无法恢复。
对于共享文件,Delete和Destroy仅将文件从当前所选工程中删除掉,其他共享了该文件的工程,以及VSS数据库中,仍留有此文件。 4.1.5 移动文件和工程(Move Files and Projects)
移动一个文件的唯一方法是,在文件新所在位置的上一级工程(parent project)处使该文件共享(参见对文件和工程的Branch/Share操作),然后将原有工程(original project)下的该文件Delete或者Destroy(参见删除和恢复文件、工程)。移动后,文件的历史记录将被保留。
通过使用Move命令,你可以将一个子工程(subproject)从某个上级工程重置到另一个工程下。该操作不会改变子工程的内容和历史记录,但它会影响上级工程的历史记录(包括子工程所在的原有上级工程和新的上级工程)。当移动一个工程后,你将无法重建原有上级工程的某个旧版本。
4.1.6 重命名文件、工程(Rename Files or Projects)
若某个文件被多个工程所共享,对该文件的重命名将影响所有工程,而在Branch状态下,则不影响(参见对文件和工程的Branch/Share操作)。 4.1.7 设置工作目录(Set Working Folders) 此处略,详细内容请查阅联机帮助。
4.2 签入、签出、获取、查看及相关操作(Check In/Out、Get、View and Other Related Use) 4.2.1 签入签出操作(Check In and Check Out Files) 此处略,详细内容请查阅联机帮助。 4.2.2 撤销签出(Undo Check Out)
执行该操作时,若用户选择了替换本地文件,则用户将丢失最近一次签出后对该文件在本地的更改。
4.2.3 获取最近版本(Get Latest Version) 此处略,详细内容请查阅联机帮助。 4.2.4 获取早期版本(Get Earlier Version) 此处略,详细内容请查阅联机帮助。
4.2.5 获取和查看文件、工程(Get and View Files and Projects)
Get操作将文件或工程拷贝至本地的工作目录,并设置为read-only属性。可以用View操作查看文件内容,此时用户无需设置工作目录。
尽量不要删除vssver.scc文件。本地工作目录及每个子目录下都包含一个这样的文件,VSS利用其中记录的信息确定本地目录中哪个文件已经更改了。删除后,将使新一次的Get操作速度减慢。
4.2.6 回滚到以前版本(Rollback to Previous Versions)
该操作将使文件的内容恢复到先前某个版本时的状态,它将使所有在该版本后所做的改动丢失。如果你所回滚的文件被多个工程共享,则操作只影响你所指定的那个工程,并且它会自动实行Branch操作(参见对文件和工程的Branch/Share操作)。建议你使用虚拟回滚(Virtual Rollback),它将不会使随后的改动永久丢失。具体操作如下:
选择你要回滚的文件并签出
使用Get命令获取某个原有版本到本地 签入该文件
4.2.7 多人同时签出一个文件(Check Out Multiple Files)*
缺省状态下,一个文件只允许一个人签出,管理员可以通过修改配置,允许多人同时签出。此时,VSS将跟踪所有签出该文件的用户。每当用户签入时,VSS都将和当前存于数据库内的最新版本进行比较,若用户修改的是同一文件的不同处,VSS将进行简单的合并(Merge),否则提示用户,并且不允许签入。用户可以通过VSS提供的Visual Merge工具,比较存放于VSS数据库中的文件和本地文件的异同,手工修改本地文件,直到认为已经可以签入时,方才执行最终签入操作。(参见合并) 4.2.8 合并(Merge)*
在VSS中,合并可能发生在3种场合下:使用Multiple Checkout的工作方式;合并原先已经Branch了的文件;获取(Get)文件。
Multiple Checkout:若多个用户同时签出一个文件,第一个用户只要简单的签入就可以了。后续用户也可以签入,但他们的更改将需要和其他所有用户的更改合并,VSS将得到完整的更改内容(参见多人同时签出一个文件)。
Branch:当被Branch的文件合并到其中一个分支时,VSS将会把在另一个分支上所做的改动合并到该分支上(参见对文件和工程的Branch/Share操作)。
Merge on Get:在Multiple Checkout工作方式下,当使用Get Latest Version操作时可能引发合并操作,此时保存在VSS数据库中的内容将合并到本地文件。但如果某个文件是排他性签出的,则不会引发合并操作(参见排他性签出)。
在完成一个合并之后,VSS遵循如下规则:
如果仍有冲突,VSS维持文件的签出状态,为了使文件能顺利签入,你必须排除这些冲突。
如果你使用Merge Branches命令,将一个文件合并到一个工程中,而该工程中的对应文件已被签出,该文件将继续保持签出状态(参见对文件和工程的Branch/Share操作)。 在任何其他时候,VSS将会提示你,或者在合并后自动签入,或者保持文件的签出状态以使你在更新VSS数据库中内容之前再核查一边。
缺省情况下,当发生冲突时,VSS将启用其Visual Merge工具。
4.2.9 排他性签出(Exclusive Check Out)*
允许多人同时签出一个文件是针对整个VSS数据库而言的,但用户仍可以根据实际情况,针对某些文件修改该规则。对某个文件实施排他性签出,则其他用户将无法签出该文件,直至该用户使用了签入操作。
4.2.10 对工程的Cloak操作(Cloak Projects)*
若对某工程实行了Cloak操作,则当对该工程的上一级工程进行Get/Check In/Check Out/Undo Check Out/Project Difference操作时,将不会影响该工程及其子工程。而在该工程上进行类似操作时,则和平常得到的结果一样。这一属性将传递给其下的子工程。 例如:某个工程其路径为$/Application,下面有三个子工程:$/Application/Code,$/Application/Test,$/Application/Docs,而Docs工程下的内容可能对你没有任何用处。当你每次从$/Application处进行Get操作后,都需要从本地删除多余的Docs目录。此时可以对Docs进行Cloak操作。这样,每次的Get操作将只把Code和Test下的内容放到本地。如果你需要获取Docs工程下的内容,则可以单独从Docs处进行Get操作。 4.3 Branch、Share、Label和Pin操作(Branch、Share、Label and Pin) 4.3.1 对文件和工程的Branch/Share操作(Branch and Share Files and Projects)*
在VSS中,通过Share操作,一个文件可以被多个工程共享,在任何一个工程中对该文件的更改,都将反映到其他相关工程里。
Branch操作则消除这种共享,每次将一个被共享的文件拆成两个分支,在不同工程中分别跟踪该文件。通过查看文件属性的Links属性页可以了解该文件被哪些工程共享,通过查看Paths属性页可以了解文件的分支状况。
例如:产品目前的正式版本为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的升级工作可以同时进行,并且最大限度的降低了所需的存储空间。 4.3.2 给文件、工程指定标签(Label Files and Projects)*
VSS使用3种方式跟踪文件的历史记录:内部版本号,日期,用户自定义标签。 标签可以是一个不超过31个字符长度的串,例如:\"1.0\"、\"2.01b\"、\"Final Beta\"、\"Approved for QA\"。应用Label功能,用户就可以获取某个特定时期的软件内容了。所有当前工程下的文件和子工程都将继承该标签。 注意下面几点:
当使用Label功能时,表明你在所选工程的历史记录里创建了一个新的版本,但文件和工程本身的内容并未发生变化。
对某个工程的某个标签再次使用Label操作将覆盖原来的标签内容。
请参见附录A1:同时维护一个工程的多个版本 4.3.3 Pin操作(Pin)*
该功能对共享文件很有用,尽管它的使用不仅限于共享文件,也包括其他任何文件。当你对一个文件实施Pin操作后,你将不能对之做任何修改。如果一个文件在Pin之后又被实施了Share操作,而被Pin的那个版本同时也是被共享的版本,则所有共享该文件的工程都不能更改该文件。如果一个文件先被实施了Share操作,而后在某个工程中被Pin了,则除了这个工程外的其余工程仍可以更改该文件(参见对文件和工程的Branch/Share操作)。
4.4 其他操作(Other Use)
4.4.1 扩展关键字(Expand Keywords)*
VSS可以将某些指定信息(例如:VSS内部版本号)直接插入文本文件中。用户只要将某些关键字放入文件的注释中,每次添加(Add)或签入(Check In)文件时,VSS都会自动查找这些关键字,并将相关信息置于其后。 VSS中常用的关键字: 关键字 $Archive: $ $Author: $ $Date: $ $History: $ $Revision: $ 描述 文件在VSS中的路径名 最近一次更改文件的用户 最近一次签入的时间 文件的历史记录 VSS内部版本号 $NoKeywords: $ 使VSS对其后的所有关键字不进行扩展 例如:
在某文件中加入如下一行: $Revision: $
若当前该文件在VSS内部的版本号是22,则签入后VSS会将之修改为: $Revision: 23 $
4.4.2 使用Shadow目录(Work with Shadow Folders)*
Shadow目录位于服务器端,包含了工程中所有的文件。这些文件既非位于VSS数据库中的master copy,亦非位于本地工作目录的local copy,而是最近一次签入的所有内容。Shadow目录应该由管理员来设置。
是否使用Shadow目录功能是可选的,通常在如下两种情况下可以考虑使用该功能:
为使某些用户能查看文件(但不能更改),这些用户可能没有对VSS的访问权限。 不让你的本地工作目录保留可编译的软件副本。为使每个用户都能得到一个最新版本的
软件,所有用户可能希望在某个目录下集中进行编译,而非在各自的工作目录下编译。在这种情况下,Shadow目录功能通常和添加(Add)、签入(Check In)之后的Remove Local Copy结合使用。
Shadow目录不会跟踪子工程的变化,例如:你有一个被Shadow的工程$/A,包含两个子工程:$/A/1和$/A/2,而你又将$/A/2重命名为$/A/B,这种变化将不会被反映到Shadow目录中。你可以手工修改,或者利用Reconcile All功能,使之保持同步。 4.4.3 性能优化(Optimize Performance)*
有两种方法可以改善VSS的性能:尽可能多的将内容通过网络拷贝至本地来做;修改初始化文件对VSS的性能进行微调。 具体优化措施:
在SS.INI或SRCSAFE.INI文件中设置如下变量:
Diff_Ignore (PC) = c-e-s-w-
使VSS在进行文件比较时忽略end-of-line标记,从而加快运行效率
CP_OnSelection = No
在使用VSS Explorer时,缺省状态下,用户使用鼠标单击或使用键盘的方向键在工程列表上移动时,就会选中工程。设为No后,只有双击鼠标或按回车键才会选中。
设置临时目录
缺省情况下,VSS将临时文件存于服务器端,但管理员可以通过修改SS.INI中的Temp_Path变量,将临时路径设置在本地。
让管理员在SRCSAFE.INI文件中将Lock_Mode变量设置为Native
这是SRCSAFE.INI中该变量的缺省设置,把该变量设置为Native将使几乎所有的VSS操作都得到加速。该变量只能由管理员来设置。
管理员通过Disable下面的功能,也可以一定程度地改善性能:
o Shadow folders(参见使用Shadow目录) o Journal files
o Project security system(参见安全访问权限) o Keyword expansion(参见扩展关键字)
4.4.4 查找文件(Search for Files)
VSS Explore的list view缺省时只显示当前工程中的所有文件。通过使用Search命令,可以只显示符合指定要求的文件。例如:只显示.h文件,只现实被签出的文件。Search命令是允许递归的。
4.4.5 设置密码(Set Passwords)
如果VSS管理员指定域账号为VSS登录账号,则用户登录VSS时将不会提示输入密码。 4.4.6 编写批处理文件(Writing Batch Files)*
在编写批处理文件时,一些在命令行方式下使用的交互手段需要改变。
屏蔽输入(Disable Input)
如果你的批处理文件中包含了一系列VSS命令(它们可能需要整夜运行),你一定不希望程序执行期间会停下来提示用户输入信息。有3个命令行选项可以解决此类问题。
缺省时,VSS在执行诸如添加(Add)、签入(Check In)等操作时会提示你输入注释(Comment),利用-c选项可以避免该类提示:
命令 -c- \"-cHello\" 描述 不添加注释 使用Hello字串作为注释 -c@COMMENT.TXT 使用comment.txt文件的内容作为注释 此外,VSS通常会要求用户回答yes或no,你可以使用-i选项避免此类问题:
命令 描述 -i-y 对所有此类提问自动回答Yes -i-n 对所有此类提问自动回答No -i 使用缺省回答 VSS也可能会提示登录名,你可以使用-y选项提供足够多的信息。
重定向输出
缺省时,VSS将所有输出定向到屏幕,在命令行状态下你可以使用-o选项分页输出,而在批处理文件中你同样可以利用-o屏蔽输出或重定向输出。
命令 -o- -oRESULTS.TXT 描述 屏蔽输出 重定向所有输出到文本文件results.txt中,如果该文件已存在,输出内容将追加到该文件末尾。 使用命令行返回值
在命令行状态下运行VSS时,VSS会设置一些返回值来标明运行状态。你可以在批处理文件中根据VSS的返回值采取相应措施。
返回值 100 1 描述 表明出错,例如:VSS无法找到数据库文件,或者你试图签出某个早已被签出的文件。 表明一个不是很严重的错误,将在如下三种情况下发生: 当你使用ss Dir时,没有找到任何条目。 当你使用ss Status时,至少有一项被签出。 当你使用ss Diff时,至少有一个文件不一致。 所有这些情况表明,即使本次操作是成功的,你执行的下一个VSS命令也可能操作失败。 0 VSS成功执行。
4.4.7 定制SS.INI和SRCSAFE.INI文件(Customize the SS.INI and SRCSAFE.INI Files) VSS有两类初始化文件,它们包含了VSS的一些环境变量:SS.INI,每个用户都有一个这样的文件;SRCSAFE.INI,仅有一个,定义了VSS的一些全局变量,只有管理员才有权修改它。 附录
A1 同时维护一个工程的多个版本(Maintain Multiple Versions of a Project)
你可以使用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功能提供指导: 场景1:理想情况
1、对即将到达Beta 1版的工程进行开发和测试。 2、当你认为时机适宜时,将之Label为\"Beta 1\"。 3、开始Beta 2版的工作。
场景2:文件A的某个版本被错误地包含在Beta 1版中
1、对即将到达Beta 1版的工程进行开发和测试。 2、当你认为时机适宜时,将之Label为\"Beta 1\"。 3、开始Beta 2版的工作。
4、如果发现文件A某一时期的版本被错误的包含在了Beta 1版中,选择该文件的正确版本并Label为\"Beta 1\"。
5、获取(Get)Beta 1版的工程。
场景3:需将bug-fix后的文件A被包含在Beta 1版中,而其余文件未曾改动 1、对即将到达Beta 1版的工程进行开发和测试。 2、当你认为时机适宜时,将之Label为\"Beta 1\"。 3、开始Beta 2版的工作。
4、你发现,包含在Beta 1版中文件A的那个版本存在bug,必须改正,而工程中的其余文件则不须改动。
5、签出该文件,改正,然后签入。
6、将工程重新Lable为\"Beta 1\"(你将被询问是否确认删除原有标记)。 场景4:需将bug-fix后的文件A包含在Beta 1版中,而其余文件也作了改动 1、对即将到达Beta 1版的工程进行开发和测试。 2、当你认为时机适宜时,将之Label为\"Beta 1\"。 3、开始Beta 2版的工作。
4、你发现,包含在Beta 1版中文件A的那个版本存在bug,必须改正,而工程中的其余文件已经改动过且已经被签入。
5、签出该文件,改正,然后签入(此时该文件的VSS内部版本号将自动加1)。
6、将该文件Label为\"Beta 1\"(和工程的Label同名),这将使该文件的现有版本被指定为\"Beta 1\"。
场景5:文件A的一个原有版本需要进行bug-fix,并加入Beta 1版中 1、对即将到达Beta 1版的工程进行开发和测试。 2、当你认为时机适宜时,将之Label为\"Beta 1\"。 3、开始Beta 2版的工作。
4、你发现,包含在Beta 1版中文件A的那个版本存在bug,必须改正。例如:文件的当前内部版本号是6,且包含了为达到Beta 2版所做的某些改动,而你不希望将这些改动并入Beta 1版中。
5、签出文件A(Version 6)
6、获取Version 4,覆盖Version 6的本地版本。
7、修改该文件Beta 1版中的bug,然后签入。这将使文件A的内部版本号升至7(Version 4的内容加上bug-fix后的内容,但没有包含Version 5和Version 6的内容)
8、将Version 7 Label为\"Beta 1\"。这将使文件A的Version 7版被指定为\"Beta 1\"。现在,如果你尝试获取Beta 1版的工程时,你将会得到包含bug-fix后的文件A(被单独Label)连同原来Label为\"Beta 1\"的工程中的其余文件。
9、为了继续Beta 2版的工作,需要恢复在Version 5和Version 6上的改动,再次签出文件A(Version 7) 10、获取Version 6。
11、覆盖Version 7的本地版本,或合并之(这将使本地版本变成Version 6的内容加上你在Version 7中为\"Beta 1\"所做的bug-fix)。
12、继续修改文件A的本地版本直到你满意,然后签入。这将产生文件A的Version 8,现在你将可以继续Beta 2版的工作了。 A2 VSS中部分命令的对应权限级别
下表中打星号表示具有该类权限的用户可以使用该命令。
功能 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 R * * * * * * C A * * * * * * * D * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Recover Rename Rollback Share [4] Share Undo Check Out Set Working Folder * * * * * * * * * * * * * * * * * [1] 此处指用户必须有对Parent Project的A类权限。
[2] 此处指用户必须有对目的Project的C类权限,同时有对原Project的R类权限。 [3] 此处指用户必须有对目的Parent Project的A类权限,同时有对原Parent Project的D 类权限。
[4] 此处指用户必须有对原Project的C类权限,同时有对目的Project的A类权限。
因篇幅问题不能全部显示,请点此查看更多更全内容