关于CVS在Window2000下的权限管理

一.   CVS版本问题

CVS分开客户端和服务器端两个程序,服务器端在Windows平台下用CVSNT,目前这个软件基本稳定,但速度和在Linux/Unix下相比,稍微慢些。但对于熟悉Windows应用程序的人来说,由于其操作简单,不失为一个好的选择。

 

注意:客户端和服务器端两方面的版本统一十分重要。本文挡建议使用:

服务器:CVSNT2.0.34  www.cvsnt.org下载文件cvsnt-2.0.34.exe

客户端:WinCvs13b17.zip sourceforge.net/projects/cvsgui/ 下载WinCvs13b17.zip

检查的方法可以在成功连接后,运行:

cvs version

***** CVS exited normally with code 0 *****

Client: Concurrent Versions System (CVSNT) 2.0.34 (client/server)

Server: Concurrent Versions System (CVSNT) 2.0.34 (client/server)

可见这两个软件的版本十分搭配的。如果版本不一致的时候,会发生客户端的命令服务器解释不了的情况。

或者在服务器端,开始->设置->控制面版打开CVSNT的配置文件,也可以看到服务器端的版本(如下图):

在客户端,在DOS状态下,去到C:\Program Files\GNU\WinCvs 1.3\CVSNT(缺省安装的目录)下输入命令cvs version,可以看到客户端的版本信息(如下图):

另外,由于WinCVS1.3自带了一些方便管理的宏(当然,以后也可以参照这些宏自己开发一些),可以在C:\Program Files\GNU\Wincvs 1.3\Macros看到一堆*.py*.tcl的文件,这些实际上是PythonTcl的脚本文件,建议也安装上PythonTclWindows版本,以运行这些脚本或者以后自己扩展参照这些宏写些适合自己的工具。

安装了这两个编译程序后,在WinCVS1.3可以方便切换这两种脚本语言(如下图):

二.   CVS的权限管理

CVS有自己的一套权限管理规则,但只能够去到目录的级别。通过CVS的管理员和目录的所有者可以设置相应目录下的权限。在每个CVS的目录下面(服务器端)可以找到一个.owner.perms的文件,这两个文件分别记录了目录所有者和相应设置的权限。

值得注意的是,CVS的权限管理是十分简单意义上的管理,只能够去到目录的一级,每个目录下面对应有相应的.owner.perms文件来具体管理当前目录的权限,如果没有这些文件,权限由上一级的目录继承下来。但它设置的权限只限于CVS内部,最终还是要受系统权限来控制的。例如即使对某个目录明明.owner里面已经记录了某个用户了,但在服务器系统端中限定了这个用户对这个目录的读权限,这个用户仍然不可以checkout到这个目录的。

因此,CVS的权限管理比系统的权限管理弱,可以看作是系统权限管理下的一个适当简单的补充。当不想建立太多的系统用户,而想用适当少的系统用户来影射出比较多的CVS用户的时候,CVS的权限管理才起到应有的作用。这时候需要管理员或者目录所有者对每个目录运行cvs chacl来定义用户的权限。

 

三.   CVSWindow2000下版本控制

由于Window2000的权限管理功能已经十分丰富了,如果在不介意系统用户太多的情况下,建议在Windows平台下(指服务器端)使用CVS还是用回系统用户来设置。

适当地建立组,可以利用Window2000丰富的权限管理,将不同的用户通过组的定义来实现权限的交叉管理。

具体的建议实施方案如下:

1.  在系统中建立一个cvsadmin的用户,属于Administrators组。

以后CVS系统的管理工作都通过这个用户来做。

2.  CVSNT中增加新的Repository,例如是C:\CVSFiles,然后自动会在C:\CVSFiles下面产生一个CVSROOT的目录。

3.  CVSFiles进行权限控制,设成只可以Administrators组进行完全控制,将原来的everyone缺省设置去掉(如下图):

这样做的好处是由于Window2000缺省权限管理是子目录权限继承于父目录的,如果不将everyone去掉,以后一般用户就比较容易任意添加不是和项目相关的文件进入这个目录了。

4.  在系统中建立一个组和这个项目相关的,例如是Team1

5.  建立相关的用户,设置成一般用户(users),并归到Team1组。例如user1user2

6.  此时看CVSROOT的权限可以看到,由于从父目录继承,它只可以由Administrators组的成员来完全控制。

注意:要将CVSROOT设成对一般用户(这里是将Team1组加入读权限)只读,否则一般CVS用户不可以checkout东西。将CVSROOT下的history文件设成Team1完全控制。

7.  此时user1,user2均可以登录,但是不可以checkoutCVSROOT的内容。

cvs -z9 checkout CVSROOT

***** CVS exited normally with code 1 *****

cvs [server aborted]: Cannot access C:/CVSFiles/CVSROOT: Permission denied

增加内容也不可以:

cvs import -m "test1" Test VENDOR START

***** CVS exited normally with code 1 *****

 

cvs [server aborted]: Cannot access C:/CVSFiles/CVSROOT: Permission denied

因此导入模块的工作还是通过cvsadmin统一来做的。

例如导入了模块test1

8.  对上面新导入的模块test1user1user2还是不可以checkout的,需要利用Window权限管理增加权限给他们。例如他们只可以读出这个模块(如下图):

此时user1user2都可以checkout这个目录,但都不可以修改这个目录。

9.如果针对下面的test2dir附了写的权限给user1(如下图),则user1就可以修改这个子目录了。

10.下面这个树状图是这个演示的权限结构图。

\---test1    team1只读)

    |   test1.txt

    |   test2.txt

    |

    +---TestDir user2可以修改)

    |       Test11.txt

    |

    \---test2dir user1可以修改)

test2dir1.txt

posted on 2004-09-03 13:54  风前絮~~  阅读(10422)  评论(9编辑  收藏  举报

导航