CVSNT SERVER Configuration

2023-05-16

# 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 操作。(为什么必须是管理员?)
/*
实际上, 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 是 commit 命令的简写,具体简写的命令,见帮助;
该命令会把  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
/*
说明:
该命令会直接在 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CVSNT SERVER Configuration 的相关文章

随机推荐

  • uORB发布订阅实例

    PX4SITL仿真 uORB实例 飞控串口读取外部传感器数据 xff1a 飞控开启一个进程读取外部传感器数据 xff0c 发布一个uORB主题 xff1b 另一个进程订阅前一个进程发布的主题 xff0c 订阅到的主题通过mavlink消息发
  • PX4仿真环境搭建

    PX4 SITL Simulation 前提准备 xff1a Ubuntu16 04 LTS 安装ROS kinetic 题外话 xff1a 如果连的是有IPV6的校园网 xff0c 在update时可能会访问IPV6地址出错 xff0c
  • PX4-Gazebo仿真学习笔记

    PX4 Gazebo仿真 xff1a http bbs amovauto com forum php mod 61 viewthread amp tid 61 486 amp extra 61 page 3D1 Simulator仿真器 x
  • C语言strtok函数

    1 strtok 语法 include lt string h gt char strtok char str const char delimiters 参数 xff1a str xff0c 待分割的字符串 xff08 c string
  • 终于把大数据类产品全流程解释清楚了

    你点开这文章 xff0c 说明你清晰知道了数据才是一切的基础 人工智能 机器学习 大数据等应用的基础都是基于这样的一个流程 xff0c 只是说运用领域不同 xff0c 那么偏重点不同 本文从数据采集到数据报告 xff0c 详细说明了大数据运
  • 关于slam

    什么是SLAM 机器人在未知环境中 xff0c 要实现智能化需要完成三个任务 xff0c 第一个是定位 Localization xff0c 第二个是建图 Mapping xff0c 第三个则是随后的路径规划 Navigation 之前地平
  • Linux(Ubuntu系统)同网段SSH连接不上,网络能ping通

    问题描述 测试以下命令同样连接不上 span class token function ssh span localhost 问题原因 Ubuntu系统自带 openssh client xff0c 但是没有自带 openssh serve
  • 本地进程间通信(二)--套接字socket

    目录 一 什么是Socket xff1f 二 socket通信流程 Server端 一 创建socket 二 命名socket 三 绑定 四 监听 五 关闭 Client端 一 创建socket 二 connect 三 发送数据 四 关闭s
  • debain服务器搭建之虚拟机安装(一)

    debain服务器虚拟机搭建系列 xff08 一 xff09 xff08 一 xff09 下载debain系统 xff08 二 xff09 搜索下载安装 vmware xff08 三 xff09 开始安装debain系统 xff08 四 x
  • 企业私有云技术设计方案

    1 概述 1 1 文档内容 本文档为某企业私有云技术路线设计文档 1 2 背景描述 1 2 1 某企业私有云业务线规划 近些年由于国内IDC市场发展迅速 xff0c 某企业从战略层面考虑 xff0c 建造了自己的高等级数据中心 xff0c
  • Qt的主窗口背景设置

    主界面设置背景一般有设置背景图片和背景颜色的需求 xff0c 其实二者之间设置方法类似 目录 主界面设置背景一般有设置背景图片和背景颜色的需求 xff0c 其实二者之间设置方法类似 方法一 xff1a 最简单的方式是通过ui界面来设置 xf
  • 7.使用码云

    使用GitHub时 xff0c 国内的用户经常遇到的问题是访问速度太慢 xff0c 有时候还会出现无法连接的情况 xff08 原因你懂的 xff09 如果我们希望体验Git飞一般的速度 xff0c 可以使用国内的Git托管服务 码云 xff
  • git diff命令之后,如何退出

    git diff命令是对比两次文件修改了什么 但如何退出呢 xff1f 输入q 按enter键盘
  • Float类型出现舍入误差的原因

    首先是float累加产生误差的原因 xff0c 该部分转自 xff1a http blog csdn net zhrh0096 article details 38589067 1 浮点数IEEE 754表示方法 要搞清楚float累加为什
  • React之antd Form回显数据

    转自 xff1a https blog csdn net welkin qing article details 110004969 文章目录 一 antd4如何回显数据 1 定义变量2 保存接口数据到form变量中3 form显示数据4
  • equals()方法和hashCode()方法

    1 hashCode 简介 该方法主要是利用一定的规则生成对象的哈希码 xff0c 也称散列码 它是是由对象导出的一个整数值 xff0c 是没有规律的 关于hashCode 使用的哈希算法 xff0c 越糟糕的哈希算法越容易产生哈希碰撞 产
  • 手把手教你基于STM32的BootLoader的OTA远程升级

    本文系21ic论坛蓝V作者小叶三千原创撰写 上次发过SD卡的Bootloader离线升级后 xff0c 应大家的要求 xff0c 这次就讲一下STM32的OTA远程升级 OTA又叫空中下载技术 xff0c 是通过移动通信的空中接口实现对移动
  • 转知乎,感觉非常棒,适合普通人c++学习路线图

    作者 xff1a 刘凯新 链接 xff1a https www zhihu com question 23447320 answer 39322848 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权 xff0c 非商业
  • InfluxDB和IotDB介绍与性能对比

    InfluxDB简介 InfluxDB 是用Go语言编写的一个开源分布式时序 事件和指标数据库 xff0c 无需外部依赖 用于存储和分析时间序列数据的开源数据库 适合存储设备性能 日志 物联网传感器等带时间戳的数据 其设计目标是实现分布式和
  • CVSNT SERVER Configuration

    title CVSNT SERVER Configuration 64 author H819 64 version 0 5 Copyright free reference note author name and the article