UML软件工程组织

在 RedHat Linux 7 上安装 CVS 并将其配置为 SCM 资源库
Colin Yu
软件工程师
IBM 多伦多实验室
2002 年 5 月

引言

本文,即关于在 IBM® WebSphere® Studio Application Developer 中进行小组开发的系列文章的第三篇,重点讲解如何在 RedHat Linux 7 上安装 CVS 并将其配置为 SCM 资源库。WebSphere Studio Application Developer(以下称为 Application Developer)可以与 CVS 这种主流的开放源代码的、网络透明的版本控制系统一起无缝地共同工作。CVS 在大多数平台上都可以运行,包括 Windows®、Linux、AIX® 和 UNIX®。将它与 Application Developer 一起安装在 RedHat Linux 上有下列几点好处:

  • Linux 现在是占垄断地位的开放源代码操作系统。
  • RedHat 是 Linux 的主要分发商之一。
  • CVS 包含在 RedHat Linux 7 分发版中。
  • CVS for Linux 非常稳定、可靠并且可伸缩,对于个人开发者、小规模的小组以及大规模、分布式小组都很有用。
  • Application Developer 运行在 RedHat Linux 7 上。
  • 在使用 Application Developer 时,您可以使用 CVS 作为本地资源库或者作为整个小组的共享资源库。

    然而,安装和配置 CVS for Linux 并非无足轻重,并且相关的好文档极少。下面的一步一步的指导应该能够帮助系统管理员为使用 Application Developer 的开发者配置 CVS for Linux。

在 RedHat Linux 7 上安装 CVS

CVS 版本 1.11.1.3 可能已经缺省安装在您的 RedHat Linux 7 上了。要检查是否已安装了 CVS,请输入命令 rpm -qa|grep 'cvs'。如果返回的是 cvs-1.11.1-3,就意味着已经安装了 CVS。

如果这条命令没返回任何内容,您就需要安装 CVS。CVS rpm 通常位于 RedHat Linux 7 分发版的安装 CD #2 上的 RedHat/RPMS 目录中。将该 CD 安装到 /mnt/cdrom 后,使用 rpm 命令安装 CVS:rpm -i /mnt/cdrom/RedHat/RPMS/cvs-1.11.1p1-3.i386rpm

建立 CVS 用户帐户和组

  1. 以 root 用户的身份登录。
  2. 创建一个名为 cvs 的用户,让这个用户使用 cvs 作为他的主组。
  3. 创建将在 Application Developer 中使用 cvs 的用户。本文使用 cvsdev1cvsdev2
  4. 使用 cvs 的开发者可以使用他们的私有组作为他们的主组。例如,cvsdev1 的主组是 cvsdev1,但要确保他们还属于 cvs 组。

建立文件夹和资源库

  1. 以用户 cvs 的身份登录。
  2. 在 cvs 自己的主目录(即 /home/cvs/)下创建一个名为 repository 的目录。
  3. 设置目录 /home/cvs/repository 的访问级别和访问模式:chmod 770 /home/cvs/repository
  4. 设置目录 /home/cvs/repository 的 setgid 位:chmod g+s /home/cvs/repository

    说明:在一个目录中创建文件时,该文件缺省情况下属于其所有者的主组。设置了目录的 setgid 位后,新文件将与该目录属于相同的组,而不属于其所有者的主组。例如,如果用户 cvsdev1 在目录 /home/cvs/repository 中创建了一些文件,则这些文件将属于 cvs 组而不是它的主组 cvsdev1

    这一步至关重要,因为它使 CVS 用户能够检出其他用户创建的文件。如果这一步没完成,那么当您检出另一个用户创建的文件时,操作将失败,并发出下面这条消息:

    Failed to create lock directory for /home/cvs/repository/...: Permission denied.
    Failed to obtain dir lock in repository /home/cvs/repository/...

  5. 初始化资源库:
    cvs -d /home/cvs/repository init
  6. 注销用户 cvs

修改 xinetd 服务以启用 pserver 协议

  1. 以 root 用户的身份登录。
  2. 在目录 /etc/xinetd.d 中创建一个名为 cvspserver 的文件,文件内容如下:
    # default: off
    # description: An cvs server. 
    service cvspserver
    {
       disable = no
       socket_type = stream
       protocol = tcp
       user = root
       wait = no
       server = /usr/bin/cvs
       server_args = -f --allow-root=/home/cvs/repository pserver
       log_on_success +=USERID
       log_on_failure += USERID
    }
  3. 打开 /etc/services 并核实存在下面这两行代码。如果不存在,则添加它们:
    cvspserver 2401/tcp     # CVS client/server operations
    cvspserver 2401/udp     # CVS client/server operations
  4. 重新启动 xinetd 服务:
    service xinetd restart

建立用户环境

  1. 打开文件 /etc/profile。您应该能在该文件中看到下面这些行:
    USER='id -un'
    LOGNAME=$USER
    MAIL="/var/spool/mail/$USER"
  2. 在环境变量 MAIL 后添加一行内容:
    CVSROOT=":pserver:$USER@localhost:/home/cvs/repository"
  3. 在该文件中,您还应该看到这样一行:
    export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
  4. 修改这一行并将 CVSROOT 添加到导出(export)列表中,如下所示:
    export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC CVSROOT

