2008年10月31日星期五

【转】VSS(Visual SourceSafe)使用入门

VSS浏览器拥有如下界面,工具栏和右键菜单很完善,使用起来非常方便。

界面下边用来输出一些没用的信息,不必管它。左边是项目列表,看起来就是一个目录树,根用"$/" 表示,可以手工添加项目,然后往项目里面添加文件,也可以一次把一个目录(可以递归包含子目录)添加进来成为一个项目。右边是项目下的文件,不包括子项 目,显示的信息包括签出的用户的名字和最后一个版本的时间以及签出位置。右边上面两个文本是当前的项目名称和项目的工作路径(工作路径是项目默认的本地目 录)

对项目可做的操作主要包括:创建项目、删除项目、添加项目或文件、设置项目工作路径、设置版本标签、取得最新(最后)版本、签出、签入、撤销签出、查看历史、比较差异、查看属性(没什么属性,关键是这里可以恢复删除的文件)。

对文件可做的操作主要包括:查看、编辑、签出、签入、撤销签出、取得最新(最后)版本、查看历史、比较差异、删除、重命名、查看属性(文件类型很重要,二进制文件无法比较细节,只能比较相同或不同,文本文件则可以按行比较,有时VSS不能正确识别文件类型,需要手工修改)。

节 1.05           项目操作

(a)            添加项目和文件

选中项目树的节点,然后点右键选择"Create Project"或者工具栏上的第一个(也许你的版本不是第一个)按钮"Create Project"或者菜单"File"下的"Create Project"可以在选中的节点下创建一个新项目(看起来就是创建一个子目录,事实上也没什么差别),需要输入的是项目的名字,支持中文,有兴趣的话顺便把注释也填上,省得以后忘了这个项目是干什么的。

很多时候可以通过添加一个目录以及目录下的所有内容来创建项目。选择"Add Files"命令可以添加项目或文件。这个命令的名字实际上并不准确,它既可以添加文件又可以添加项目。

选择左边的文件然后点"Add"按钮会把这个文件添加到当前项目,选择右边的目录点"Add"按钮则会把目录添加到项目(也就是成为一个子项目,存在一个选项让你把整个目录全部添加进来)。有时候你会注意到左边不会显示任何文件或者只显示了一小部分文件,这是因为同名文件已经在项目中存在,不可能添加同名文件进来的缘故。如果选择的是项目,弹出的"Add"对话框不仅提供输入注释的地方,还在下面提供了一个选项:递归 "Recursive",这个选项在很多地方都有,用起来很方便。选择这个选项就不只是把当前目录和下面的文件全部添加进来,而且把子目录及子目录下的内容也全部添加进来。曾经有人向作者抱怨VSS不好用,每个子目录都需要一个一个创建,很麻烦,嘿嘿,他只是英文不太好又不愿意查字典而已。

(b)            设置项目工作路径

为项目设置一个对应的本地目录,用来取得版本进行编辑。只需要为项目(工程意义的项目,而不是VSS的项目)的总入口的VSS项目设置一个工作目录既可,获得版本时下面的所有VSS子项目自动作为一个子目录得到。如果子项目设置了独立的工作路径,那么这个工作路径仅当对在这个子项目上执行操作的时候才会有用。

(c)            取得项目最新版本

这个命令通常从项目的右键菜单获得,名为"Get Last Version"。

目标位置默认是项目的工作路径,但可以更改。"Recursive"递归,若选中可以得到整个项目树,否则只得到项目下的文件而不包含子项目。"Make writeable",默认取得的文件是只读的(Check Out才是获得可编辑的版本的合理方式),若选中则不设置只读属性。

(d)            签出项目Check Out

一次性签出项目下的所有文件,适合一个项目(子项目)下所有文件都归一个开发人员负责的情况。

若选择递归则连子目录下的东西一起签出。"Don`t get local copy",不取得本地版本,这样不会覆盖本地已有的版本(也许本地版本包含着你一个通宵的勤苦工作,当然不能随便覆盖)。

签出的文件没有只读属性,可以修改。过程上应该首先签出才有权修改文件,签入以后修改才会被其他人认可。如果文件已经被签出,就应该等待或者去跟签出者协商,绝不应该在没有签出的情况下擅自修改本地文件。任何人都应该服从这一点,否则项目版本将仍然陷入混乱。

(e)            签入项目Check In

一次性签入一批文件。不签入别人看不到你的修改。

       有递归选项,可以连子目录一起签入。"Keep checked out",保持签出状态,在频繁修改代码时经常会这样做,保存一个中间版本然后立即继续修改。"Remove local copy",删除本地版本,这个主意不好,万一VSS服务器硬盘坏了不就完蛋了,不过你也许有别的方面的考虑。

(f)              撤销签出Undo Check Out

如果后悔了,不想修改文件,可以撤销签出。

       

       有递归选项。还要选择本地版本的处理方式,可以用VSS里面的版本覆盖,也可以留着不管它,还可以删除,要仔细斟酌。

