随笔-60  评论-262  文章-1  trackbacks-0

    CVS 是目前常用的版本控制和软件配置系统. 其开源性在其普及的过程中功不可没, 然而正因为开源造成了其易用性较差. 往往一个功能需要通过几个看似不相干的操作配合才能进行. Windows 下 CVS 的多帐户配置正是这样一个相当重要的, 但很不好操作的功能. 几个难点如下:

    CVS 源自 Unix 系统, 其 Windows 的移植版并没有服务器功能. 在 Windows 下一般采用安装 CVSNT 这个软件来建立 CVS Repository, 但 CVSNT 的操作方法和原始的 CVS 略微不同.

    CVS 本身是命令行形式, 其配置过程比较繁杂.

    CVS 的多帐户配置需要手动修改 Repository 的 CVSROOT 文件夹里的文件, 缺乏统一的界面.

    在安装了 CVSNT 服务器之后, 默认的用户就是建立 Repository 的 Windows 系统的登陆帐户, 但在多人开发的时候, 肯定没人希望大家都使用同一个名字来 Commit; 更重要的是, 我们可能需要配置开发人员的权限, 例如限制某些人只能看程序, 而某些人可以Commit程序, 某些人可以添加新的 Module.

    以下是详细的步骤, 环境是 CVSNT 2.5.04 (Build 3236) + TortoiseCVS 1.8.25


===============================================================================

    在继续往下进行之前, 有两件事非常重要.

1.  将用户帐户切换到 administrator 帐户, 一定!
    如果, 用户的系统是 XP 及以后系统, 且 administrator 帐户不可见.
    则修改注册表键, 方法为 ( 单击 "开始->运行", 输入 regedit 后回车, 打开注册表编辑器,
    依次展开 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList" 分支,
    将右边的 Administrator 的值 (如果没有就创建一个, 为 DWORD 类型) 改为 1,
    即可让 Administrator 账户出现在登录的欢迎屏幕上.

2.  将 C:\Program Files\CVSNT\cvslock.exe 以及 C:\Program Files\CVSNT\cvsservice.exe 进程添加进 windows 防火墙的例外列表.
    方法为, "开始" -> "控制面板" -> "windows 防火墙" -> "例外" 选项卡 -> "添加程序"

===============================================================================


现在, 我们继续进行.

    1. 初始使用 Windows 的管理员 administrator 账号和密码登录 Windows 桌面. 这时如果 administrator 账号没有密码, 要用 "控制面板" 的 "用户帐户" 程序为 administrator 设置一个密码.
       运行 "CVSNT Control Panel" 程序, 在主界面上, 切换到 "Repository configuration" 选项卡, 点击 "Add" 按钮, 在弹出的 "Repository Settings" 对话框内, 在 Location 编辑框内输入将要创建的 Repository 的路径, 即实际文件夹路径; 修改 Name 编辑框内的名字, 如 /myproj , 这是显示名称; 如 [-- 图 01 --], 点击 OK 完成创建 Repository 步骤.


    2. 为了进行多用户配置, 必须修改 Repository 的 CVSROOT 目录的几个文件.
       首先在客户端将 :pserver:administrator@1.2.3.4/myproj 设为 CVSROOT 环境变量 (请注意区分 CVSROOT 目录和 CVSROOT 环境变量). 在命令行 CMD 环境下输入

set cvsroot=:pserver:administrator@127.0.0.1/myproj
       后回车. 然后用 administrator 登录到 CVS, 就是输入
cvs login
       后回车, 然后在 CVS Password: 处输入密码(也就是 windows 的 Administrator 账号的登录密码). 

       然后创建一个检出 repository 内容的本地文件夹, 如 C:\xxxOut; 命令行如下:

cd c:
cd \
md xxxOut
cd xxxOut
       最后 Check Out 出此 CVSROOT 目录. 命令如下所示:
cvs co CVSROOT
 

    3.  再次打开 "CVSNT Control Panel" 程序, 在主界面上切换到 "Server Settings" 页面, 为 "Run as" 选择 "administrator" 帐户, 如图 [-- 图 02 --], 然后点击确定退出.


    4.  为这个 repository 添加账号. 比如 zhang.san, 使用下列命令 

cvs passwd -a zhang.san
// 输入 zhang.san 的密码
// 再次输入 zhang.san 的密码
        通过这种方法, 可以添加其他账号.

    5.  修改读写权限.
        CVS 有两种读写权限的设置方法, 一是粗粒度的, 一是细粒度的. 只有 CVS 管理员才能进行访问权限的修改.
       
        粗粒度的方法是在 CVSROOT 中添加 readers 或者 writers 文件来实现.
用资源管理器打开 c:\xxxOut\CVSROOT 文件夹.在这个文件夹内新建两个文件 readers 和 writers 两个文件, 注意不能有扩展名. 用记事本打开它们编辑.
        在 readers 里添加的任何一个帐户对当前库只拥有读取权限, 添加格式是每行一个帐户名. 例如, 我们在客户端的 CVSROOT 目录里添加 readers 文件, 将之前的一个新建帐户 anonymous 放到里面, 然后 commit 这个 readers 文件到服务器. anonymous 就不能进行 commit 了. 实际的测试结果是在使用 anonymous 登录之后执行 commit 指令, 系统会报告正常执行完毕. 但实际上, 没有任何东西被 commit, 暴露了 CVS 在人机界面上的不完善.
        writers 文件的操作 readers 完全一样. 如果一个帐户名被同时写到两个文件里, 此帐户只有只读权限.
        然后将这两个文件提交到服务器.
cd c:\xxxOut\CVSROOT
cvs add -m 
"" readers
cvs add -m 
"" writers
cvs commit -m 
""
       
        细粒度的方法是使用 chacl 命令. 例如 /myproj 里有 3 个工程, project1, project2, project3. 使用命令:
cvs chacl -u user1 -a none -d project1,project2,project3
cvs chacl -u user1 -a all -d project1
cvs chacl -u user1 -a read
,write -d project2
cvs chacl -u user1 -a read -d project3 

        可以让 user1 拥有对 project1 目录的完全控制权, 对 project2 目录的读写权, 和对 project3 目录的只读权.

        第一条命令首先删除 user1 的所有权限, 在随后的 3 条命令里分别设置了 3 个不同目录权限.


    6.  使用帐户组来组织帐户.
   
        在客户端的 CVSROOT 目录下添加一个叫 group 的文件. 此文件的格式是:

        组名1:用户名1,用户名2,用户名3,……
        组名2:用户名5,用户名7,……
        ……

        修改完 group 文件后 commit 它, 然后通过 chacl 命令可以实现组权限的修改.

另一种方法(不使用 administrator 账号):
   3.  在服务器端为 Windows 添加一个专门用于 CVS 操作的 Windows 帐户.

        所有的 CVS 帐户都要映射到这个 Windows 帐户上进行实际的操作.
        虽然很多资料并没有提到需要建立 Windows 帐户
, 但我在实验中发现没有这种帐户,
        CVS 在后边执行任何操作时都会报告没有此帐户的错误.
        假如这个新的帐户叫做 cvsuser. 使用 Windows 命令

        net user cvsuser cvsuserpassword /Add

        可以添加此帐户. 在添加完成之后
, 一定要记得将 /myproj 在服务器上的
        实际文件夹的权限里添加 cvsuser 的读写权限
, 否则到最后任何映射到
        cvsuser 的 CVS 帐户都会因为没有写权限无法进行正常的 commit 操作.
        首先在服务器上的资源管理器里的 
"工具" 菜单里找到 "文件夹选项" ,
        在随后出现的 
"查看" 选项卡里找到 "使用简单文件夹共享" 的项目,
        取消掉前面的勾
, 单击确定.
        然后右击 /myproj 所在文件夹
, 单击 "属性". 在随后打开的对话框里可以看到 "安全" 选项卡.
        我们需要在这里添加 cvsuser 的读写权限.

    
4.  为 CVS 添加自己的帐户. 通过使用命令 cvs passwd 我们可以添加任意多个 CVS 帐户
        (当然
, 只是针对当前的 Repository). 所有的帐户信息会被保存在 CVSROOT 目录的 passwd 文件当中.
        然而这个文件是不能 Check Out 出来的
, 只能在服务器那里看到它, 并且其保存的密码信息是被加过密的.
        我们可以添加 cvsadmin
, user1, user2, anonymous 等用户. 例如添加 cvsadmin 时的命令是:

        cvs passwd -a -r cvsuser cvsadmin

        // 输入 cvsadmin 的密码
        // 再次输入 cvsadmin 的密码

        这样就新添了 cvsadmin 帐户
, 并将其映射到 Windows 帐户 cvsuser 上 (-a 表示添加一个账户,
        -r 表示影射到操作系统的帐户中. 我期望将 cvsadmin 作为以后 /myproj 的管理员.
        这一点十分重要
, 如果这时候不设置的话, 再将 CVS 改为 "仅使用 CVS 帐户校验模式"
        之后就再也没有机会添加管理员了 (因为只有管理员可以看得到和操作 CVSROOT 目录).

    
5.  设定 cvsadmin 为 CVS 管理员.
        在客户端的 CVSROOT 目录下新添一个名为 admin 的文件.
        在里面将每一个想要升为管理员的 CVS 帐户的帐户名写到文件中
, 每行一个帐户名.
        当然 admin 文件只有放到服务器
, cvsadmin 的升迁才能生效.
        但是
, 仅仅是这么将 admin 文件提交上去是不能起作用的.
        在提交它之前
, 必须将 admin 的信息添加到 checkoutlist 文件中.
        checkoutlist 的格式在文件中有介绍
, 是 "空格 文件名 空格 出错信息 回车符".
        我们在里面添加一条记录:

         admin adminerror feedom.net

        特别注意 admin 前面一定要留一个空格.

    
6.  当新的 CVS 管理员和帐户信息都准备好后, 就要将 /myproj 的帐户校验模式
        从 
"操作系统集成校验模式" 修改为 "仅使用 CVS 帐户校验" 模式.
        这么做可以避免为了在 CVS 中使用多用户时需要操作 Windows 帐户的麻烦.
        这个设置的地方在 CVSROOT 目录中的 config 文件.
        打开客户端的 config 文件
, 将里面的 #SystemAuth=yes 改为 SystemAuth=no
        (注意将 # 删除后
, SystemAuth前不能有空格). 修改后保存 config 文件.

    
7. 提交 CVSROOT 里的所有更新到服务器, 我们的设置就生效了. 命令如下所示:

        cd CVSROOT
        cvs add -m 
"" admin
        cvs commit -m 
""

        不过在提交之前
, 你也许想先把 CVSROOT 的 owner 从原来的 administrator 修改为 cvsadmin.
        使用命令 cvs chown 可以做到这一点. 在提交了 CVSROOT 目录后
, 校验模式就立刻改变了, cvsadmin 也同时开始生效.
        这时
, 用之前的 administrator 就无法使用 CVS 了. 我们改用 cvsadmin 帐户重新登陆, 继续下面的操作.


    
8.  修改读写权限. (同前, 从略)

    
9.  使用帐户组来组织帐户.(同前, 从略)

posted on 2009-03-26 19:22 free2000fly 阅读(2984) 评论(2)  编辑 收藏 引用

评论:
# re: Windows 下 cvs 服务器端配置 2009-03-27 16:51 | 路人甲
man, cvs is too old, even svn is kinda old. it's time to try git!  回复  更多评论
  
# re: Windows 下 cvs 服务器端配置 2009-03-27 16:59 | free2000fly
@路人甲
我知道很老, 但迁移到新系统成本很高, 甚至不可迁移. 就这样烂下去吧.
  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理