📄 cvs, automake与autoconf简介.htm
字号:
align=middle border=0 name=image>
</A></TD></TR></TBODY></TABLE>
<TABLE class=contentpaneopen>
<TBODY>
<TR>
<TD vAlign=top align=left width="70%"
colSpan=2><SPAN class=small>执笔: Administrator
</SPAN> </TD></TR>
<TR>
<TD class=createdate vAlign=top
colSpan=2>2004-02-28 </TD></TR>
<TR>
<TD vAlign=top colSpan=2>CVS, Automake与Autoconf简介
<BR>第一部分 CVS简介 <BR>cvs ( Concurrent Version System
)是一个版本控制系统,什么是版本控制系统呢?简单的说,它可以记录程序代码修改的过程,有一个完整的历史记录(
history )。辟如说,当你在修改程序代码的时候, 不小心写出了一个
bug,但是你可能很久以后才发现多出了这个 bug, 这个时候,cvs
就能很有效的帮助你找出到底是在哪一次的修改中,出现了这个 bug。 <BR>也许你会说,
那我每次都把程序保存起来, 用tar 做好备份不就行了,当然, 你可以这样做, 但是这太浪费空间了!
cvs 在版本更改间, 只储存不同的部分, 这样就可以省下很多空间。 <BR>在另一个场合里,
更能显示出 cvs 的好处 ,比如多人一起开发软件的时候。 cvs支持远程访问,
用户可以对他要修改的文件加上正在编辑的标志, 让别人知道他要修改这个文件了。 当然,
一个较大的开发队伍,一般还会需要一个 mailing list 用来沟通。毕竟cvs
只是一个管理程序代码的工具, 他并不扮演沟通的角色。 cvs的同类软件还有rcs和sccs。RCS
( Revision Control System ) 可以从FSF获得。SCCS ( Source
Code Control System )
由AT&T在SystemV中引入,现在已经被加入X/Open标准( Unix 98?
)。比起这些软件,CVS的要优秀得多,特别是在支持多人远程开发方面。由于CVS出现较新,所以使用上反而没有它们普及。当然,如果您熟悉rcs,您会发现学习cvs非常容易。
<BR><BR>名词 <BR>repository: 意为仓库。在 cvs 里,
它就是你真正存放各历史版本的地方。 pserver: cvs 远程服务器,cvs 有两种工作模式,
一种是 local, 一种是 remote。 一般通过inetd启动pserver。
<BR>CVSROOT: 当使用 cvs 的时候, 要设定 CVSROOT这个环境变量, 或是用
-d 选项来指定该参数,该参数指明你的仓库放在哪里。 <BR><BR>本地( local )cvs
<BR>首先, 确定一个 cvsroot,比如: <BR>export
CVSROOT="/home/joe/cvsroot/" 建立该目录: <BR>mkdir
/home/joe/cvsroot <BR>接着,运行cvs init : <BR>cvs init
<BR>cvs init 会帮你把 cvsroot 初始化。接着, 建立一个要放文件的目录 (
相当于一个Project ): mkdir /home/joe/cvsroot/cvsdoc
<BR>cd /home/joe/work <BR>cvs checkout cvsdoc(
或者简写为: cvs co cvsdoc ) 你会看到下面的信息: cvs checkout:
Updating cvsdoc cvs checkout 会把当前最新的版本拷贝到你的当前目录下。
<BR>记住, 不要自己建立 /home/joe/work/cvsdoc,
该目录下还会有一些用于管理的 cvs 相关的信息。 <BR>接着, 进入 cvsdoc 目录, 编辑
cvs.doc 这个文件档案,输入一些信息。 <BR>然后,运行: <BR>cvs add
cvs.txt cvs commit -m "Initial revision." cvs add
就会把 cvs.txt 加入 cvs 维护的文件列表中去。 <BR>cvs commit
检查当前目录下所有的在文件列表中的文件,并把对他们的改动加入到仓库中。-m 表示这次 commit
的 message,一般说明此次修改的相关信息。 <BR>现在修改一下
cvs.txt,并且,在文件档案的最上面加上 $Id$ 的字样。 <BR>改完之后, 再
commit 一次: <BR>cvs commit -m "Adding new stuff."
<BR>现在看看我们所做的修改: <BR>cvs log cvs.txt <BR>可以看到:
<BR>RCS file: /home/joe/cvsroot/cvsdoc/cvs.txt,v
<BR>Working file: cvs.txt <BR>head: 1.2
<BR>branch: <BR>locks: strict <BR>access list:
<BR>symbolic names: <BR>keyword substitution: kv
<BR>total revisions: 2; selected revisions: 2
<BR>description: <BR>----------------------------
<BR>revision 1.2 <BR>date: 2000/09/11 11:55:06;
author: joe; state: Exp; lines: +2 -0 <BR>i
<BR>---------------------------- <BR>revision 1.1
<BR>date: 2000/09/11 11:52:32; author: joe; state:
Exp; <BR>initial version
<BR>==================================================================
<BR>你会看到每次修改加进去的
message。这对开发者,特别是一个大的项目的开发者,其帮助是不言而喻的。 <BR>cvs
diff -r 1.1 -r 1.2 cvs.txt <BR>可以看到: <BR>Index:
cvs.txt
<BR>==================================================================
RCS file: /home/joe/cvsroot/cvsdoc/cvs.txt,v
<BR>retrieving revision 1.1 <BR>retrieving
revision 1.2 <BR>diff -r1.1 -r1.2 <BR>0a1 <BR>>
$Id: cvs.txt,v 1.2 2000/09/11 11:55:06 joe Exp $
<BR>1a3 <BR>> hehe,sencond time edit it!
<BR>这样会显示 1.1 和 1.2 版的 diff, 原本有 1.1 版的人, 只需要用这个
patch 就可以了升级到1.2了! <BR>再编辑 cvs.txt, 可以发现最上面的 Id
变长了? 加了一代串文字: <BR>$Id: cvs.txt,v 1.2 2000/09/11
11:55:06 joe Exp $ 这显示这个版本的一些相关信息。 <BR>远程( remote
)cvs
<BR>如果我们要做一个比较大的项目,上面讲的本地cvs服务就太简单了,我们要让众多的人可以远程开发程序!
比如我们要用cvs组织起我们的minigui项目。 检查 /etc/services
有没有这两行,没有请加入: <BR>cvspserver 2401/tcp #CVS network
server cvspserver 2401/udp #CVS network server
<BR>在 /etc/inetd.conf 加入: <BR>cvspserver stream
tcp nowait root /usr/local/bin/cvs cvs
--allow-root=/home/minigui pserver <BR>mkdir
/home/minigui <BR>要是该设置生效,请重启inetd。
<BR>添加用户anoncvs, 这是要给匿名cvs 用户使用的帐号,其组为nogroup。
新加一个名为 minigui的 group。 添加参与 minigui开发的用户的帐号, 当然,
把他们的 group 设为 minigui。 <BR>cvs -d /home/minigui
init <BR>cd /root/minigui, 这是原来已经存在的版本,
现在我们要把它的东西放进 cvs 仓库里:
比如,我们把minigui的库minigui03放到仓库中: <BR><BR>cd
minigui03;cvs import –m “the lib” minigui03 joe
start <BR><BR>会看到cvs把一个个文件放到仓库中。 <BR>cvs import
的语法为: <BR><BR>cvs import -m "log msg" projname
vendortag releasetag <BR><BR>vendortag 和releasetag
一般不需要关心,我们这里使用一个用户名和一个start 标志。
<BR>我们把其它相关的project也放到cvs仓库中: <BR><BR>cd
miniguiapps03 ; cvs import –m “the apps”
miniguiapps03 joe start <BR>cd miniguiexec03 ; cvs
import –m “the demos” miniguiexec03 joe start
<BR><BR>这样,我们就把minigui的一个cvs服务器建立好了。 <BR>注意, 一个
user 要远程访问某些project,
他必须拥有适当的权限。比如,minigui03这个目录应该属于组minigui,且组可写。才能使minigui组里的用户可以远程参与minigui库的开发。
<BR><BR>现在试试看从远程访问 cvs 服务器。 <BR>首先,
在你的机器上建立一个工作目录, 譬如是 /home/joe/work <BR>cd
/home/joe/work <BR>cvs -d
:pserver:joe@www.minigui.org:/home/minigui login
<BR>cvs -d
:pserver:joe@www.minigui.org:/home/minigui co
minigui03 <BR>cvs -d
:pserver:joe@www.minigui.org:/home/minigui co
miniguiapps03 <BR>cvs -d
:pserver:joe@www.minigui.org:/home/minigui co
miniguiexec03 <BR>cvs -d
:pserver:joe@www.minigui.org:/home/minigui logout
<BR><BR>当你敲入login行时,系统会提示你输入password, 打进去。 <A
href="http://www.minigui.org/"
target=_blank>http://www.minigui.org/</A>是cvs服务器所在的机器。
该指定被执行后,该 cvsroot
<BR>(:pserver:joe@www.minigui.org:/home/minigui)
和加密后的密码会被存在 ~/.cvspass 里。
<BR>底下几行取出各个project。最后logout。 <BR><BR>cd minigui03
<BR><BR>做了一些修改后,可以commit出去: <BR><BR>cvs commit -m
"little change" <BR>上面是一般开发者的登陆方法,对于匿名cvs,
可以让其不需要输入口令即可登陆,但是不能让其commint。这需要: <BR>1.
将要开放的project设为全局可读写,因为cvs服务器在操作时要在相应目录下设置读写琐(即需要创建一些临时文件),所以即使是check
out 操作,也需要目录可写。 <BR>2. 为了让匿名用户只有check
out权限,可以在CVSROOT目录下建立一个readers文件,其中每一行是一个用户,这些用户只具有只读权限。比如:
<BR>anonymous <BR>anoncvs <BR>guest <BR>jbrowse
<BR>3. 利用passwd文件,使匿名用户不能用其它方式登陆。典型为:
<BR>在文件CVSROOT/passwd 中: <BR>anoncvs:XR4EZcEs0szik
<BR>在文件/etc/passwd 中为:
<BR>anoncvs:!:1729:105:Anonymous CVS
User:/home/minigui:/bin/false
<BR>CVSROOT/passwd文件是cvs提供的一个专用于存放cvs密码的文件。它的典型格式为:
<BR>joe:XR4EZcEs0szik:jane
<BR>表示cvs用户joe其实是内部用户jane,其cvs密码加密后被存放在第二个字段,这样就将cvs服务与系统的其它部分分离开来,大大地提高了系统的安全性。
<BR>上面介绍的是使用需要严格的安全认证的pserver服务器,如果您在局域网内开发程序,则可以使用rsh或者ssh,设置非常简单,服务器端只要开放着rsh或ssh服务器,客户端设置两个环境变量:CVS_RSH与CVSROOT,可以将它们的设置写入预处理脚本,比如使用ssh连接:
<BR><BR>$export CVS_RSH="ssh" <BR>$export
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -