VSS使用步骤[转]-飞外

在软件工程的领域里,有一块叫做 SCM(Software Configuration Management),有人管它叫「软件建构管理」。SCM 的传统定义是原始码的版本管理,后来则逐渐演进扩大,还包含了软件开发的一些标准和程序的制定与应用 [Summerville 2000]。版本管理工具对目前的软件开发开环境来说相当重要,因为不管是软硬件环境的改变、需求改变、软件本身的 bug...等等,都会令软件不断地演进,我们必须记录各个版本,以便随时比对版本之间的差异,或者回到(rollback to)过去的某个版本;此外,当项目小组成员众多时,工作交接、多人修改同一个档案等情况,都有可能造成档案的版本混乱。例如一支程序本来由张三撰写,可是因为某些原因(请假、临时支持其它项目、请别人 debug....)暂时由李四修改,后来又交回给张三。如果用传统的档案共享机制,每次有这种情形就要互相通知:我改好啰,请把档案从档案服务器搬回你家,万一有人忘了,可能就会造成档案版本错乱,而东西交到客户手上才发现 bug 依然存在。因此,如果你曾碰过下列情形,而且深感困扰,你可能就需要版本管理工具的协助:档案不见了(用鼠标拖放档案时误动作,不知道拖去哪儿放了);档案被别人覆盖;想要比对各版本之间有何差异;想要回到之前修改的版本(客户反复无常,设计改来改去....);多人同时修改造成的版本混乱;想要知道谁动过的我的程序代码;跨项目共享组件或模块散落在各处。目前市场上的版本管理工具已经有很多,环肥燕瘦任君挑选,以下几个可能是大家比较熟悉的:Rational Clear CaseBorland StarTeamMerant PVCS Version ManagerMicrosoft Visual SourceSafe(VSS)Concurrent Versions System(CVS)CVS 虽然免费,也有窗口接口,但是入门门坎还是偏高,不易入手,以 unix/linux 社群用得较多;StarTeam 和 ClearCase 功能较强大,价格当然也较贵;PVCS 个人也没使用过,无法提供意见;而 Visual SourceSafe(VSS)功能虽然比较阳春,但是笔者试用之后,觉得如果只需要管理多人开发时的文件和原始码版本,其实还挺好用的,也很容易上手。VSS 在 Visual Studio .NET 光盘中就有附了,价格算是相当实惠。以下是使用 VSS 管理原始码的好处(有些不是 VSS 特有的):建构人员可以实施每周的里程碑版本建立,统一编译所有程序代码,确保交给客户的版本一定是最新的,不会因为某个开发人员忘了把自家 local 的档案复制到 server 的共享目录而遗漏掉。leader 不用一天到晚打电话或发 mail 去追谁还没有把新的档案放上 file server。共享单元的更新更简便、确实。提供独立且细微的 user 权限控管,没有 Windows 档案分享时的账户权限检查困扰。同一个档案多人同时修改可自动 merge 最后的修改成果。可将历史版本叫出来比对,显示差异处,以进行合并或修正。提供 Web 应用程序的档案布署功能。可以和多种开发工具整合,例如:Visual Basic、Visual Studio .NET、FrontPage 200x。注:撰写此文件时,使用的是 VSS 版本是 Visual Studio .NET 1.0 附的 Visual SourceSafe 6.0c。1.1基本概念想象一下没有工具协助的情况下,当多人同时修改一份文件时,要如何确保文件的版本一致?也许你可以指派一位专人负责管理文件的进出,这个人姑且就叫他 Manager 好了,Manager 待在一间小小的办公室里,负责文件库的维护和文件的进出。当小组成员 Eric 要修改文件时,就拿磁盘到这个窗口请 Manager 复制一份给他,Manager 在复制的同时会记下来:这份文件正由 Eric 修改;而 Eric 则会把磁盘拿到他自己的机器上,把档案复制到他的工作目录(working folder),然后进行修改。等到 Eric 修改完毕,再从工作目录中把档案复制到磁盘上交给 Manager,最后文件就被更新到文件库中(这动作叫做 check in),至此整个文件的修改与更新的程序就完成了。如果在 Eric 修改期间,Vivid 也拿着磁盘向 Manager 要求修改同一份文件,这时 Manager 会告诉 Vivid:这份文件目前已经由 Eric 领出(check out),且还在修改当中,你得等他改完才行喔。以目前的作业环境来看,使用磁盘来传递档案似乎是原始人的行径,我们当然可以透过网络来传递档案,但是透过网络传递档案却无法提供上面的例子所要表达的重点:档案的锁定。而锁定机制就是 VSS(或其它版本管理工具)提供的基本功能之一,它确保了多人修改文件时,版本的一致性。上面这个例子当中的文件库,就相当于 VSS 的数据库,而 VSS 的客户端工具(称为 VSS Explorer)则扮演了 Manager 的角色。当然 VSS 提供的功能更多,它也允许多人同时取出(check out)同一个档案进行修改,并且在将档案送回(check in)数据库时,自动进行合并(merge),这属于比较进阶的功能,稍后亦会提到。现在你应该已经大概知道什么是 VSS 数据库、什么是 check in、check out,以及文件修改的流程了,接下来就把一些常见的 VSS 术语列出来,在阅读本文时,如果碰到不了解的术语,也可以随时回头查看。以下是使用 VSS 时常见的术语:
VSS 数据库VSS 会使用一个数据库来储存各项目的程序代码版本(包括历史版本和最新版本的档案)。
ProjectVSS 项目,是一个项目档案的逻辑结构,跟操作系统的目录类似(注意不是指特殊开发工具的项目,例如:VB 专案)。
Working Folder客户端的项目工作目录。每次从 VSS 数据库取出档案时,就会将档案复制客户端机器的这个目录下。
只从 VSS 数据库取得 Master Copy 的档案,但是不做修改。当你要取得档案的最新版,并且只对它读取时,可使用此功能。
Shadow Folder影子目录,它是一个硬盘上的实体目录,每当开发人员 check in 档案时,VSS 就会同时将档案复制一份到这个影子目录里面。
2.1服务器端服务器端包含了管理工具和客户端工具的安装,相关的管理及设定工作有下列几项:1. 安装 VSS。2. 建立数据库(使用 Admin 管理工具)。3. 建立 user 账户(使用 Admin 管理工具)。4. 设定其它选项。5. 设定网络的共享目录。以下是各项工作的施行细节,我们会在 D:VSS_DB 目录下建立一个新的 VSS 数据库,如果你不想要建立数据库,也可以使用预设的数据库。2.1.1安装VSS直接执行安装程序,安装过程中会有一个安装选项画面,其中有三个选项,分别为 SHARED DATABASE SERVER、CUSTOM、与 STAND-ALONE。请选择 SHARED DATABASE SERVER。安装完成后,在〔开始程序集〕里面会有一个 Microsoft Visual SourceSafe 数据夹,里面有四个程序快捷方式:Analyse Fix VSS DBAnalyse VSS DBMicrosoft Visual SourceSafe 6.0 Visual SourceSafe 6.0 Admin2.1.2建立数据库开启 Visual SourceSafe 6.0 Admin,如果是夹中的 "Use network name for automatic user login" 项目打勾。以后再次执行 VSS Explorer 时,就会自动以该使用者名称登入,而不会出现登入画面。2.2.3建立项目登入数据库之后,由于是夹更改这个预设设定,参考下图:项目完成时,或者需要对现有版本进行建置与发行时,可以在服务器的计算机上开启 VSS Explorer,利用〔Get Lastest Version〕取得最新版本,你便可以在服务器端进行建置或者备份项目的工作;或者,你也可以透过影子目录(shadow folder)的功能,来达到相同的目的(参考 3.4 节)。3.其它功能本节将介绍 VSS 的其它功能,包括:多重 checkouts档案的共享(Share)与分枝(Branch)影子目录(Shadow Folder)
3.1多重checkoutsVSS 预设不允许多重 checkouts,也就是当一个档案或目录被一个使用者 check out 之后,其它使用者就不能再 check out 该档案目录。当你的小组可能为多人同时修改一个档案,或多人同时修改一个目录里面的各个档案时,可以将多重 checkouts 的功能开启。设定方法是在 VSS Admin 管理工具里面,将〔ToolsOptions〕的 "General" 页夹里的 "Allow multiple checkouts" 项目打勾。使用多重 checkouts 时,有些值得特别注意的地方,例如:一个档案由多人同修改时,VSS 将如何处理?以下将说明相关的注意事项。文字文件v.s.进位档当你开启多重 checkouts 选项时,表示有可能一个档案同时由多人修改,而 VSS 能够将这些人对同一个档案的修改结果合并(merge)起来,每当一个使用者 check in 档案时,VSS 就会自动进行 merge。也由于 VSS 提供了这项功能,因此限定只有文字文件(text files)才能够多重 checkouts,二进制档案(binary files)仍然是禁止的。VSS 会自动判断档案是属于文字文件还是二进制文件(藉由搜寻二进制的 x0 字符),你也可以预先指定好哪些档案类型是二进制文件,省得 VSS 还要花时间判断;方法是:开启 VSS Admin 的〔ToolsOptions〕,切到 "File Types" 页夹,把二进制档案的附文件名加入 "Binary files" 字段里。参考下图:注:所谓的文字文件,通常是指可以用记事本开启的纯文本文件,因此 WORD 文件(.DOC)档案应该归类为二进制档案。图中的 File groups 清单里面,笔者自行加入了 Delphi 项目会用到的档案类型,这项设定是用在当你加入档案时,显示在档案类型下拉盒中,方便你挑选档案而已,如下图:其实大部分的情况下,用预设的 "*.*" 就行了。当一个档案被多人 check out 时,每当有人将该档案 check in,VSS 就会自动比对档案的差异,并且合并有差异的部分。考虑下面的场景:1. 张三与李四都 check out 了 foo.txt 这个档案。2. 张三修改了 foo.txt 的夹,先输入要设定 shadow folder 的项目,你也可以点旁边的〔Browse〕钮,用鼠标来选择项目;接着输入影子目录的实体路径名称,设定完之后按〔确定〕钮即可。如果你要一次设定多个项目的影子目录,可以在每一个项目设定完后按〔Set Another〕钮。参考下图:如果要取消影子目录,只要先输入项目名称,然后把 "Set shadow folder to" 这个字段清除就行了。影子目录通常是服务器上的目录,建议使用 UNC 路径名称,若使用像 "C:Projects" 之类的本机磁盘驱动器名称,则每个使用者的机器上都会维护一份 Shadow Folder 档案。你必须确定每个开发人员都有权限存取影子目录,否则当他们 check in 档案时,就会出现错误。
4.结语最后,笔者整理出几个使用 VSS 时的重点步骤及快速键(假设数据库和使用者账户都已经建立好了):1. 登入 VSS 数据库,开启 VSS Explorer 时就会要求登入,也可以点选〔FilesOpen SourceSafe Database...〕或按 Ctrl+P 来登入别的数据库。2. 建立项目,〔FileCreate Project...〕。3. 设定工作目录,〔FileSet Working Folder...〕或按 Ctrl+D。4. 加入档案,〔FileAdd Files...〕或按 Ctrl+A。5. 取出档案并修改,〔SourceSafeCheck Out〕或按 Ctrl+K。6. 修改完后送回服务器,〔SourceSafeCheck In〕或按 Ctrl+U。其中只有最后两个步骤是开发人员经常执行的动作。VSS 主要是依靠将档案属性设定成只读来提供档案锁定的机制,而其档案传递的途径则是透过传统的 NetBIOS 和档案共享机制,这使得 VSS 的应用范围只能限制在局域网络内,如果能透过 TCP/IP 的方式传输档案,适用的范围会更广,也会更方便 [注1]。透过本文的介绍,笔者希望能让你对 VSS 有一个初步的了解,并且能很快地学习如何使用它,当你真正开始使用它,就会逐渐发现一些新的或者一些比较细节的东西,此时再到网络上寻找解答,这样可能会比读完很多份文件以后才开始安装使用要来得快一些。如果你要更深入了解 VSS,可以参考文后列出来的参考资料,微软网站上亦提供了相当丰富的文件,从这个网址进入:http://msdn.microsoft.com/ssafe/,里面有 VSS 的最新消息和大量的技术文章、教学文件,你可以从这些文件里获得对 VSS 更完整的认识,并且学习一些进阶的管理议题,例如:VSS 数据库的保全、分析、修复、与备份;VSS 的自动化(automation);与其它 IDE 工具的整合等等。在学习使用的过程中如果碰到问题,可以利用网络论坛来寻求解答,这里列出几个供读者参考:Visual SourceSafe Newsgroup.http://msdn.microsoft.com/newsgroups/default.asp?url=/newsgroups/loadframes.asp?icp=msdn slcid=us newsgroup=microsoft.public.vstudio.sourcesafe.Tek-Tips Forums.http://www.tek-tips.com/threadminder.cfm?SPID=722.CodeGuru Forums - Visual SourceSafe.http://www.codeguru.com/forum/showthread.php?threadid=252820.