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

第一部分 CVS簡介
cvs ( Concurrent Version System )是一個版本控制系統(tǒng),什么是版本控制系統(tǒng)呢?簡單的說,它可以記錄程序代碼修改的過程,有一個完整的歷史記錄( history )。辟如說,當(dāng)你在修改程序代碼的時候, 不小心寫出了一個 bug,但是你可能很久以后才發(fā)現(xiàn)多出了這個 bug, 這個時候,cvs 能很有效的幫助你找出到底是在哪一次的修改中,出現(xiàn)了這個 bug。
也許你會說, 那我每次都把程序保存起來, 用tar 做好備份不行了,當(dāng)然, 你可以這樣做, 但是這太浪費空間了! cvs 在版本更改間, 只儲存不同的部分, 這樣可以省下很多空間。
在另一個場合里, 更能顯示出 cvs 的好處 ,比如多人一起開發(fā)軟件的時候。 cvs支持遠程訪問, 用戶可以對他要修改的文件加上正在編輯的標(biāo)志, 讓別人知道他要修改這個文件了。 當(dāng)然, 一個較大的開發(fā)隊伍,一般還會需要一個 mailing list 用來溝通。畢竟cvs 只是一個管理程序代碼的工具, 他并不扮演溝通的角色。 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的要得多,特別是在支持多人遠程開發(fā)方面。由于CVS出現(xiàn)較新,所以使用上反而沒有它們普及。當(dāng)然,如果您熟悉rcs,您會發(fā)現(xiàn)學(xué)習(xí)cvs非常容易。

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

本地( local )cvs
首先, 確定一個 cvsroot,比如:
export CVSROOT="/home/joe/cvsroot/" 建立該目錄:
mkdir /home/joe/cvsroot
接著,運行cvs init :
cvs init
cvs init 會幫你把 cvsroot 初始化。接著, 建立一個要放文件的目錄 ( 相當(dāng)于一個Project ): mkdir /home/joe/cvsroot/cvsdoc
cd /home/joe/work
cvs checkout cvsdoc( 或者簡寫為: cvs co cvsdoc ) 你會看到下面的信息: cvs checkout: Updating cvsdoc cvs checkout 會把當(dāng)前新的版本拷貝到你的當(dāng)前目錄下。
記住, 不要自己建立 /home/joe/work/cvsdoc, 該目錄下還會有一些用于管理的 cvs 相關(guān)的信息。
接著, 進入 cvsdoc 目錄, 編輯 cvs.doc 這個文件檔案,輸入一些信息。
然后,運行:
cvs add cvs.txt cvs commit -m "Initial revision." cvs add 會把 cvs.txt 加入 cvs 維護的文件列表中去。
cvs commit 檢查當(dāng)前目錄下所有的在文件列表中的文件,并把對他們的改動加入到倉庫中。-m 表示這次 commit 的 message,一般說明此次修改的相關(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
==================================================================
你會看到每次修改加進去的 message。這對開發(fā)者,特別是一個大的項目的開發(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!
這樣會顯示 1.1 和 1.2 版的 diff, 原本有 1.1 版的人, 只需要用這個 patch 可以了升級到1.2了!
再編輯 cvs.txt, 可以發(fā)現(xiàn)上面的 Id 變長了? 加了一代串文字:
$Id: cvs.txt,v 1.2 2000/09/11 11:55:06 joe Exp $ 這顯示這個版本的一些相關(guān)信息。
遠程( remote )cvs
如果我們要做一個比較大的項目,上面講的本地cvs服務(wù)太簡單了,我們要讓眾多的人可以遠程開發(fā)程序! 比如我們要用cvs組織起我們的minigui項目。 檢查 /etc/services 有沒有這兩行,沒有請加入:
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è)置生效,請重啟inetd。
添加用戶anoncvs, 這是要給匿名cvs 用戶使用的帳號,其組為nogroup。 新加一個名為 minigui的 group。 添加參與 minigui開發(fā)的用戶的帳號, 當(dāng)然, 把他們的 group 設(shè)為 minigui。
cvs -d /home/minigui init
cd /root/minigui, 這是原來已經(jīng)存在的版本, 現(xiàn)在我們要把它的東西放進 cvs 倉庫里: 比如,我們把minigui的庫minigui03放到倉庫中:

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

會看到cvs把一個個文件放到倉庫中。 

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