用本地用户测试安装

  1. Developer 1 以 cvsdev1 的身份登录。
  2. 通过输入下面的命令来确保环境变量是正确的:
    echo $CVSROOT

    它应该返回与用户名有关的象下面这样的结果:

    :pserver:cvsdev1@localhost:/home/cvs/repository
  3. 用下面的命令登录 CVS:
    cvs login

    您将被提示提供密码。输入您的 Linux 密码。

  4. 创建一个名为 project1 的目录:
     mkdir project1
  5. 在目录 project1 中创建一个名为 Test.java 的文件,文件内容如下:
    public class Test{
       public String sayHello(String name){
          return "Hello"+name;
       }
    }
  6. 使用这些命令将 Test.java 导入到 CVS 资源库中的模块 project1
    cd /home/cvsdev1/project1
    cvs  import -m "import Test.java" project1 wsadgroup release1_0

    CVS 导入操作完成后,您应该会看到一条这样的消息:

    N  project1/Test.java
    No conflicts created by this import
  7. 备份您的源代码:
    cd
    mv project1 project1.sav
  8. 从 CVS 资源库检出 project1
    cd
    cvs checkout project1

    您应该会看到在 /home/cvsdev1 下创建了一个名为 project1 的新目录,该目录下有一个文件 Test.java 和一个目录 CVS

  9. Developer 2 以 cvsdev2 的身份登录。
  10. cvsdev2 登录 CVS:
    cvs login
  11. cvsdev2 从 CVS 检出 project1
    cvs checkout project1

    您应该会看到这样一条来自 CVS 的消息:

    cvs server:Updating project1
    U project1/Test.java
  12. Test.java(位于目录 project1 中)添加一个新方法:
    public String sayBye(String name){
       return "Bye, " + name;
    }
  13. Test.java 检入到资源库中:
    cvs commit -m "checkin Test.java" Test.java

    您应该会看到这样一条来自 CVS 的消息:

    Checking in Test.java;
    /home/cvs/repository/project1/Test.java, v <-- Test.java
    new revision: 1.2; previous revision: 1.1
    done

    用户 cvsdev1 用下面这些命令捕获 cvsdev2 所做的更改:

    cd /home/cvsdev1/project1
    cvs update Test.java

    您应该会看到这样一条来自 CVS 的消息:

    U Test.java

    您可以用编辑器打开 Test.java 来查看 cvsdev2 所做的更新。

用 Application Developer 测试安装

  1. 打开 Team Perspective,选择 Repositories 视图并在工作台(Workbench)中选择 File => New => Other。在 CVS 类别中选择 Repository Location 并单击 Next。完成资源库位置向导。下面简要描述了向导的这个面板上的 CVS 术语:

    Connection type
    您想用来连接到 CVS 服务器的协议。缺省值是 pserver,它代表密码服务器协议。这是我们刚才在 RedHat Linux 7 中设置的连接类型。
    User name
    您用来登录到 CVS 服务器中的用户名。例如我们刚才在 RedHat Linux 7 中定义的 cvs 组中的 cvsdev1 或 cvsdev2。
    Host name
    您想连接到的服务器的机器名。它将是 RedHat Linux 机器的主机名或 IP 地址。
    Repository path
    服务器上的资源库位置的全限定路径。对于我们的安装和配置,它将是:/home/cvs/repository
    CVS location
    Application Developer 用来连接到资源库的完整位置。当您填好前面几个字段时,它将被动态构建。
    Validate on finish
    它在返回到 IDE 前测试资源库连接。请一直启用它作为第一次连接性测试。

    图 1.

  2. 单击 Finish。如果 Application Developer 能够连接到 CVS 服务器,您将被提示提供该用户标识的密码。请参见下图 2。

    图 2.

    一旦用户标识和密码通过验证,您就会返回到 Repositories 视图,并且该视图上多了一个 Application Developer 连接到的新资源库条目。

  3. 展开 Streams => HEAD => project1,您就可以看到版本为分发版 1.2 的 Test.java,这与我们在“用本地用户测试安装”这一节的第 13 步中看到的一致。

    图 3.

  4. 右键单击 Test.java 并选择 Show in Resource History。在 Resource History 视图中,您可以看到 cvsdev1 何时对 Test.java 进行了第一次修订,在代码发生更改后,cvsdev2 何时把 Test.java 检入到了资源库中。

    图 4.

    图 5.

    5. 最后,右键单击 project1 并选择 Add to Workspace。您们就可以开始对 Application Developer 中的 project1 进行操作了!

    图 6.

结束语

本文已经描述了如何在 RedHat Linux 中配置 CVS。我希望这篇文章会对您有所帮助,并欢迎所有的反馈。

致谢

作者在此要感谢 IBM 多伦多实验室的两位软件开发分析师 David Van 和 Joseph Chiu,感谢他们审阅了这篇文章。

参考资料

关于 WebSphere Studio Application Developer 的更多信息:

参考资料


关于作者

照片:Colin Yu Colin Yu 目前在 IBM VisualAge for Java 技术支持小组工作。他从位于安大略湖(Ontario)的沃特卢(Waterloo)大学获得了应用科学硕士学位,并且是一名通过 Sun Java 2 认证的程序员。他还是 IBM 认证的 WebSphere Application Server 专家、VisualAge for Java 专家以及 IBM 认证的 WebSphere Studio 解决方案专家。您可以通过 coliny@ca.ibm.com 与 Colin 联系。

 

 


版权所有:UML软件工程组织