Concurrent Versions System

出自 ArchWiki

出自 https://www.nongnu.org/cvs/

Concurrent Versions System 是一个版本控制系统,是源代码配置管理 (SCM) 的重要组成部分。 使用它,您可以记录源文件和文档的历史记录。 它的作用类似于自由软件 RCS、PRCS 和 Aegis 软件包。

更多最新的替代方案列在 Category:Version control system 中。

客户端

如果您想连接到 cvs 服务器,请安装 cvs 并按照该服务器所有者的说明进行操作。 例如 https://www.openbsd.org/anoncvs.html

注意: 请参阅 FS#12636,某些服务器可能需要 rsh。 您可以使用 环境变量 CVS_RSH=ssh 强制使用 ssh

图形化前端

  • Cervisia — CVS 的 GUI。 是 kde-sdk 的一部分。
https://apps.kde.org/cervisia/ || cervisia

服务器

此文章或章节已过时。

原因: 应该解释如何使用 systemd 运行 cvs 服务器(参见 Fedora 的 cvs.socketcvs@.service 文件),而不是依赖 xinetd。(在 Talk:Concurrent Versions System 中讨论)

这是一个关于如何设置最新的 CVS 服务器的快速指南。

安装

安装 cvsxinetdAUR

创建 cvs 用户组 - 此组的成员将拥有对存储库的写入权限

# groupadd cvs

在 cvs 组中创建 cvs 用户 (-md 创建主目录)

# useradd -md /home/cvsroot -g cvs -p Insecure0 cvs

初始化

初始化您的 CVS 存储库(作为 cvs 用户)

cvs% cvs -d /home/cvsroot init

目录(不是内部文件,但是)的权限应为 2775 (drwxrwxr-x),但如果不是,请运行(作为 cvs 用户)

cvs% chmod 2775 /home/cvsroot

将您想要拥有本地访问存储库权限的任何用户添加到 cvs 组,通过以下两个步骤。 您可以使用以下命令将预先存在的用户添加到 cvs 组

# gpasswd -a username cvs

创建一个 xinetd 配置文件

/etc/xinetd.d/cvspserver
service cvspserver
{
        port            = 2401
        socket_type     = stream
        protocol        = tcp
        wait            = no
        user            = root
        passenv         = /home/cvsroot
        server          = /usr/bin/cvs
        server_args     = -f --allow-root=/home/cvsroot pserver
}

确保您在 /etc/services 中有以下行(如果没有则添加)

cvspserver 2401/tcp

取消设置 HOME 变量

# unset HOME

重启 xinetd.service

配置

作为 cvs 用户,在 ~/CVSROOT 中创建一个 passwd 文件。 要在文件中添加条目,您可以使用 htpasswd 命令(存在于 apache 软件包中),如下所示

htpasswd -b filename username password

然后编辑该文件并添加组,例如

# Format is username:password:group

anonymous::
archie:HopefullySecure0:cvs
other:Insecure0:cvs

现在在 ~/CVSROOT 中创建一个 writers 文件,该文件授予在 passwd 中创建的用户写入权限

archie
other

现在在 ~/CVSROOT 中创建一个 readers 文件,该文件授予在 passwd 中创建的用户读取权限

anonymous
注意: 如果用户存在于 readers 文件中,他们也不能拥有写入权限。

用法

您可以使用以下命令测试服务器

$ export CVSROOT=:pserver:my_user_name@127.0.0.1:/home/cvsroot
$ cvs login
$ mkdir ~/sandbox
$ mkdir ~/sandbox/myproject
$ cd ~/sandbox/myproject
$ echo "this is a sample file" > myfile
$ cvs import -m "description of myproject" myproject v1 r1
$ cd ..
$ rm -R myproject
$ cvs checkout myproject
$ cd myproject
$ echo "some changes to the file" >> myfile
$ cvs commit -m "Explain changes here" myfile