加载中...

CVS


服务器设置

CVS 环境初始化

决定主 repository 将要创建和重置的 cvs 根目录。比如 /usr/local/cvs (根):

  1. # mkdir -p /usr/local/cvs
  2. # setenv CVSROOT /usr/local/cvs      # 设置 CVSROOT 环境变量(本地)
  3. # cvs init                           # 创建所有初始化 CVS 配置文件
  4. # cd /root
  5. # cvs checkout CVSROOT               # 签出配置文件来修改他们
  6. # cd CVSROOT
  7. edit config ( fine as it is)
  8. # cvs commit config
  9. cat >> writers                       # 创建 writers 文件 (也可为 readers)colin
  10. ^D                                   # 使用 [Control][D] 退出编辑
  11. # cvs add writers                    # 添加文件 writers 进 repository
  12. # cvs edit checkoutlist
  13. # cat >> checkoutlist
  14. writers
  15. ^D                                   # 使用 [Control][D] 退出编辑
  16. # cvs commit                         # 提交所有配置更改

添加一个 readers 文件,如果你要区分读写权限的话。注意: 不要在主 cvs 中直接编辑文件,而应该签出要编辑的文件,修改完成后再签入。我们所做的文件 writers 用来定义可写权限。
下面有三种流行的方式去访问 CVS。前两个不需要任何进一步的配置。看 CVSROOT 部分的实例了解如何使用它们:

  • 直接本的访问文件系统。用户需要有足够的权限来直接访问 CVS,除了要登录到操作系统,没有进一步的验证。然而这仅对本地 repository 才有用。

  • 使用 ext 协议通过 ssh 来远程访问。任何有 ssh shell 账户和在 CVS 服务器上可读写权限的都可直接使用 ext 协议通过 ssh 来访问 CVS,而不需要任何额外的隧道。没有服务器来处理运行在 CVS 上的验证工作。ssh 登录会去验证。

  • 用 pserver 来远程访问。这是对于有较大用户量的首选方法,用户由 CVS 的 pserver 通过一个专门的密码数据库来验证,因此不需要本地用户帐户。这种设置在下面会有说明。

用 inetd 设置网络

如果不需要网络访问,CVS 可以运行于本地。对于远程访问,在 /etc/inetd.conf (Suse 为 /etc/xinetd.d/cvs)中配置如下行,可让守护进程 inetd 启动 pserver:

  1. cvspserver stream  tcp  nowait  cvs  /usr/bin/cvs cvs \
  2. --allow-root=/usr/local/cvs pserver

这是个用来阻断从 internet 访问 cvs 端口的好方法,可使用 ssh 隧道来远程的访问 repository。

单独认证

CVS 用户可能不是操作系统的一部分(即不是本地用户)。这其实可从安全的角度去看。简单的添加一个叫 passwd (in the CVSROOT directory) 的文件,其包含 crypt 格式的用户登录名和密码。这也可以使用 apache 的 htpasswd 工具来完成。
_注意:_这个 passwd 文件仅仅是文件,可以在 CVSROOT 中直接编辑。它不能被签出。更多信息请用 htpasswd --help

  1. # htpasswd -cb passwd user1 password1  # -c 创建文件
  2. # htpasswd -b passwd user2 password2

现在添加 :cvs 到每行的结尾处,用来告诉 cvs 服务器更改用户到 cvs (或任何你正在运行的 cvs 服务器下)。它看起来像这样:

  1. # cat passwd
  2. user1:xsFjhU22u8Fuo:cvs
  3. user2:vnefJOsnnvToM:cvs

测试它

测试作为一般用户登录(比如我)

  1. # cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs login
  2. Logging in to :pserver:colin@192.168.50.254:2401/usr/local/cvs
  3. CVS password:

CVSROOT 变量

这是个环境变量用来指定 repository 的位置。对于本地使用,该变量只需设置成 repository 的目录。对于通过网络使用,传输协议必须指定。使用 setenv CVSROOT string (csh, tcsh shell) 或者 export CVSROOT=string ( sh, bash shell) 设置 CVSROOT 环境变量。

  1. # setenv CVSROOT :pserver:<username>@<host>:/cvsdirectory
  2. For example:
  3. # setenv CVSROOT /usr/local/cvs                               # 仅限本的使用
  4. # setenv CVSROOT :local:/usr/local/cvs                        # 同上
  5. # setenv CVSROOT :ext:user@cvsserver:/usr/local/cvs           # 通过 SSH 直接访问
  6. # setenv CVS_RSH ssh                                          # ext 协议访问
  7. # setenv CVSROOT :pserver:user@cvsserver.254:/usr/local/cvs   # 通过 pserver 网络访问

一旦登录成功就可导入一个新项目进 repository:cd 进入你的项目根目录

  1. cvs import <module name> <vendor tag> <initial tag>
  2. cvs -:pserver:colin@192.168.50.254:/usr/local/cvs import MyProject MyCompany START

在 repository 中有个名叫 MyProject 新项目(之后用来签出)。CVS 会导入当前目录的内容进新项目。

签出:

  1. # cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs checkout MyProject
  2. 或者
  3. # setenv CVSROOT :pserver:colin@192.168.50.254:/usr/local/cvs
  4. # cvs checkout MyProject

通过 SSH 隧道访问 CVS

我们需要两个 shell 来做这个。在第一个 shell 中,我们连接到 cvs 服务器并对 cvs 连接进行端口转发(port-forward)。在第二个 shell 中,我们就像在本地一样使用 cvs。 
在 shell 1:

  1. # ssh -L2401:localhost:2401 colin@cvs_server   # 直接连接到 cvs 服务器。或:
  2. # ssh -L2401:cvs_server:2401 colin@gateway     # 使用一个网关间接连接到 cvs 服务器

在 shell 2:

  1. # setenv CVSROOT :pserver:colin@localhost:/usr/local/cvs
  2. # cvs login
  3. Logging in to :pserver:colin@localhost:2401/usr/local/cvs
  4. CVS password:
  5. # cvs checkout MyProject/src

CVS 命令及其使用

导入

该 import 命令用来添加整个目录,它必须运行于要导入的目录中。比如,目录 /devel/ 包含的所有文件和子目录要导入。该目录名在 CVS 中(模块)将会称为 "myapp"。

  1. # cvs import [options] directory-name vendor-tag release-tag
  2. # cd /devel                          # 必须在该目录中来导入
  3. # cvs import myapp Company R1_0      # 修订(release)标签可以为任何单个单词

在添加了一个新目录 "/devel/tools/" 后,也可这么导入。

  1. # cd /devel/tools
  2. # cvs import myapp/tools Company R1_0

签出、更新和提交

  1. # cvs co myapp/tools                 # 仅会签出 tools 目录
  2. # cvs co -r R1_1 myapp               # 签出修订版本为 R1_1 的 myapp (sticky)
  3. # cvs -q -d update -P                # 典型的 CVS 更新
  4. # cvs update -A                      # 重置所有 sticky 标签(或日期、选项)
  5. # cvs add newfile                    # 添加一个新文件
  6. # cvs add -kb newfile                # 添加一个二进制文件
  7. # cvs commit file1 file2             # 仅提交这两个文件
  8. # cvs commit -m "message"            # 提交所有更改并为这个更改添加日志消息

创建一个 patch

It is best to create and apply a patch from the working development directory related to the project, or from within the source directory.

  1. # cd /devel/project
  2. # diff -Naur olddir newdir > patchfile # Create a patch from a directory or a file
  3. # diff -Naur oldfile newfile > patchfile

应用一个 patch

Sometimes it is necessary to strip a directory level from the patch, depending how it was created. In case of difficulties, simply look at the first lines of the patch and try -p0, -p1 or -p2.

  1. # cd /devel/project
  2. # patch --dry-run -p0 < patchfile    # Test the path without applying it
  3. # patch -p0 < patchfile
  4. # patch -p1 < patchfile              # strip off the 1st level from the path

还没有评论.