CVS 是 Concurrent Version System(并行版本系統(tǒng))的縮寫(xiě),用于版本管理。如果大家曾經(jīng)參與過(guò)多人協(xié)作開(kāi)發(fā)的項(xiàng)目,大家肯定有這樣的痛苦經(jīng)歷:由于多個(gè)人同時(shí)修改同一個(gè)文件,自己辛辛苦苦修改的程序被別人徹底刪除了。另外,如果你的軟件/程序已經(jīng)發(fā)布了三個(gè)版本,而這時(shí)候用戶(hù)需要你修改第二個(gè)版本的東西,也許你會(huì)因?yàn)橹槐A袅诵掳姹径纯蘖魈。還有是你對(duì)程序做了一些修改,但是修改很少,你只想給遠(yuǎn)方的同事發(fā)一個(gè)兩個(gè)版本之間的差別文件,這樣可以免于郵箱不夠大,網(wǎng)速太慢之類(lèi)的問(wèn)題。為了解決類(lèi)似這樣的問(wèn)題,以及諸如生成補(bǔ)丁文件,歷史版本修改等,一幫黑客(褒義)在原先 Unix 體系里很成熟的 SCCS 和 RCS 的基礎(chǔ)上,開(kāi)發(fā)了 CVS.(SCCS:Source Code Control System,RCS:Revision Control System)
CVS 的基本工作思路是這樣的:在一臺(tái)服務(wù)器上建立一個(gè)倉(cāng)庫(kù),倉(cāng)庫(kù)里可以存放許多不同項(xiàng)目的源程序。由倉(cāng)庫(kù)管理員統(tǒng)一管理這些源程序。這樣,好象只有一個(gè)人在修改文件一樣。避免了沖突。每個(gè)用戶(hù)在使用倉(cāng)庫(kù)之前,首先要把倉(cāng)庫(kù)里的項(xiàng)目文件下載到本地。用戶(hù)做的任何修改首先都是在本地進(jìn)行,然后用 cvs 命令進(jìn)行提交,由 cvs 倉(cāng)庫(kù)管理員統(tǒng)一修改。這樣可以做到跟蹤文件變化,沖突控制等等。
由于 CVS 是典型的 C/S 結(jié)構(gòu)的軟件,因此它也分成服務(wù)器端和客戶(hù)端兩部分。不過(guò)大多數(shù) CVS 軟件都把它們合二為一了。
結(jié)合文檔和一些網(wǎng)上資源,我寫(xiě)一點(diǎn)非常簡(jiǎn)單的“速成”的教材.希望對(duì)大家有用.
下面是我的步驟和做法:
前提要求:
root 權(quán)限;
CVS軟件,請(qǐng)找到相關(guān)的rpm,tgz,deb 等包裝上,或者到
http://www.cvshome.org/CVS/Dev/code
下載原程序編譯安裝,這里我不準(zhǔn)備介紹它的安裝,請(qǐng)參考CVS自身的文檔安裝.我使用Slackware的tgz包,安裝的命令是
#installpkg cvs*.tgz
其他包請(qǐng)參考對(duì)應(yīng)包管理工具的命令.
一定的系統(tǒng)資源,要有一定內(nèi)存(32M能工作得很好),要一定的磁盤(pán)空間,看你的項(xiàng)目的大小和多少而定.
架設(shè)CVS服務(wù)器:
建立 CVSROOT 目錄,因?yàn)檫@里涉及到用戶(hù)對(duì)CVSROOT里的文件讀寫(xiě)的權(quán)限問(wèn)題,所以比較簡(jiǎn)單的方法是建立一個(gè)組,然后再建立一個(gè)屬于該組的帳戶(hù),而且以后有讀寫(xiě)權(quán)限的用戶(hù)都要屬于該組.假設(shè)我們建一個(gè)組叫cvs,用戶(hù)名是cvsroot.建組和用戶(hù)的命令如下
#groupadd cvs
#adduser cvsroot
生成的用戶(hù)家目錄在/home/cvsroot(根據(jù)自己的系統(tǒng)調(diào)整)
用 cvsroot 用戶(hù)登陸,修改 /home/cvsroot (CVSROOT)的權(quán)限,賦與同組人有讀寫(xiě)的權(quán)限:
$chmod 771 . (或者770應(yīng)該也可以)
注意:這一部分工作是按照文檔說(shuō)明做的,是否一定需要這樣沒(méi)有試驗(yàn),我會(huì)在做試驗(yàn)后在以后版本的教程說(shuō)得仔細(xì)一點(diǎn).如果您有這方面的經(jīng)驗(yàn)請(qǐng)?zhí)峁┙o我,謝謝.
建立CVS倉(cāng)庫(kù),(仍然是 cvsroot 用戶(hù)),用下面命令:
$cvs -d /home/cvsroot init
以root身份登陸,修改 /etc/inetd.conf(使用 xinetd 的系統(tǒng)沒(méi)有此文件)和 /etc/services,
如果用的是 inetd 的系統(tǒng),在 /etc/inetd.conf 里加入:
cvsserver stream tcp nowait root /usr/bin/cvs cvs -f --allow-root=/home/cvsroot pserver
說(shuō)明:上面的行是單獨(dú)一整行,/usr/bin/cvs 應(yīng)該是你的cvs版本的命令路徑,請(qǐng)根據(jù)自己的系統(tǒng)調(diào)整./home/cvsroot 是你建立的CVSROOT的路徑,也請(qǐng)根據(jù)上面建立目錄的部分的內(nèi)容做調(diào)整.
如果是使用 xinetd 的系統(tǒng),需要在 /etc/xinetd.d/ 目錄下創(chuàng)建文件 cvspserver(此名字可以自己定義),內(nèi)容如下:
# default: on
# description: The cvs server sessions;
service cvsserver
{
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/cvsroot pserver
log_on_failure += USERID
only_from = 192.168.0.0/24
}
其中only_from是用來(lái)限制訪問(wèn)的,可以根據(jù)實(shí)際情況不要或者修改。修改該文件權(quán)限:
# chmod 644 cvspserver
在/etc/services里加入:
cvsserver 2401/tcp
說(shuō)明:cvsserver 是任意的名稱(chēng),但是不能和已有的服務(wù)重名,也要和上面修改 /etc/inetd.conf 那行的第一項(xiàng)一致.這里我用的是 CVS 的口令認(rèn)證方式,CVS 還有其他認(rèn)證方式,我沒(méi)有做試驗(yàn),如果您有經(jīng)驗(yàn),請(qǐng)補(bǔ)充,謝謝.
添加可以使用 CVS 服務(wù)的用戶(hù)到 cvs 組:
以 root 身份修改 /etc/group,把需要使用 CVS 的用戶(hù)名加到 cvs 組里,比如我想讓用戶(hù) laser 和gumpwu 能夠使用 CVS 服務(wù),那么修改以后的 /etc/group 應(yīng)該有下面這樣一行:
cvs:x:105:laser,gumpwu
在你的系統(tǒng)上GID可能不是105,沒(méi)有關(guān)系.主要是要把laser和gumpwu用逗號(hào)分隔開(kāi)寫(xiě)在后一個(gè)冒號(hào)后面.當(dāng)然,象RedHat等分發(fā)版有類(lèi)似linuxconf這樣的工具的話,用工具做這件事會(huì)更簡(jiǎn)單些.
重起inetd使修改生效:
#killall -HUP inetd
如果使用的是 xinetd 的系統(tǒng):
# /etc/rc.d/init.d/xined restart
這樣服務(wù)器設(shè)置完成了.我們接著搞客戶(hù)端.