您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源配置管理工具 > cvs
CVS、Automake與Autoconf簡(jiǎn)介
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2012/12/28 14:18:46 ] 推薦標(biāo)簽:

第一部分 CVS簡(jiǎn)介
cvs ( Concurrent Version System )是一個(gè)版本控制系統(tǒng),什么是版本控制系統(tǒng)呢?簡(jiǎn)單的說(shuō),它可以記錄程序代碼修改的過(guò)程,有一個(gè)完整的歷史記錄( history )。辟如說(shuō),當(dāng)你在修改程序代碼的時(shí)候, 不小心寫(xiě)出了一個(gè) bug,但是你可能很久以后才發(fā)現(xiàn)多出了這個(gè) bug, 這個(gè)時(shí)候,cvs 能很有效的幫助你找出到底是在哪一次的修改中,出現(xiàn)了這個(gè) bug。
也許你會(huì)說(shuō), 那我每次都把程序保存起來(lái), 用tar 做好備份不行了,當(dāng)然, 你可以這樣做, 但是這太浪費(fèi)空間了! cvs 在版本更改間, 只儲(chǔ)存不同的部分, 這樣可以省下很多空間。
在另一個(gè)場(chǎng)合里, 更能顯示出 cvs 的好處 ,比如多人一起開(kāi)發(fā)軟件的時(shí)候。 cvs支持遠(yuǎn)程訪問(wèn), 用戶可以對(duì)他要修改的文件加上正在編輯的標(biāo)志, 讓別人知道他要修改這個(gè)文件了。 當(dāng)然, 一個(gè)較大的開(kāi)發(fā)隊(duì)伍,一般還會(huì)需要一個(gè) mailing list 用來(lái)溝通。畢竟cvs 只是一個(gè)管理程序代碼的工具, 他并不扮演溝通的角色。 cvs的同類軟件還有rcs和sccs。RCS ( Revision Control System ) 可以從FSF獲得。SCCS ( Source Code Control System ) 由AT&T在SystemV中引入,現(xiàn)在已經(jīng)被加入X/Open標(biāo)準(zhǔn)( Unix 98? )。比起這些軟件,CVS的要得多,特別是在支持多人遠(yuǎn)程開(kāi)發(fā)方面。由于CVS出現(xiàn)較新,所以使用上反而沒(méi)有它們普及。當(dāng)然,如果您熟悉rcs,您會(huì)發(fā)現(xiàn)學(xué)習(xí)cvs非常容易。

名詞
repository: 意為倉(cāng)庫(kù)。在 cvs 里, 它是你真正存放各歷史版本的地方。 pserver: cvs 遠(yuǎn)程服務(wù)器,cvs 有兩種工作模式, 一種是 local, 一種是 remote。 一般通過(guò)inetd啟動(dòng)pserver。
CVSROOT: 當(dāng)使用 cvs 的時(shí)候, 要設(shè)定 CVSROOT這個(gè)環(huán)境變量, 或是用 -d 選項(xiàng)來(lái)指定該參數(shù),該參數(shù)指明你的倉(cāng)庫(kù)放在哪里。

本地( local )cvs
首先, 確定一個(gè) cvsroot,比如:
export CVSROOT="/home/joe/cvsroot/" 建立該目錄:
mkdir /home/joe/cvsroot
接著,運(yùn)行cvs init :
cvs init
cvs init 會(huì)幫你把 cvsroot 初始化。接著, 建立一個(gè)要放文件的目錄 ( 相當(dāng)于一個(gè)Project ): mkdir /home/joe/cvsroot/cvsdoc
cd /home/joe/work
cvs checkout cvsdoc( 或者簡(jiǎn)寫(xiě)為: cvs co cvsdoc ) 你會(huì)看到下面的信息: cvs checkout: Updating cvsdoc cvs checkout 會(huì)把當(dāng)前新的版本拷貝到你的當(dāng)前目錄下。
記住, 不要自己建立 /home/joe/work/cvsdoc, 該目錄下還會(huì)有一些用于管理的 cvs 相關(guān)的信息。
接著, 進(jìn)入 cvsdoc 目錄, 編輯 cvs.doc 這個(gè)文件檔案,輸入一些信息。
然后,運(yùn)行:
cvs add cvs.txt cvs commit -m "Initial revision." cvs add 會(huì)把 cvs.txt 加入 cvs 維護(hù)的文件列表中去。
cvs commit 檢查當(dāng)前目錄下所有的在文件列表中的文件,并把對(duì)他們的改動(dòng)加入到倉(cāng)庫(kù)中。-m 表示這次 commit 的 message,一般說(shuō)明此次修改的相關(guān)信息。
現(xiàn)在修改一下 cvs.txt,并且,在文件檔案的上面加上 $Id$ 的字樣。
改完之后, 再 commit 一次:
cvs commit -m "Adding new stuff."
現(xiàn)在看看我們所做的修改:
cvs log cvs.txt
可以看到:
RCS file: /home/joe/cvsroot/cvsdoc/cvs.txt,v
Working file: cvs.txt
head: 1.2
branch:
locks: strict
access list:
symbolic names:
keyword substitution: kv
total revisions: 2; selected revisions: 2
description:
----------------------------
revision 1.2
date: 2000/09/11 11:55:06; author: joe; state: Exp; lines: +2 -0
i
----------------------------
revision 1.1
date: 2000/09/11 11:52:32; author: joe; state: Exp;
initial version
==================================================================
你會(huì)看到每次修改加進(jìn)去的 message。這對(duì)開(kāi)發(fā)者,特別是一個(gè)大的項(xiàng)目的開(kāi)發(fā)者,其幫助是不言而喻的。
cvs diff -r 1.1 -r 1.2 cvs.txt
可以看到:
Index: cvs.txt
================================================================== RCS file: /home/joe/cvsroot/cvsdoc/cvs.txt,v
retrieving revision 1.1
retrieving revision 1.2
diff -r1.1 -r1.2
0a1
> $Id: cvs.txt,v 1.2 2000/09/11 11:55:06 joe Exp $
1a3
> hehe,sencond time edit it!
這樣會(huì)顯示 1.1 和 1.2 版的 diff, 原本有 1.1 版的人, 只需要用這個(gè) patch 可以了升級(jí)到1.2了!
再編輯 cvs.txt, 可以發(fā)現(xiàn)上面的 Id 變長(zhǎng)了? 加了一代串文字:
$Id: cvs.txt,v 1.2 2000/09/11 11:55:06 joe Exp $ 這顯示這個(gè)版本的一些相關(guān)信息。
遠(yuǎn)程( remote )cvs
如果我們要做一個(gè)比較大的項(xiàng)目,上面講的本地cvs服務(wù)太簡(jiǎn)單了,我們要讓眾多的人可以遠(yuǎn)程開(kāi)發(fā)程序! 比如我們要用cvs組織起我們的minigui項(xiàng)目。 檢查 /etc/services 有沒(méi)有這兩行,沒(méi)有請(qǐng)加入:
cvspserver 2401/tcp #CVS network server cvspserver 2401/udp #CVS network server
在 /etc/inetd.conf 加入:
cvspserver stream tcp nowait root /usr/local/bin/cvs cvs --allow-root=/home/minigui pserver
mkdir /home/minigui
要是該設(shè)置生效,請(qǐng)重啟inetd。
添加用戶anoncvs, 這是要給匿名cvs 用戶使用的帳號(hào),其組為nogroup。 新加一個(gè)名為 minigui的 group。 添加參與 minigui開(kāi)發(fā)的用戶的帳號(hào), 當(dāng)然, 把他們的 group 設(shè)為 minigui。
cvs -d /home/minigui init
cd /root/minigui, 這是原來(lái)已經(jīng)存在的版本, 現(xiàn)在我們要把它的東西放進(jìn) cvs 倉(cāng)庫(kù)里: 比如,我們把minigui的庫(kù)minigui03放到倉(cāng)庫(kù)中:

cd minigui03;cvs import –m “the lib” minigui03 joe start

會(huì)看到cvs把一個(gè)個(gè)文件放到倉(cāng)庫(kù)中。 

上一頁(yè)1234下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd