补充说明
cvs 是早期的集中式版本控制系统,曾广泛用于开源项目。客户端通过 checkout 取代码、update 同步、commit 提交,仓库位于服务器,工作副本的每个目录带有 CVS/ 元数据。
它已被 Subversion、Git 等取代:不支持原子提交、重命名跟踪弱、分支操作笨重,新项目不应再选用,只有维护老项目时才会用到。Debian 与 RHEL 的软件包名均为 cvs;服务端可用 cvsd 或由 xinetd 启动 cvs pserver。
认证方式包括 pserver、ssh 等。远程仓库写作 :pserver:user@host:/path,首次使用需 cvs login。注意 CVS 关键字(如 $Id$)会在提交时展开,比较文件时容易产生噪声,必要时用 -ko 检出为二进制模式。
多人同时修改同一文件时,update 会尝试合并并标记冲突,解决后需重新 commit。没有中央锁,冲突处理完全依赖客户端。
语法
cvs [全局选项] 子命令 [子命令选项] [文件 ...]
选项
-d 仓库:指定仓库路径或远程连接串;-q:减少提示信息;-n:只显示将执行的动作,不实际修改;-z 级别:传输时压缩。
常用子命令:checkout(检出)、update(更新)、commit(提交)、add/remove(增删文件)、diff(比较)、log(历史)、status(状态)。
实例
# 从远程 pserver 仓库检出模块
cvs -d :pserver:user@example.com:/var/cvs login
cvs -d :pserver:user@example.com:/var/cvs checkout myproject
# 更新工作副本,创建缺失目录并清理空目录
cvs update -dP
# 提交修改并写日志
cvs commit -m "fix null pointer in parser"
# 添加新文件后提交
cvs add newfile.c
cvs commit -m "add newfile.c"
# 查看某文件历史
cvs log main.c