VSS6.0服务器的配置和管理
前言
很幸运,微软的产品总是比较容易入门(并因此招致竞争对手的嫉妒和指责)。
微软公司的大多数项目并非用VSS管理(他们使用更强大的版本控制系统),然而很多管理严格的公司(真正的CMM3)却也在使用VSS进行管理,他们的VSS数据可以累积到好几个G。
这些公司并非仅仅使用VSS管理源代码,他们用VSS管理所有受控的文件,包括组织级文件、项目文档、会议记录、评审报告等等,总之一句话,所有重要的东西和他们的历史都可以在VSS中获得。
很多程序员在体会了版本控制系统的好处以后开始用版本控制系统管理自己的所有文件,从此不用担心自己遗忘什么或者因为偶然的失误失去什么重要的东西,这是一种幸福的感觉。
Visual SourceSafe 是一个源代码控制系统,可以保存文件的不同版本,可以比较文件的差别,可以控制不同的人对同一文件的修改。就功能而言是同类产品中比较弱的,但满足了基本的需要并且非常容易使用,因此获得了非常广泛的使用。VSS目前的最高版本是6.0D(6.0+SP6=6.0C),微软公司似乎没有开发VSS.net的计划,因此我们不得不继续忍受Visual Studio 98风格的界面。
所谓VSS服务器指的是存放VSS数据库的计算机,客户端是访问VSS数据库的计算机,而VSS数据库是一个共享的目录,仅此而已(因此并不存在服务器程序)。
安装
安装类型包括“SHARED DATABASE SERVER”、“CUSTOM”和“STAND-ALONE”三种,
第一种共享数据库服务器是完全安装,第二种定制安装的默认值也是完全安装,因为这个软件本来就很小,所以选前两种就行了,第三种单机安装就是单机版。
此软件的安装与标准的Windows程序略有不同,安装过程中检查已经安装的旧产品的方式是搜索整个文件系统,因此可能将同一电脑上的其他操作系统上安装的VSS检查出来,此时不必理睬安装程序的警告,将安装位置改到合适的地方继续安装就行了。安装过程可能还会提示数据库版本的问题,新的V6数据库V5软件不能访问,一般来说总是应该使用更新版本的数据库,再说升级VSS客户端软件是很容易的。
安装完成以后得到一个VSS目录,这个目录包含了一切:程序文件、配置文件、默认数据库、用于网络安装的客户端安装程序。如果这个默认数据库需要在网络上共享(一般总是需要的)则将这个VSS目录共享,并给相关人员设置完全访问的权限(即使这个用户只是VSS数据库的只读用户)。注意,目录的安全属性与共享权限不同,“Program Files”目录下子目录和文件的访问权限可能是受限制的,所有VSS用户在VSS目录的安全属性也必须是完全访问的。
这样修改安全属性:在VSS目录上点右键,选择“属性”,切换到“安全”属性页,设置权限,然后点下面的“高级”按钮,选中高级里面最下面的“重置所有子对象的权限并允许传播可继承权限”选择框,点“确定”退出高级,再点确定使修改生效。
安全提示:因为VSS数据库要在网络上完全共享,所以网络要安全,如果有删除所有文件的病毒就会出大麻烦,一般的感染特定文件类型的病毒危害小一些,无论如何,安全最重要。
数据库管理
(a)介绍
VSS的数据库是一个目录,目录下包含若干个文件和目录,“srcsafe.ini”是关键文件,此文件用来标识一个VSS数据库。VSS客户端打开一个数据库的方式就是找到这个文件,所以共享数据库的方式就是简单地共享包含这个文件的目录。另外一个文件“users.txt”记录用户信息。
还有三个目录:“data”、“temp”和“users”,分别存放数据库的内容、临时的信息和用户的相关数据。安装VSS软件的目录除了上面所说的VSS数据库的文件外还包含几个目录存放VSS程序,根据安装类型不同可能还包括网络客户端安装程序。
VSS不存在服务程序,一切都通过文件操作进行。最简单的备份方式、也是最可靠、绝不会出错的方式就是备份整个目录。另一个方式是定期取得数据库里所有文件的最新版本,只对最新版本进行备份。为了避免保存大量不必要的版本,可以对每个项目建立一个VSS数据库,这个数据库保存所有的变更(包括开发过程中的大量尝试性的变更),而公司级的受控库只保存正规的版本。
安装VSS软件的时候可能已经安装了一个数据库,那么这个数据库就是默认的数据库,数据库都用位置命名,目录名字或者网络位置的名字(名字其实是无关紧要的,数据库的实际位置才是关键)。
VSS软件在程序菜单中包含四个程序,其中两个——分析并修复数据库、分析数据库——都是很少用的,另外两个VSS Admin程序(Visual SourceSafe 6.0 Admin)和VSS 浏览器(Microsoft Visual SourceSafe 6.0)是最常用的。另外还有一些其他程序并未出现在程序菜单,需要阅读帮助文件挖掘,VSS支持命令行方式,有编程接口(不然开发工具是如何与VSS整合的)。
每个数据库初始拥有两个用户:“Admin”和“Guest”,都拥有全部权限并且没有口令(因为Admin没有口令是不安全的,所以初次打开Admin程序会得到一个安全警告)。Admin用户是超级用户并且无法被删除也不能修改权限。Admin口令是最重要的,因为默认情况下VSS程序会用上一次的用户名和口令登录VSS,所以一般用户忘记口令是很常见的,这时候就需要Admin用户使用Admin程序重新设定用户的口令了。
VSS以树形目录的方式组织内容,每个目录称之为一个项目(Project,这是一个重要概念),每个子目录也同样是一个项目,如果使用了递归选项则对一个项目的操作会包含下面的所有子项目,对一个项目的设定会影响子项目,子项目的设定会覆盖继承自父项目的设定(但具体每个操作的效果要看具体的操作,并非没有特例)。简单地说,项目就是虚拟目录(并且和外部实际目录对应)。
(b)Visual SourceSafe 6.0 Admin程序
打开Admin程序要求输入口令,但并不总是这样,VSS会保存上次使用的数据库和用户名、口令,这样下一次使用VSS就不需要输入口令,进入VSS的Admin或浏览器程序以后可以再改变数据库。Admin程序的界面如下:
基本上这是个相当简单的界面,功能都通过菜单实现。界面的主要部分用来显示当前的用户列表、权限和登录状态,不支持右键,仅支持双击,双击可以修改用户的名字和权限。权限很简单,默认为“Read-Write”,可以修改为“Read-Only”,显然这不会使我们满足,我们需要的是
今天闲的时候trace route了yahoo和sina的域名,yahoo的如下:
1 1 ms 1 ms <1 ms 172.21.127.1
2 3 ms <1 ms <1 ms 10.236.253.17
3 3 ms 3 ms 3 ms 10.236.253.46
4 12 ms 6 ms 5 ms 172.21.202.198
5 103 ms 100 ms 100 ms 172.21.202.18
6 102 ms 109 ms 99 ms 172.21.202.17
7 101 ms 101 ms 102 ms 10.236.252.6
8 104 ms 103 ms 106 ms 10.236.252.22
9 101 ms 107 ms 101 ms 140.242.214.1
10 104 ms 157 ms 165 ms lag1.esr2.sngp.masergy.com [64.138.1.25]
11 135 ms 143 ms 136 ms ge-5-2-1.esr1.hkca.masergy.com [64.138.1.89]
12 138 ms 135 ms 141 ms lag1.esr1.hkca.masergy.com [64.138.1.46]
13 164 ms 136 ms 140 ms fe3-31.br02.hkg04.pccwbtn.net [63.218.252.89]
14 138 ms 142 ms 137 ms tenge8-0.cr02.hkg04.pccwbtn.net [63.218.60.125]
15 295 ms 373 ms 302 ms pos10-2.br02.sjo01.pccwbtn.net [63.218.6.190]
16 303 ms 310 ms 303 ms 63-218-179-34.static.pccwglobal.net [63.218.179.34]
17 374 ms 357 ms 296 ms ae-3.pat2.swp.yahoo.com [216.115.96.57]
18 312 ms 298 ms 340 ms ae-6.pat2.gqb.yahoo.com [216.115.96.62]
19 321 ms 309 ms 310 ms ae-0.msr2.gq1.yahoo.com [66.196.67.23]
20 321 ms 299 ms 329 ms xe-9-0-0.clr2-a-gdc.gq1.yahoo.com [98.137.31.141]
21 298 ms 311 ms 299 ms et-18-25.fab2-1-gdc.gq1.yahoo.com [98.137.31.170]
22 315 ms 304 ms 324 ms po-10.bas2-7-prd.gq1.yahoo.com [206.190.32.31]
23 299 ms 322 ms 308 ms ir1.fp.vip.gq1.yahoo.com [206.190.36.45]
sina的如下:
1 <1 ms 3 ms <1 ms 172.21.127.1
2 <1 ms <1 ms 3 ms 10.236.253.17
3 2 ms 2 ms 5 ms 10.236.253.46
4 8 ms 5 ms 6 ms 172.21.202.198
5 113 ms 103 ms 103 ms 172.21.202.18
6 99 ms 101 ms 99 ms 172.21.202.17
7 100 ms 100 ms 110 ms 10.236.252.6
8 99 ms 100 ms 98 ms 10.236.252.22
9 100 ms 103 ms 101 ms 140.242.214.1
10 102 ms 101 ms 100 ms lag1.esr2.sngp.masergy.com [64.138.1.25]
11 135 ms 134 ms 134 ms ge-5-2-1.esr1.hkca.masergy.com [64.138.1.89]
12 134 ms 142 ms 231 ms lag1.esr1.hkca.masergy.com [64.138.1.46]
13 137 ms 134 ms 135 ms fe3-31.br02.hkg04.pccwbtn.net [63.218.252.89]
14 305 ms 306 ms 324 ms 192.205.36.233
15 313 ms 314 ms 343 ms cr1.sffca.ip.att.net [12.122.200.10]
16 309 ms 311 ms 315 ms cr83.sj2ca.ip.att.net [12.122.158.6]
17 310 ms 313 ms 546 ms gar4.sn1ca.ip.att.net [12.122.110.61]
18 310 ms 309 ms 320 ms 12.122.251.142
19 296 ms 295 ms 295 ms mdf001c7613r0004-tge-12-1.sjc1.attens.net [12.130.128.174]
20 296 ms 296 ms 297 ms 12.130.132.30
我觉得sina的比较好懂,yahoo的有一个疑问,看到最后几个router的名称都带有yahoo的字样,也就是说这些已经是yahoo内部的路由器了吗?一般的web server架构中应该会有负载平衡,web server, db server等几种吧,难不成yahoo连自己内部的路由器都放任别人来trace route吗?
check the original problem here:http://acm.hdu.edu.cn/showproblem.php?pid=1800
the AC code:
#include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<map> #include<cstdio> using namespace std; int level[3010]; bool visit[3010]; bool cmp(int a,int b){ return a>b; } int main() { int n; while(cin>>n) { for(int i=0;i<n;i++) scanf("%d",&level[i]); memset(visit,0,sizeof(visit)); sort(level,level+n,cmp); int sum=0; for(int i=0;i<n;i++) { if(visit[i])continue; int k=i; for(int j=0;j<n;j++) { if(visit[j])continue; if(level[j]<level[k]){ visit[j]=1; k=j; } } sum++; visit[i]=1; } cout<<sum<<endl; } return 0; }