(g)            显示历史记录Show History

查看项目的所有历史,包括增加文件、删除文件、签入文件(文件有更改)。(第一次使用会有配置only labels 点ok然后在打开就能显示版本了! 

       

可选项包括递归(包括子目录的历史)、包括文件的历史、包括版本标签、只包含标签(会禁止文件历史)、从什么时候开始、到什么时候(时间格式大概按照操作系统来的,至少YYYY-MM-DD是合法的时间格式)、哪个用户。默认没有递归选项,多数时候需要加上这个选项,其余选项不常用。显示的历史记录如下图所示:

按照时间顺序列出了所有历史,可以注意到文件file1.cpp在"Added"之后有两次签入,这两次签入之间有一个Label"Labeled'v1'",Label对应项目下的所有文件,除非子项目用一个同名的Label覆盖(这种情形应当避免)。这个窗口提供了很重要的项目管理功能。

"View",查看选中的文件的内容,就是查看以前版本的内容。

"Details",查看历史记录的详细信息,有一些内容是可以编辑的。清除Label的内容将导致Label被删除,没有独立的删除Label命令,这就是删除Label的方法。

"Get",取得选中的文件的历史版本或者取得选中的Label版本(label之前的最新版),会提示取得版本放到哪里去,对项目也有递归选项。能够取得任何时候的历史版本,这个功能才是版本控制系统存在的价值。

"Check Out",签出文件或项目。

"Share",共享。两个项目可以共享一个文件,两边看起来各自有一份,但其实是同一份,一次只能由一边签出。通常用菜单"SourceSafe"下的命令执行,共享以后可以断开搞分支开发。

"Report",报告历史,可以报告到打印机、剪贴板或者文件,可以包含文件历史和版本差异。

 

这也是关键功能。可以比较两个项目或目录的差异,包括一边有而另一边没有的文件和内容不同的文件。

默认情况下比较的是项目和项目的工作目录的差异,以"$"开头的是VSS项目,但两个都可以用"Browse"改变,所以实际上可以比较任何VSS和目录的差异。下面四个选项全选是最全面的,显示所有的相同和不同。递归选项选中可以包含子项目或子目录。下图是比较结果:

存在下列差异:

demo.cpp在项目中存在,但在工作目录不存在,蓝色显示。

file1.cpp有差异,图标到有红色标记。

file2.txt没有差异。

file1.cpp.bak和"新建 文本文档.txt"项目里面没有,绿色显示。

对于这些差异可以用右键菜单分别处理(注意鼠标点在哪边的文件上可能是不同的,作者的习惯是在这里只查看差异和添加文件,从不在这里删除)。

对于项目里面有但工作目录没有的,可以从项目里删除,也可以取得最新版本或签出。

对于项目里面没有的,添加到项目里面,或者从目录里删掉(真的删除了文件,而不是仅仅从列表删除)。

对于有差异的,可以查看差异(产生一个文件的差异比较,这是很常用的功能)签入或撤销签出。

对于没有差异的,可以删除或签出。

(i)               设置版本标签Label

给项目做一个版本号,这个标签代表的版本是做这个标签的时间之前的最新版本。一般在管理上要求做版本标签(有时称之为封版)之前所有文件都已签入(VSS并不要求这样),以后就可以取得标签版本。如果标签搞错了,可以在项目历史里面查看标签细节,然后将标签名称修改,如果要撤销标签就把标签名称清空。

(j)              取得历史版本

因为这是版本控制的标志功能之一,所以重复一次。

取得项目历史版本,在项目上查看历史,找到合适的Label,选择"Get"命令。

取得文件历史版本,在项目或文件上查看历史,找到合适的版本,选择"Get"命令。

节 1.06           文件操作

(a)            取得最新版本

Get Last VersionVSS数据库里的最后一个版本会放到指定的目录下,默认是项目的工作目录。

(b)            签出

Check Out,然后就可以修改。

(c)            签入

Check In,然后别人取得最新版本就可以看到你的修改。

(d)            撤销签出

       Undo Check Out,放弃修改权。对本地文件有三种处理方式:用VSS版本覆盖、保留、删除,请谨慎选择。

(e)            查看和编辑(View,Edit

VSS提供整合的查看、编辑能力(当然通常我们是在专门的开发环境中工作的)。这两个功能有同样的界面,只是默认操作不同,View的默认操作是编辑,Edit的默认操作是签出并编辑(一个典型的糟糕设计)。

不管从哪个命令进入都可以改变"Do you want to"选项进入另外一个命令。查看或编辑的工具可以是VSS内置程序或者操作系统注册的程序(如果没有注册的程序则该项不可用)或者手工选择一个不同的程序。

(f)              显示文件历史Show History

比项目的显示历史少一点选项,但显示结果有不同的命令可用。

       这里每个文件版本都获得了一个版本号"Version",是从1开始的自然数序号,每次签入都产生一个新版本(但没有修改的签入不产生新版本)。注意到有一个版本标签"v1"是来自项目的版本标签。

       这里多出几个不同的命令可用:

       "Diff",比较差异,默认跟工作目录的版本比较,但选中两个不同的版本(用Ctrl键)也可以进行两个历史版本之间的比较,比较的结果实可视化的,非常直观(仅限于文本文件,对二进制文件只能报告相同或不同)。

       "Pin",订住,被订住的版本成为最新版,别人取最新版本只能取得被订住的版本,而不影响签出者修改文件、签入、签出。只能订住还没有被签出的文件。订住可以避免其他开发者得到一个不可用的中间版本。

       "Rallback",回滚,选中的版本之后的版本都会被删除,选中的版本成为最新版。出于对历史的尊重,先签出,然后取得历史版本覆盖到工作目录,然后签入,这也许是更好的回滚方式,毕竟一个糟糕的版本也是一个版本。

(g)            文件比较Show Differences

重要功能。可以直接从右键菜单进入,也可以从文件历史结果窗口进入,还可以从项目差异结果进入。

比较的两个文件都可以改变到VSS数据库里的一个文件或者一个普通文件,VSS数据库的文件还可以带上VSS的版本号。下面的选项一般不用修改,格式如果选择为SourceSafeUnix,就会使用原始方式显示结果,很不爽,还是Visual比较好。结果如下图:

原来的文件第三行被删除,文件最后又增加几行,一目了然,点工具栏上的向上向下箭头可以查看下一个上一个差异。

(h)            文件属性

文件属性首要关心就是文件类型,Text文件可以按行存储,按行比较,Binary文件则只能按照原始格式存储,每个版本都是一个完整文件,占用很大空间,而且只能比较出相同或不同。可以在文件属性窗口改变这个属性。如果某个文件VSS不能正确存储,就只能改为二进制格式。有时候VSS自动判断出错,也要逐个修改文件属性。

其他几项暂时没什么可说的,需要用的时候自然就会了。

节 1.07           与开发工具整合

很多开发工具都整合了VSS支持,此时最好只用开发工作操作。开发工具对VSS的操作本质上与VSS浏览器是一样的,不过是签入签出而已。只是一定不要忘了及时签入,否则你的工作是能被别人看到的。

节 1.08           已知的问题

(a)            UNICODEUTF-8的问题

ANSI格式没有问题,UTF-16UTF-8有问题,不能正确识别,存储的文件会错乱。微软承认麻烦很大,详细的说明MSDN里面可以查到,下面的斜体文字引自MSDN文档"ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/vsintro7/html/vxtsksavingfileswithencoding.htm"

为了方便代码在特定语言和特定平台上进行显示,可将文件与特定字符编码建立关联。

如果使用 Visual SourceSafe ANSIUTF8 Unicode 格式存储文件,请注意它们各自的以下限制。

  • ANSI 文件只允许使用当前代码页中支持的字符,这会限制国际使用。
  • Unicode 文件无法使用共享签出、差异检查或合并功能,原因是此类文件是作为二进制文件处理的。可在国际文件中使用此格式。
  • UTF8 文件在 Visual SourceSafe 中不能安全地工作,因为在签入、签出、差异检查和合并过程中该文件会被更改,而这会导致 UTF8 文件编辑器出现问题。

(b)            InterDev开发Web应用的问题

不可绕过InterDev直接使用VSS浏览器签入签出,会死人的。InterDev实际上借助IIS访问VSS,所以会有这个问题。很幸运,vs.net里面已经没有InterDev了。

(c)            文件比较的问题

有时候会报告文件有差异但却看不出差别,也许是换行符的差异,也许不是,如果执行签入会发现并没有签入(这意味着签入程序并不认为文件有差别)。如果是6.0C,这种情况会非常多,6.0D则好很多,基本上不会出现。因为是C版大量使用所以特别提到这个问题。顺便说一下,C版和D版可以混用,没发现什么问题。

(d)            签入无效的问题(与CuteFTP有关的)

有时候看起来签入成功但实际上并未签入。如果文件是用CuteFTP下载到本地的,那么可能是因为CuteFTP显示FTP文件的窗口需要刷新。推测可能是CutFTP下载文件时使用旧的文件信息,VSS签入时发现文件是旧的就认为不是新版本不需要签入。

节 1.09           Tip

1 有时会出现某个文件无权 GET 的问题,重起 SERVER 端机器即可解决

2 有一次,不知因何原因(可能是病毒),Sourcesafe 的数据库访问权限变了,需要在 Windows 页面重新分配所有权

3 建议经常做 SourceSafe 备份,以便文件丢失时(Sourcesafe 大了会丢失),可以挽回,备份采用 WINDOWS 的自动备份功能即可(管理工具中有一个备份工具,排定一个计划,即可自动备份)

4 了解 sourcesafe 目录结构的方法如下:将所有内容 GET 出来, TREE>*.txt(DOS命令),即可将该目录结构存储到一个文本文件中

 
2008-10-31

chenxu

没有评论: