CVS

最后更新于:2022-04-01 22:43:38

## 服务器设置 ### CVS 环境初始化 决定主 repository 将要创建和重置的 cvs 根目录。比如 /usr/local/cvs (根): # mkdir -p /usr/local/cvs # setenv CVSROOT /usr/local/cvs      # 设置 CVSROOT 环境变量(本地) # cvs init                           # 创建所有初始化 CVS 配置文件 # cd /root # cvs checkout CVSROOT               # 签出配置文件来修改他们 # cd CVSROOT edit config ( fine as it is) # cvs commit config cat >> writers                       # 创建 writers 文件 (也可为 readers)colin ^D                                   # 使用 [Control][D] 退出编辑 # cvs add writers                    # 添加文件 writers 进 repository # cvs edit checkoutlist # cat >> checkoutlist writers ^D                                   # 使用 [Control][D] 退出编辑 # cvs commit                         # 提交所有配置更改 添加一个 **readers** 文件,如果你要区分读写权限的话。_注意:_ 不要在主 cvs 中直接编辑文件,而应该签出要编辑的文件,修改完成后再签入。我们所做的文件 **writers** 用来定义可写权限。 下面有三种流行的方式去访问 CVS。前两个不需要任何进一步的配置。看 [CVSROOT](http://cb.vu/unixtoolbox_zh_CN.xhtml#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: cvspserver stream  tcp  nowait  cvs  /usr/bin/cvs cvs \ --allow-root=/usr/local/cvs pserver 这是个用来阻断从 internet 访问 cvs 端口的好方法,可使用 ssh 隧道来远程的访问 repository。 ## 单独认证 CVS 用户可能不是操作系统的一部分(即不是本地用户)。这其实可从安全的角度去看。简单的添加一个叫 **passwd** (in the CVSROOT directory) 的文件,其包含 crypt 格式的用户登录名和密码。这也可以使用 apache 的 htpasswd 工具来完成。 _注意:_这个 passwd 文件仅仅是文件,可以在 CVSROOT 中直接编辑。它不能被签出。更多信息请用 htpasswd --help # htpasswd -cb passwd user1 password1  # -c 创建文件 # htpasswd -b passwd user2 password2 现在添加 `:cvs` 到每行的结尾处,用来告诉 cvs 服务器更改用户到 cvs (或任何你正在运行的 cvs 服务器下)。它看起来像这样: # cat passwd user1:xsFjhU22u8Fuo:cvs user2:vnefJOsnnvToM:cvs ### 测试它 测试作为一般用户登录(比如我) # cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs login Logging in to :pserver:colin@192.168.50.254:2401/usr/local/cvs CVS password: ### CVSROOT 变量 这是个环境变量用来指定 repository 的位置。对于本地使用,该变量只需设置成 repository 的目录。对于通过网络使用,传输协议必须指定。使用 `setenv CVSROOT string` (csh, tcsh shell) 或者 `export CVSROOT=string` ( sh, bash shell) 设置 CVSROOT 环境变量。 # setenv CVSROOT :pserver:@:/cvsdirectory For example: # setenv CVSROOT /usr/local/cvs                               # 仅限本的使用 # setenv CVSROOT :local:/usr/local/cvs                        # 同上 # setenv CVSROOT :ext:user@cvsserver:/usr/local/cvs           # 通过 SSH 直接访问 # setenv CVS_RSH ssh                                          # ext 协议访问 # setenv CVSROOT :pserver:user@cvsserver.254:/usr/local/cvs   # 通过 pserver 网络访问 一旦登录成功就可导入一个新项目进 repository:**cd 进入**你的项目根目录 cvs import    cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs import MyProject MyCompany START 在 repository 中有个名叫 MyProject 新项目(之后用来签出)。CVS 会导入当前目录的内容进新项目。 签出: # cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs checkout MyProject 或者 # setenv CVSROOT :pserver:colin@192.168.50.254:/usr/local/cvs # cvs checkout MyProject ### 通过 SSH 隧道访问 CVS 我们需要两个 shell 来做这个。在第一个 shell 中,我们连接到 cvs 服务器并对 cvs 连接进行端口转发(port-forward)。在第二个 shell 中,我们就像在本地一样使用 cvs。  在 shell 1: # ssh -L2401:localhost:2401 colin@cvs_server   # 直接连接到 cvs 服务器。或: # ssh -L2401:cvs_server:2401 colin@gateway     # 使用一个网关间接连接到 cvs 服务器 在 shell 2: # setenv CVSROOT :pserver:colin@localhost:/usr/local/cvs # cvs login Logging in to :pserver:colin@localhost:2401/usr/local/cvs CVS password: # cvs checkout MyProject/src ## CVS 命令及其使用 ### 导入 该 import 命令用来添加整个目录,它必须运行于要导入的目录中。比如,目录 /devel/ 包含的所有文件和子目录要导入。该目录名在 CVS 中(模块)将会称为 "myapp"。 # cvs import [options] directory-name vendor-tag release-tag # cd /devel                          # 必须在该目录中来导入 # cvs import myapp Company R1_0      # 修订(release)标签可以为任何单个单词 在添加了一个新目录 "/devel/tools/" 后,也可这么导入。 # cd /devel/tools # cvs import myapp/tools Company R1_0 ### 签出、更新和提交 # cvs co myapp/tools                 # 仅会签出 tools 目录 # cvs co -r R1_1 myapp               # 签出修订版本为 R1_1 的 myapp (sticky) # cvs -q -d update -P                # 典型的 CVS 更新 # cvs update -A                      # 重置所有 sticky 标签(或日期、选项) # cvs add newfile                    # 添加一个新文件 # cvs add -kb newfile                # 添加一个二进制文件 # cvs commit file1 file2             # 仅提交这两个文件 # 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. # cd /devel/project # diff -Naur olddir newdir > patchfile # Create a patch from a directory or a file # 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. # cd /devel/project # patch --dry-run -p0 < patchfile    # Test the path without applying it # patch -p0 < patchfile # patch -p1 < patchfile              # strip off the 1st level from the path
';