# title : CVSNT SERVER Configuration
#
# @author: H819
#
# @version: 0.5
#
# Copyright: free reference,note author name and the article link.
#
# Date :Dce 14th ,2005
#
# History:
# Dce 14th ,2005,version 0.5
/*
说明:
1.${CVSNT},表示,CVSNT的安装路径
2.${CVSNTROOT},表示,CNSNT的 ROOT Repository 路径
3.本文提到的 CVSNT 一般指 CVSNT Server
*/
****************
* CVSNT 的安装 *
****************
平台
CVSNT-2.5.03.2151;
windows xp sp2;
/*
注意:
一般需要 ntfs 格式的系统
CVSNT Server 官方站点
http://www.march-hare.com/
http://www.cvsnt.org/archive/?M=A
这个网址可以下载到原始安装文件和手册
*/
安装 CVSNT-2.5.03.2151
过程略
注意:
1.安装完成之后,安装程序会自动把 ${CVSNT} 加入到 path 中
2.cvs.ext 既是 server 又是 client,如果仅作为 client 端,想要运行 cvs 命令,也必须安装它;
3.注意设定 CVSNT Repository.
***********************
* CVSNT的用户验证方式 *
***********************
CVSNT的用户验证方式分两种
1.Windows系统用户与CVSNT用户共存的混合验证方式:
即 windows 操作系统用户和 CVSNT 的 passwd 文件定义的用户都可以作为 CVSNT 的用户。
1.1 作为操作系统的用户登陆:输入操作系统的用户和密码;
1.2 作为 CVSNT 的用户登陆:输入 passwd 文件中定义的用户和密码。
在这种方式,操作系统的管理员帐户同时也是 CVSNT 服务器的管理员帐户。
2.CVSNT用户单一验证方式:
只有 CVSNT passwd 文件定义的用户作为 CVSNT 的用户。
登陆:输入 passwd 文件中定义的用户和密码。
默认工作模式是混合验证方式,但是使用单一验证方式对用户的管理比较方便一点,因此下面的介绍,基于 CVSNT 用户单一验证方式。
***********************
* CVSNT的主要配置文件 *
***********************
CVSNT 服务器安装完成之后,要定义 ROOT Repository (即上文定义的 ${CVSNTROOT} ),在该目录中,定义了服务器的各种配置,在这里可以定义管理选项参数。
本文主要介绍以下几个文件:config,passwd,admin,group,checkoulist,fileattr.xml,cvswrappers
*** config 文件 ***
只关注文中第一、二行注释
#Set this to `no" if pserver shouldn"t check system users/passwords
#SystemAuth=yes
SystemAuth: 定义验证方式,默认是 SystemAuth=yes ,即混合验证方式。
这项设置默认是注释掉的,相当于 SystemAuth=yes
如果想要修改为 CVSNT 用户单一验证方式,修改为 SystemAuth=no
注意,如果修改为 SystemAuth=no ,操作系统用户就不能登陆 CVSNT 服务器了,所以要在定义好 CVSNT 服务器的管理员之后(即修改好 passwd,admin,checkoutlist 三个文件之后),再修改它。
*** passwd 文件 ***
该文件中定义了 CVSNT 用户的用户名、密码、操作系统用户别名;
默认该文件是不存在的,只有管理员有权限创建和修改它;
该文件不能被 checkout。
格式:
cvsadmin:fqr1fS4gDghrt:administrator
用户名:密码:操作系统用户别名
密码是CVS使用UNIX标准加密函数对密码进行加密后的结果;
这个用户名和密码和操作系统用户没有关系,修改它们不会对操作系统产生任何影响;
每个用户必须要有一个操作系统用户别名,这个别名必须在操作系统中真实存在,并且是管理员身份,否则该用户无法进行 cvs 操作。(为什么必须是管理员?) //这个问题 在我的点滴4里,我讲了一下我的理解
/*
实际上, CVSNT 服务器是以该操作系统用户的身份进行文件的读写操作的,如果该操作系统用户为 guest ,则不能 checkout ,ls 等。
不知道为为什么 CVSNT 服务器没有把这项设置对使用者透明化,因为每个用户都要进行 checkout ,ls 等基本的操作,如果连这些基本的操作都不能进行的话,这个用户就没有存在的必要了。
按我的理解,格式就要用户名和密码,后面的操作系统别名默认为管理员,就像 servu 一样易于使用。
(也可能有其他的原因)
附:
cvsnt manual
The cvs passwd command can be used to add or delete new users. Only an administrator can do this.
Note that deleting a user does not remove them from any user permissions.
*/
*** admin 文件 ***
文件中定义了 CVSNT 服务器的管理员列表
格式:
user1
user2
...
该文件中的用户同样必须出现在 passwd 文件中;
该文件中的用户,拥有 CVSNT 服务器管理员的所有权限;
该文件默认是不存在的,需要手工建立;
该文件要加入到 checkoutlist 文件中。
实际上,cvsnt server 把这个文件当作一个特殊的 group 来对待的。
*** group 文件 ***
这个文件用来定义组,我们可以将同样性质的用户归入一个组,然后用给用户赋权限的方式给组赋权限,这样,一个组的用户就会具有同样的权限。
格式:
group1:user1 user2 user3
group2:user4 user5 user6
group3:user7 user8 user9
组的名称+冒号+用户名+空格+用户名+空格...
多个用户名之间用空格来进行分割;
组中的用户,要在 passwd 文件中存在。
*** checkoutlist 文件 ***
# The "checkoutlist" file is used to support additional version controlled
# administrative files in $CVSROOT/CVSROOT, such as template files.
#
# File format:
#
# [<whitespace>]<filename><whitespace><error message><end-of-line>
#
# comment lines begin with '#'
该文件用来支持附加的版本控制操作,在 CVSROOT 中添加的文件,要在此文件中声明.
目前只知道,admin 文件需要声明.
格式举例:
admin err msg by Apollo
注意:不要忘记文件名称之前的空格。
*** fileattr.xml 文件 ***
在每一个 Repository 建立之后,都会在 Repository 的 ROOT 中建立一个名字叫做 CVS 目录,该目录中只有一个文件 fileattr.xml;
fileattr.xml 文件中定义了访问该 Repository 的用户的权限;
对于新建立的 Repository ,默认是所有人拥有所有权限(CVSNT ROOT 除外);
CVSNT ROOT 的 fileattr.xml:默认是只有管理员拥有其所有权限。
*** cvswrappers 文件 ***
refers to
http://www.mobilefish.com/developer/cvsnt/cvsnt.html
Before using CVS, it is recommended to update the cvswrappers file. The cvswrapper file contains file extensions which determines which file should be stored as binary files in the CVS Repository. To update this file do the following:
Add the following file extensions in the cvswrappers file, e.g.:
*.cab -k 'b'
*.class -k 'b'
*.doc -k 'b'
*.dll -k 'b'
*.ear -k 'b'
*.exe -k 'b'
*.exp -k 'b'
*.fla -k 'b'
*.gif -k 'b'
*.gz -k 'b'
*.jar -k 'b'
*.jpg -k 'b'
*.jpeg -k 'b'
*.lib -k 'b'
*.msi -k 'b'
*.mso -k 'b'
*.pdf -k 'b'
*.pfw -k 'b'
*.png -k 'b'
*.ppt -k 'b'
*.sit -k 'b'
*.swf -k 'b'
*.tar -k 'b'
*.tlb -k 'b'
*.vsd -k 'b'
*.xls -k 'b'
*.war -k 'b'
*.wmz -k 'b'
*.zip -k 'b'
******************
* CVSNT 配置实验 *
******************
*** 实验目的 ***
1.修改 CVSNT 服务器验证方式为 CVSNT 用户单一验证方式;
2.定义 CVSNT 服务器的管理员为 cvsadmin,密码为 cvsadmin;
3.定义两个 Repository(testa,testb) ,添加四个普通用户,每个 Repository 有两个用户.
test1:test1 , test2:test2 为 Repository testa 的用户,test1,只能读(checkout),test2 能读、写、添加文件(read,write,create).
test3:test3 , test4:test4 为 Repository testb 的用户,test3,只能读(checkout),test4 能读、写、添加文件(read,write,create).
*** 完成效果 ***
cvsadmin 能设置 CVSNT 服务器的配置,并且能对所有的 Repository 拥有全部权限;
test1,test2 只能看见 testa,并且 test1 只能对 teata 进行 checkout(read),test2 能对 testa 进行 checkout,commit,add (read,write,create);
test3,test4 只能看见 testb,并且 test3 只能对 teatb 进行 checkout(read),test4 能对 testb 进行 checkout,commit,add (read,write,create);
/*
说明:
权限参数有 read,write,add,tag,control. 这里只举例说明最常要的 read,write,add(参见帮助文档);
control 没有应用成功。
*/
*** 开始配置 ***
/*
说明:
1. 以下从命令行进行配置,注意步骤地顺序;
2. 设置权限等,都要把 Repository checkout 出来;
3. 对于 CVSNT 服务器的设置,实际上就是对 CVSROOT 这个特殊的 Repository 进行设置,所以首先也要把 CVSROOT checkout 出来.注意 checkout CVSROOT 需要用管理员身份;
4. 刚安装完成之后的 CVSNT server 默认的管理员是操作系统的管理员,所以用操作系统管理员身份 checkout CVSROOT;
*/
1 *** 进入命令行,建立一个临时目录,用来放置 checkout 出来的 Repository ,修改完成之后,再提交到 CVSNT server 上去。
d:/ md 00 # 在 d: 建立一个临时目录,进入
d:/00/
2 *** 登陆 CVSNT server
d:/00/set cvsroot=:pserver:administrator:123456@localhost/cvsroot
/*
说明:
set cvsroot 是设置一个临时的环境变量,变量值为 = 右边部分;
pserver 为登陆协议,是一种明文协议,用户名和密码可以被监测到。本次实验用这种协议,其他的协议以后再总结;
administrator:123456 为本机操作系统的管理员用户和密码;
localhost 为登陆的机器地址,可以用 IP;
/cvsroot cvsroot 是安装 CVSNT server 的时候,指定 CVSROOT 的别名。
*/
3 *** 列表
d:/00/ cvs ls
/*
说明:
列出 CVSNT server 的 CVSROOT 下面的所有 Repository;
此时应该只有一个 CVSROOT ,它是服务器的根,服务器的所有配置都在这里;
此时登陆的身份是管理员,前文说过,CVSNT ROOT 的 fileattr.xml 已经定义,默认是只有管理员拥有其所有权限;
列表命令成功,同时也说明登陆成功。
*/
4 *** checkout CVSNTROOT 到 d:/00/
d:/00/cvs co cvsroot
/*
说明:
co 是 check out 命令的简写,具体简写的命令,见帮助;
该命令会把 CVSNTROOT checkout 到 d:/00/ ,并且会在 d:/00/ 建立一个 cvsroot 目录;
d:/00/cvsroot 里面是 CVSNTROOT 中的所有配置信息;
修改配置信息之后,再 commit 上去, CVSNT server 的配置随之改变了。
*/
5 *** 添加用户信息
d:/00/cvs passwd -r administrator -a cvsadmin
d:/00/cvs passwd -r administrator -a test1
d:/00/cvs passwd -r administrator -a test2
d:/00/cvs passwd -r administrator -a test3
d:/00/cvs passwd -r administrator -a test4/ //由于版本的问题这个命令的格式已经换了,请用CVS PASSWD --H来查看详细的细节。
/*
说明:
该命令会直接在 CVSNT server 的 server 端直接建立一个 passwd 文件,而不会在已经 checkout 的 d:/00/cvsroot 目录中建立此文件;
该文件只能由管理员建立,并且不能被非管理员修改,不能被 checkout;
-r 是管理的操作系统用户的别名
注意:
该命令不会影响操作系统用户;
此操作系统用户必须为管理员。
-a 添加用户
添加用户的时候,会提示输入密码。(本次实验,用户名和密码取相同)。
建立的 passwd 文件内容应如下内容:
cvsadmin:oVaaG5hcPSOQY:administrator
test1:eXetD79lHrTgw:administrator
test2:zX3nQkEmS/Se2:administrator
test3:cZgugWplhpBd.:administrator
test4:pZ5M7WTmCHMmI:administrator
The cvs passwd command can be used to add or delete new users. Only an administrator can do this.
Note that deleting a user does not remove them from any user permissions.
参考上文 passwd 文件说明。
*/
6 *** 定义 cvsadmin 为 CVSNT server 管理员
在 d:/00/cvsroot 建立文件名为 admin 的文件(注意,无扩展名)
内容为 :
cvsadmin
即定义了 cvsadmin 为 CVSNT Server 管理员;
如果还想加入其他的用户作为管理员,依次加入用户名即可,每个用户名一行;
实际上 CVSNT 把这个文件中的所有用户,当作是管理员组。
7 *** 注册文件 admin 到 checkoutlist 文件
打开 d:/00/cvsroot 中 checkoutlist 文件,加入这一句:
admin err msg by jh
注意 admin 前后的空格,具体的格式信息,参照前文 checkoutlist 文件 说明部分;
只有添加的 admin 文件需要注册到 checkoutlist 中,其他的添加文件不用。
8 *** 定义 group 组
在 d:/00/cvsroot 建立文件名为 group 的文件(注意,无扩展名)
内容为 :
#testall :hava all permissions
testaall:test1 cvsadmin
#testar :read only
testar:test2
#testbll :hava all permissions
testball:test3 cvsadmin
#testbr :read only
testbr:test4
testaall,testball 有完全权限;
testar,testbr 只读权限;
该文件不用注册到 checkoutlist。
9 *** 修改 cvswrappers 文件
参考上文。
10 *** 修改验证方式
修改 d:/00/cvsroot 下面的 config 文件
修改前面第二行为:
SystemAuth=no
即修改验证方式为 CVSNT用户单一验证方式。
11 *** 提交对 CVSROOT 的修改
11.1 进入 d:/00/cvsroot
11.2 d:/00/cvsroot/cvs add admin group
由于 admin 和 group 文件是新产生的,所以提交之前要添加到 commit 的计划之中;
运行完该命令之后,会提示运行 cvs commit 命令提交该文件。
11.3 d:/00/cvsroot/cvs commit
运行该命令,会提交 d:/00/cvsroot/ 目录中的所有文件,包括新建立的文件;
中间过程会弹出来一个提示文件,说明哪些文件被修改了,哪些文件是添加的,该文件的信息如下:
CVS: ----------------------------------------------------------------------
CVS: Enter Log. Lines beginning with `CVS:' are removed automatically
CVS:
CVS: Committing in .
CVS:
CVS: Modified Files:
CVS: checkoutlist cvswrappers config
CVS: Added Files:
CVS: admin group
CVS: ----------------------------------------------------------------------
即提示修改了 checkoutlist config cvswrappers 三个文件,添加了 admin group 两个文件;
这个提示文件可以添加内容,所有信息都会被提交并且被 CVSNT Server 记录;
关掉该文件,选择继续提交。
/*
至此,完成工作如下:
CVSNT server 已经设置为 CVSNT用户单一验证方式;
CVSNT server 管理员已经设置为 cvsadmin;
test1,test2,test3,test4 已经添加。
此时,如果再运行命令 cvs ls ,则会提示该用户不存在。
因为我们最开始登陆的时候,设置的是 set cvsroot=:pserver:administrator:123456@localhost/cvsroot
所以此时运行 cvs ls 是在 set cvsroot=:pserver:administrator:123456@localhost/cvsroot 环境下面进行的,而我们已经改变了验证方式为 CVSNT用户单一验证方式,administrator 用户不在 passwd 文件中,所以 cvs ls 命令不会被执行了。
以 cvsadmin 用户登陆:
关掉命令窗口,打开一个新的命令窗口
进入临时目录 d:/00/
d:/00/set cvsroot=:pserver:cvsadmin:cvsadmin@localhost/cvsroot
d:/00/cvs ls
就可以看到 CVSROOT 下面的所有 Repository 了。
测试其他的用户为非管理员,即看不到 CVSROOT:
关掉命令窗口,打开一个新的命令窗口
进入临时目录 d:/00/
d:/00/set cvsroot=:pserver:test1:test1@localhost/cvsroot
d:/00/cvs ls
会提示
Listing modules on server
空白,即不能看到 CVSROOT。
前文提到过,CVSNT ROOT 默认是只有管理员拥有其所有权限,它是靠 fileattr.xml 文件这一句
<all deny="1" />
来实现的,具体的详细解释见下文。
*/
12 *** 至此,对 CVSRT Server 的 CVSROOT 的修改已经完成,为了安全起见,删除临时 checkout 出来的 CVSROOT
d:/00/rd cvsroot /s
dos 命令,删除根目录下面的所有文件及文件夹。
/*
dos 命令
1. help # 列出所有命令
2. help xxx #列出 xxx 的帮助
*/
13 *** 以 test1 用户身份 import 一个 testa 工程,做如下权限限制:
只有 cvsadmin,test1,test2 能看见 testa,;
test1 只能对 teata 进行 checkout(read);
cvsadmin,test2 能对 testa 进行 checkout,commit,add (read,write,create).
关闭窗口,建立临时目录 d:/00/test/,在 test 中放入几个文件,准备 import 到 CVSNT Server 上面去。
重新以 test1 用户登陆:
d:/00/test/set cvsroot=:pserver:test1:test1@129.9.200.253/CVSNTROOT
把 d:/00/test/目录中的所有文件 import 进入 CVSNT Server,并且命名为 testa:
d:/00/test/cvs import -m "Imported sources test1 " testa start
-m 为导入时的日志信息
cvs --help import 可以查看 import 参数
设置权限:
必须导出来才可以定制权限;
只有 CVSNT Server 的管理员才可以设置权限,项目的建立者(owner)也不能更改权限(是这样吗,麻烦!);
新建立的项目:默认是所有人拥有所有权限;
cvs lsacl :查看当前 Repository 权限。
/*
关于权限的说明:
CVSNT 2.5 对 Repository 的访问控制设置,是使用命令 chacl,chown 来进行的;
当新建立一个 Repository 之后,会在其中建立一个 cvs 文件夹,里面有一个 fileattr.xml 文件,该文件定义了其所在 Repository 的访问控制权限,实际上 chacl,chown 命令就是对该文件的操作;
chacl,chown 命令,只有管理员能够执行,就是 Repository 的创建者(owner)也不能执行!(管理员累死了!怎么会有这种管理方法!)
执行 chacl 命令,必须先把 Repository 导出来,以下执行命令,都是导出来之后执行的。
*/
13.1 一个新的 Repository 创建之后,默认是对所有人开放所有权限的。一个新建立的 Repository 的 fileattr.xml 文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<fileattr>
<directory>
<owner>test1</owner>
</directory>
</fileattr>
仅仅表明,该 Repository 的拥有者 owner (即创建者) 是 test1.
CVSNT 2.5 权限管理的原则是:如果不显示的指出否定权限,则赋予肯定权限。(这一点个人觉得非常不方便,安全是第一位的。)
例如上面的 fileattr.xml 是所有人,拥有所有权限
13.2 如果要把默认的权限关闭,要用 chacl 命令
以管理员身份执行
cvs chacl -a none
执行完毕之后,应该是这个样子:
<?xml version="1.0" encoding="UTF-8"?>
<fileattr>
<directory>
<owner>test1</owner>
<acl>
<modified_by>cvsadmin</modified_by>
<modified_date>2005.12.11.11.00.04</modified_date>
<all deny="1" />
</acl>
</directory>
</fileattr>
modified_by,modified_date 是注释信息;
<all deny="1" /> 一句,把默认得权限都关闭了,即使是管理员、创建者都没有任何权限了;
并且,如果不显示的指出肯定权限,都是默认的否定权限(和默认的权限规则相反)。
13.3 开通管理员的所有权限
cvs chacl -u testaall -a all
即,testaall 组对 testa 拥有全部权限;
-u 可以是组名称,也可以是单个用户名称。
<?xml version="1.0" encoding="UTF-8"?>
<fileattr>
<directory>
<acl>
<all deny="1" />
<modified_by>cvsadmin</modified_by>
<modified_date>2005.12.11.11.00.04</modified_date>
</acl>
<owner>test1</owner>
<acl user="testaall">
<modified_by>cvsadmin</modified_by>
<modified_date>2005.12.11.11.00.41</modified_date>
<all />
</acl>
</directory>
</fileattr>
这样,testaall 组中的用户拥有所有权限了,其他的用户无任何权限;
如果想要让一个用户拥有 所有权限,加入到 testaall 组即可。
13.4 添加 testar 组用户只读权限
cvs chacl -u testar -a read
说明:
经过 cvs chacl -a none ,如果不显示的指出肯定权限,都是默认的否定权限(和默认的权限规则相反);
相当于 cvs chacl -u testar -a read,nowrite,nocreate,no...(所有的参数加上前缀 no).
<?xml version="1.0" encoding="UTF-8"?>
<fileattr>
<directory>
<acl user="testaall">
<all />
<modified_by>cvsadmin</modified_by>
<modified_date>2005.12.11.11.00.41</modified_date>
</acl>
<acl>
<all deny="1" />
<modified_by>cvsadmin</modified_by>
<modified_date>2005.12.11.11.00.04</modified_date>
</acl>
<owner>test1</owner>
<acl user="testar">
<modified_by>cvsadmin</modified_by>
<modified_date>2005.12.11.11.09.33</modified_date>
<read />
</acl>
</directory>
</fileattr>
/*
对于 CVSNTROOT Repository 的说明
刚建立 CVSNTROOT 的时候 fileattr.xml 是这样的(CVSNT 自动建立的)
<?xml version="1.0" encoding="UTF-8"?>
<fileattr>
<directory>
<owner>administrator</owner>
<acl user="administrator">
<all />
</acl>
<acl user="admin">
<all />
</acl>
<acl>
<all deny="1" />
</acl>
</directory>
</fileattr>
即只有 administrator 用户和 admin 组的用户拥有全部权限;
而 安装 CVSNT 的时候,是以操作系统管理员 administrator 安装的,所以 administrator 默认给了所有权限,当更改了验证方式之后,administrator 用户就无效了。
admin 也是 CVSNT 自动加上的,即默认 admin组中的用户也拥有全部权限.
实际上,我们可以直接用编辑工具按照格式更改 fileattr.xml 文件,而不用 chacl 命令,效果是一样的。
我们可以测试:
test1,cvsadmin 用户可以 read,write,create ...
而test2 用户只能 read
*/
14 *** testb 工程
同 11 testa 的过程
建立以后,我们会发现:
test1,tes2 用户运行 cvs ls 的时候,只能看见 testa
test3,tes4 用户运行 cvs ls 的时候,只能看见 testb
而 cvsadmin 用户,可以看见全部的 Repository(cvsroot,testa,testb)
15 *** 完成,可以测试实验的结果了
********
* 备注*
*******
1. 基本概念介绍
refers to
http://www.guoly.com/wincvs-guide.html
CVS是很早的时候在Unix下发展起来的,它使用的术语比较特殊,需要先熟悉和理解,这是使用CVS的第一步。
1.1 Repository: 中文名称:仓库。它是 CVS服务器(可能在远程,也可能在本地)的根目录,我们所有的工作都保存在这个仓库中,包括源代码和这些代码的全部历史。你可以把Repository想像成一个仓库,仓库中有许多“木桶”,每个“木桶”就
是我们的一个让CVS管理起来的工程。对于CVS来说,这些“木桶”之间是没有什么关联的,删除一个“木桶”不会影响别的“木桶”。我们所想像的木桶,在CVS术语中,又叫模块(Module)。
1.2 Module:中文名称:模块。就是上面我们所想像的仓库中的“木桶”,里面放的是一个项目的所有文件(包括源代码,文档文件,资源文件等等)。在物理上,Module是CVS服务器根目录下的第一级子目录。
1.3 Import:中文名称:导入。我们本地有一个软件项目,里面有许多各种类型的文件,都需要用CVS进行版本管理,那么第一步就是把这个软件项目的整个目录结构都Import到CVS的仓库中去。经过这种导入,CVS将为你的项目创建一个新的“木桶”----Module,即模块。
1.4 Checkout:中文名称:导出。指将仓库中的一个“木桶”(Module, 模块)中的东西导出到本地的工作目录下,然后我们可以在WinCvs的管理下,进行工作,修改其中的内容。
1.5 Commit:中文名称:提交修改。我们在本地的工作目录下,对工程中的文件进行修改,这些修改,需要提交给CVS的仓库,这个过程,就叫Commit。你可以Commit一个文件,也可以Commit整个目录。
1.6 Update:中文名称:同步。它与Commit相对应,是从仓库中的“木桶”(模块)中下载你同事修改过的文件(别忘记你的项目有许多人共同参与),如果这个文件在你本地也有,就会更新本地的拷贝,如果你本地没有,就会把新文件下载到你的本地。
1.7 Revision:中文名称:文件版本。这是CVS中一个需要特别注意的概念,它指的是单个文件的版本,而不是整个项目的版本。基本上,单个文件每次的修改,经过Commit之后,它的Revision都要改变一次,比如从1.1到1.2到1.3等等。特别要注意,单个文件的版本(Revision)与整个工程产品的版本(Version,或者Release)可以没有任何关系。例如,整个产品现在发行1.0版本(Version 1.0)了,但是产品的源代码文件中,有的文件版本(Revision)可能是1.9, 有的是2.1,等等。这很容易理解,因为为了发行产品V1.0,我们需要对源代码进行多次修改编译。
1.8 Release:中文名称:发行版本。整个产品的版本,例如VC5.0, VC6.0等。
1.9 Tag:中文名称:标签。在一个开发的特定期,对一个文件或者多个文件给的符号名,一般是有意义的字符串,如“stable”,“release_1_0”等。比如,我们对某个文件的1.5版本加上标签:“memory_bug_fixed”,借助这个有意义的标签,我们可以理解1.5版本解决了内存Bug,所以说Tag赋予了版本一些文字含义。
上述这些基本概念,与其它的版本控制工具(例如Microsoft Source Safe)有一定的差异,建议您仔细体会。
2. cvsroot 文件介绍
举例 :exmple
.#exmple 以 .# 开头的文件是备份文件,不能被 checkout
exmple,v 以 ,v 结尾的文件:此文件记录了文件的各次版本变化的历史记录,cvs 根据此文件,进行版本控制。
exmple 该文件记录真正的文件内容,在进行 cvs 命令操作的时候,和 exmple,v 一起作为 cvs 版本控制的依据。
3. cvs 命令
cvs help
# 列出所有命令
cvs --help command
# 查看某个命令的语法
命令简写
http://www.mobilefish.com/developer/cvsnt/cvsnt.html
*************
* refers to *
*************
http://blog.csdn.net/lonelyegg/
http://www.mobilefish.com/developer/cvsnt/cvsnt.html
http://blog.csdn.net/jdskyy/archive/2005/10/18/508567.aspx
http://www.8848software.com/scmforum/forum.asp?FORUM_ID=49&CAT_ID=9
(一个讨论论坛)
*******
* faq *
*******
1.
关于登陆CVSNT server 出现信息 :
Error reading from server xxxx: -1: Unknown error
的解释
一般是无法链接到 CVSNT server ,是通讯受到阻止的原因。
排查一下原因:
查看本机的防火墙;
局域网中的端口限制。
***********
* 遗留问题*
***********
1. 其他的登陆协议的登陆方法
2. 访问权限控制,如何让 owner 拥有其所在 Repository 的 fileattr.xml 修改权限?
这样,Repository 的创建者就拥有其维护权限了,减轻了 CVSNT Server 管理员的权限。如果 Repository 有很多个的话,仅靠管理员来维护是不现实的。
control