CVS笔记
1cvs基本使用
1.1创建仓库
创建一个cvs仓库使用cvs init命令。在一个开发团队中,创建一个cvs仓库一般是项目负责人所做的事情,同时他也是cvs仓库的管理员,负责整个仓库的维护。假设管理员的用户名为admin,管理员就在他的工作目录下创建一个cvs仓库。
mkdir /home/admin/cvsroot
cvs-d /home/admin/cvsroot init
1.2删除仓库
删除仓库直接使用rm -rf命令。
1.3导入文件
导入文件使用cvs import命令。导入文件也是管理员所做的事情,他将项目的初始文件导入到cvs仓库中,普通的开发者可以导出文件修改,可以向仓库添加新的文件。
1.3.1首先在仓库中创建一个目录:
mkdir /home/admin/cvsroot/u-boot-2009.08
1.3.2导入文件要进入源文件所在目录:
cd /home/admin/u-boot-2009.08
1.3.3导入文件:
cvs -d /home/admin/cvsroot import -m "initrepository" u-boot-2009.08 vendor-tag release-tags
-d参数指定仓库的位置,-m添加的是日志信息,vendor-tag是厂商标签,release-tags是发行标签。注意这里是用-d参数指定的仓库位置,我们也可以在CVSROOT环境变量中指定仓库的位置。在.bashrc或.profile中添加如下语句:
CVSROOT=/home/admin/cvsroot
export CVSROOT
1.4导出文件
导出文件可以是管理员在内的所有开发人员,导出文件使用cvs checkout命令,用于将仓库中的源码导出到自己的工作空间中。在导出文件的时候还是要指定cvs仓库的位置,可以使用-d参数去指定,但这样很麻烦,每次都要输入-d参数,还是可以在CVSROOT环境变量中指定仓库的位置。例如:导出管理员导入的u-boot代码。
cvs checkout u-boot-2009.08
1.5删除代码拷贝
删除代码拷贝直接使用rm命令就可以了,但是更好的方法是cvs realease命令,这样能防止删除没有提交的代码。
1.6修改添加文件
cvs的开发模式就是每个小组成员将仓库中的代码导出到自己的工作空间中,在自己的工作空间修改添加代码,最后提交到仓库中,保证仓库的代码合并。在团队开发中尤为重要,避免的手动合并的麻烦。修改之前肯定要从仓库中导出最新的一份代码拷贝,不然,提交的时候是提交不了的,也减少了代码冲突问题。修改好之后,使用cvs commit提交代码到仓库中。
1.6.1新增目录
新增目录直接使用cvs add命令就行了。
1.6.2新增文件
cvs add filename
cvs commit filename -m "add new file"
必须使用cvs commit命令才将文件真正添加到仓库中
1.7删除文件
删除文件首先你要使用rm命令将你工作空间中文件拷贝删除掉,再使用cvs remove命令,最后使用cvs commit提交修改,但是作为管理员应该禁止普通开发人员这样的行为,便于代码管理。
1.8重命名文件
重命名文件的思路是先在本地工作空间做一份拷贝,然后删除仓库中的代码文件,最后将拷贝的代码重命名,然后作为新的一份文件提交到仓库中。
1.9更新文件
当你从仓库中导出了一份代码文件到你自己的工作空间后,有可能其他开发者后来又提交新的代码或补丁,如果你在你前面代码中修改,提交的时候是提交不了的,必须重新导出或者直接更新本地代码文件。更新使用cvs update命令。
2仓库的位置及访问方法
2.1仓库的位置
仓库的位置有可能在本地计算机中,也有可能在局域网内的一台服务器上,甚至在一台通过互联网连接的一台远端计算机上,所以在访问cvs仓库时,仅仅指定仓库在计算机中的路径是不行的,还要指定它的主机地址,比如IP地址。
2.2远程仓库
对于一个团队开发来说,仓库存放在一台作为服务器的机器上,开发者从服务器上导出源文件到本地计算机上,在本地计算机修改添加,然后提交到服务器上,这种方式CVS是以client/server模式工作的。使用远程仓库除了仓库名称格式不同外,其它没有什么区别,格式如下:
[:method:][[user ][:password ]@]hostname [:[port ]]/path/to/repository
2.2.1仓库的默认访问方法
前面讲cvs基本操作时都假设cvs仓库就在本地计算机上,采用了它的默认方法:local:方法。因为在指定仓库位置时,如果省略的访问方法,并且仓库位置是以'/'开头时,:local:方法就是它的默认方法。如果不是以'/开头',那么:ext:或:server:就是它的默认方法。
2.2.2仓库的连接方法
2.2.3通过密码认证直接连接到CVS服务器。
CVS客户端可以通过密码认证的方式连接到CVS服务器,使用这种方法,需要对CVS服务器和客户端做一些配置。
2.2.3.1在服务器上建立密码认证
如果你的系统使用的是xinetd这种服务,那么在/etc/xinetd.d目录下创建文件cvsserver,该文件包含如下内容:
service cvspserver
{
port= 2401
socket_type= stream
protocol= tcp
wait= no
user= root
passenv= PATH
server= /usr/local/bin/cvs
server_args= -f --allow-root=/usr/cvsroot pserver
}
如果/etc/services中有cvspserver定义,可以省略port这行。
密码存储位置(密码在哪里)
cvs使用一个单独的文件来存储密码,文件为$CVSROOT/CVSROOT/passwd,该文件同Unix系统中的/etc/passwd相似。特殊的,可以在passwd中定义anonymous来允许匿名只读访问,密码可以是任意字符或者空的密码。
cvs还可以借助系统认证。服务器先检查$CVSROOT/CVSROOT/passwd文件中是否有该用户,如果没有该用户或者passwd文件都不存在的时候,服务器将采用操作系统的用户密码来认证。这种机制也可以通过配置文件$CVSROOT/CVSROOT/config设置SystemAuth=no来禁止。
2.2.3.2在客户端使用密码认证
在客户端,通过密码认证访问远程仓库,需要指定pserver协议,可选的username,仓库主机,可选的端口号,仓库路径,例如,环境变量设置如下:
CVSROOT=:pserver:bach@faun.example.org:2401/usr/local/cvsroot
exportCVSROOT
首先你要使用密码登录到cvs,登录使用cvslogin命令。输入密码后,cvs服务器将进行验证,如果验证成功,cvs将username、host、repository和password永久存储下来,这样以后访问cvs仓库时就可以不用输入cvslogin命令了。这些字段默认是存储在$HOME/.cvspass中的,这里面的密码也是加了密的。这个文件的存储位置可以通过设置环境变量CVS_PASSFILE来改变。以后不输入cvslogin不表示以后就不用验证了,而是cvs验证的是$HOME/.cvspass中的记录,如果服务器端修改了密码,你还需要重新输入cvslogin命令去登录。
3参考资料
(1)EssentialCVS
(2)VersionManagement with CVS