📄 1060.html
字号:
<input type=radio checked value=title name=type>标题
<input type=radio value=content name=type>内容
<input type=image src="images/button_go.gif" tppabs="http://www.linuxhero.com/docs/images/button_go.gif" border=0 name=image2>
</font></div>
</td>
</tr>
<tr>
<td noWrap>
<div align="center">
<input maxlength=100 size=30 name=keyword2>
</div>
</td>
</tr></tbody>
</table>
</form>
</TD>
<TD rowSpan=2><IMG src="images/header_r1_c7.gif" tppabs="http://www.linuxhero.com/docs/images/header_r1_c7.gif" width=26 border=0 name=header_r1_c7></TD>
<TD><IMG height=83 src="images/spacer.gif" tppabs="http://www.linuxhero.com/docs/images/spacer.gif" width=1 border=0></TD></TR>
<TR>
<TD background="images/bgline.gif" tppabs="http://www.linuxhero.com/docs/images/bgline.gif"><IMG height=22
src="images/header_r2_c1.gif" tppabs="http://www.linuxhero.com/docs/images/header_r2_c1.gif" width=296 border=0
name=header_r2_c1></TD>
<TD background="images/bgline.gif" tppabs="http://www.linuxhero.com/docs/images/bgline.gif" colSpan=5>
<DIV align=right><FONT class=normalfont>当前位置:
<A href="index.html" tppabs="http://www.linuxhero.com/docs/index.html">本站首页</A>
<font color="#FF6699">>></font>
<A href="type14.html" tppabs="http://www.linuxhero.com/docs/type14.html">编程技术</A> | <A href="copyright.html" tppabs="http://www.linuxhero.com/docs/copyright.html">版权说明</A></font></DIV>
</TD>
<TD><IMG height=22 src="images/spacer.gif" tppabs="http://www.linuxhero.com/docs/images/spacer.gif" width=1
border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=10 cellPadding=0 width="100%" bgColor=#ffffff
border=0>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=3 width="100%" border=0>
<TR>
<TD vAlign=top align=middle width="60%">
<TABLE cellSpacing=0 cellPadding=0 width="100%"
background="images/back.gif" tppabs="http://www.linuxhero.com/docs/images/back.gif" border=0>
<TBODY>
<TR>
<TD vAlign=top width="80%">
<DIV align=center>
<FORM action="search.html" tppabs="http://www.linuxhero.com/docs/search.html" method=get>
</FORM>
<TABLE cellSpacing=0 cellPadding=0 width="95%"
border=0><TBODY>
<TR>
<TD background="images/bgi.gif" tppabs="http://www.linuxhero.com/docs/images/bgi.gif"
height=30></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=3 width="95%"
align=center border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=3 width="100%"
border=0>
<TBODY>
<TR>
<TD vAlign=top>
<p><FONT class=normalfont><B><font color=blue>CVS, Automake与Autoconf简介</font></B></FONT><BR><FONT class=smallfont color=#ff9900>2004-04-23 15:18 pm</FONT><BR><FONT class=normalfont>作者:高嘉良<br>来自:Linux知识宝库<br>联系方式:无名<br><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, 打进去。 www.minigui.org是cvs服务器所在的机器。 该指定被执行后,该 cvsroot<br>
(:pserver:joe@www.minigui.org:/home/minigui) 和加密后的密码会被存在 ~/.cvspass 里。<br>
底下几行取出各个project。最后logout。<br>
<br>
cd minigui03<br>
<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -