您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源配置管理工具 > cvs
CVS是什么?
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/1/28 13:48:26 ] 推薦標(biāo)簽:

* 什麼是 cvs?

cvs 是一個(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 起來(lái)不好了,當(dāng)然, 你是可以這麼做, 但是這太浪費(fèi)空間了! cvs 在版本更改間,只儲(chǔ)存他們的 diff 檔, 這樣可以很有效的省下很多空間.

再另一個(gè)場(chǎng)合里頭, 更能顯示出 cvs 的好處 -- 多人一起發(fā)展軟體的時(shí)候. cvs 支援 remote aclearcase/" target="_blank" >ccess, user 并可以對(duì)他要修改的檔案加上 edit 的 flag, 讓別人知道他要修改這個(gè)檔案了. 然而,一個(gè)較大的發(fā)展團(tuán)隊(duì), 一定還會(huì)需要一個(gè) mailing list, 用來(lái)溝通.因?yàn)椋?cvs 是一個(gè)管理 project 程式碼的工具, 他并不扮演溝通的角色.

* 名詞

repository: 意思是倉(cāng)庫(kù). 在 cvs 里頭, 是你真正存放版本歷史的地方.

pserver : 這是 cvs 用來(lái)接受 remote 的 cvs command 用的.cvs 有兩種模式, 一種是 local, 一種是 remote.

cvsroot : 當(dāng)你使用 cvs 的時(shí)候, 必須設(shè)定 CVSROOT 這個(gè)環(huán)境變數(shù), 或是用 -d 這個(gè)選項(xiàng)來(lái)指定.

* 簡(jiǎn)單的例子
- local cvs現(xiàn)在我正在寫(xiě) cvs 的文件, 我希望用 cvs 來(lái)維護(hù)這些文件.首先, 我定了一個(gè) cvs root, 當(dāng)然, 你得 mkdir

setenv CVSROOT "/home/clkao/cvsroot/"
cvs init

cvs init 會(huì)幫你把 cvsroot 初始化, 至於初始化哪些東西, 後面再說(shuō).

接著, 開(kāi)一個(gè)要放文件的目錄

mkdir /home/clkao/cvsroot/cvsdoc
cd /home/clkao/work
cvs checkout cvsdoc

你會(huì)看到下面的訊息:cvs checkout: Updating cvsdoc

cvs checkout 會(huì)把目前新的版本送到你現(xiàn)在的目錄下, 當(dāng)你下了上面的指令後, cvs 會(huì)幫你建立 cvsdoc 這個(gè)目錄.

記住, 不要自己 mkdir /home/clkao/work/cvsdoc, 每個(gè) cvs 工作目錄都還會(huì)有一些其他讓 cvs 參考的資訊.

接著, 進(jìn)入 cvsdoc 這個(gè)目錄, 編輯 cvs.doc 這個(gè)檔案, 寫(xiě)了這些有的沒(méi)有的.

cvs add cvs.txt
cvs commit -m "Initial revision."

cvs add 會(huì)把 cvs.txt 加入 cvs 在維護(hù)的 file list.cvs commit 會(huì)把現(xiàn)在目錄下所有的東西(cvs.txt) 送到 repository.

-m 表示這次 commit 的 log message.

現(xiàn)在修改一下 cvs.txt 吧, 像我現(xiàn)在又繼續(xù)編輯, 繼續(xù)把新的內(nèi)容加入 cvs.txt, 并且, 在檔案的上面加上 $Id$ 的字樣.改完之後, 再 commit 一次. (注意, 沒(méi)有 '' 喔, 這里 slash 的目的是避免 cvs 也把這邊的 Id 代換掉.

cvs commit -m "Adding new stuff."
cvs log cvs.txt

你會(huì)看到每次改的時(shí)候, 你加進(jìn)去的 message. 想想, 這對(duì)寫(xiě)程式,發(fā)展大的 project 的人來(lái)說(shuō), 是不是一個(gè)很棒的工具呢?

cvs diff -r 1.1 -r 1.2 cvs.txt

這樣會(huì)顯示 1.1 和 1.2 版的 diff, 原本有 1.1 版的人, 只需要用這個(gè) patch 可以了!

再編輯 cvs.txt, 有沒(méi)有發(fā)現(xiàn)上面的 Id 變長(zhǎng)了? 加了一代串文字,這顯示這個(gè)版本的一些相關(guān)資訊.

- remote cvs
可是, 我現(xiàn)在要做的是一個(gè)大的專(zhuān)案啊, 上面講的太小兒科了,而且我要讓好多人一起發(fā)展這個(gè)專(zhuān)案呢!

這里我舉現(xiàn)在正要進(jìn)行的 xcin-2.5 cvs 建立和使用的過(guò)程當(dāng)作例子.

su root檢查 /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/bin/cvs cvs -b /usr/bin --allow-root /export pserver

mkdir /export

adduser anoncvs, 這是要給 anonymous cvs 用的. group 為 nogroup.新加一個(gè) xcin 的 group.

adduser 參與 xcin 的帳號(hào), 當(dāng)然, 把他們的 group 設(shè)為 xcin

cvs -d /export init

cd /tmp/xcin-alpha, 這是原來(lái)已經(jīng)存在的版本, 現(xiàn)在要把它放進(jìn) cvs 里頭.
cvs import xcin-2.5 RXP XCIN_2_5_ALPHA

如此會(huì)把 xcin-alpha 下的東西 import 進(jìn) /export/xcin-2.5 了.後面的 RXP 是 vendor tag, XCIN_2_5_ALPHA

是 release tag, tag的用處很大, 不過(guò)我們後面再說(shuō).

注意, 一個(gè) user 要從遠(yuǎn)端 access 的檔案, 他必須再這里擁有適當(dāng)?shù)臋?quán)限.譬如說(shuō), /export/xcin-2.5 的 group 應(yīng)該是 xcin, 且 group writable(這是 cvs default).

現(xiàn)在試試看從遠(yuǎn)端存取 cvs 維護(hù)的檔案.

首先, 在你的機(jī)器上建立一個(gè)工作目錄, 譬如是 /home/clkao/work

cd /home/clkao/work
cvs -d "server:clkao@cirx.org:/export" login會(huì)出現(xiàn) prompt 問(wèn)你 password, 打進(jìn)去.

cirx.org 是 repository 所在的機(jī)器.當(dāng)你下了 cvs login 的指令後, 這組 cvsroot 和 encrypted passwd會(huì)被存在 ~/.cvspass 里頭.

cvs -d "server:clkao@cirx.org:/export" checkout xcin-2.5

這樣會(huì)把整套 cvs 所 maintain 的東西 checkout 出來(lái)在你的機(jī)器上.

cd xcin-2.5

東看看, 西看看, 發(fā)現(xiàn)了一個(gè) bug. 修改好了之後, commit 出去吧.

cvs commit -m "Minor bug fix."

cvs 會(huì)搜尋所有他 maintain 的 entry, 看看哪些需要 commit 的.

這樣大概有一個(gè) cvs 的雛形了! 更精的還在後頭呢!

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