您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源配置管理工具 > cvs
用CVS來(lái)管理自己的程序
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/2/17 16:10:58 ] 推薦標(biāo)簽:

  每個(gè)編寫(xiě)程序的人也許都有過(guò)這樣的體驗(yàn):對(duì)編寫(xiě)的程序作了一些修改,幾天以后,我們可能發(fā)現(xiàn)上次的修改導(dǎo)致了其它的矛盾,甚至編譯不能通過(guò),但這時(shí)我們卻很難找到自己剛在哪里作了改動(dòng)。一般說(shuō)來(lái),我們總是希望自己完整的記錄下一個(gè)程序開(kāi)發(fā)的過(guò)程,記錄下這個(gè)程序的每一點(diǎn)改進(jìn)和調(diào)整;蛟S我們可以用備份的方法來(lái)解決這個(gè)問(wèn)題,于是我們建立一個(gè)backup的目錄,定期或不定期的將自己的源程序打包放進(jìn)去,直到某整個(gè)硬盤(pán)都被這些文件撐滿(mǎn)。這當(dāng)然有些夸張,但這種機(jī)制帶給我們的不方便是顯而易見(jiàn)的。更進(jìn)一步,現(xiàn)在一個(gè)軟件產(chǎn)品的開(kāi)發(fā),一個(gè)人單槍匹馬很難完成。可能是包含幾個(gè)、幾十個(gè)乃至上百個(gè)程序員協(xié)作開(kāi)發(fā),這時(shí)的源代碼又該如何管理?解決問(wèn)題的方法是使用CVS。   CVS - Concurrent Versions System(并發(fā)版本管理系統(tǒng))是一個(gè)版本控制管理系統(tǒng),它是目前為廣泛使用的一個(gè)系統(tǒng)。從gftp到gtk到KDE,你幾乎可以在每一個(gè)你熟悉的自由軟件的源碼里看到它的蹤跡(下面我們會(huì)知道,它的蹤跡指一個(gè)稱(chēng)為cvs的子目錄)。同樣,你也可以在幾乎每一個(gè)Linux的發(fā)行版本里看到CVS系統(tǒng)?梢哉f(shuō),如果失去了CVS,現(xiàn)有的許多多人協(xié)作、自由開(kāi)發(fā)的軟件都會(huì)在一定程度上放慢自己發(fā)展的步伐。   CVS到底有哪些功能,使得它有如此強(qiáng)大的魅力呢?
  
  1.CVS能做什么?
  如上所說(shuō),CVS首先是一個(gè)版本管理系統(tǒng),它可以保留軟件開(kāi)發(fā)過(guò)程中的每一個(gè)版本的信息,包括誰(shuí)、在何時(shí)、作了什么樣的修改以及為什么作這樣的修改等。這個(gè)功能和以前流行于Linux和Unix的版本管理系統(tǒng)RCS(Revision Control System)和SCCS(Source Code Control System)很象。但CVS的功能遠(yuǎn)非僅此。它的大的特點(diǎn)是它的并發(fā)性,即它支持分布式項(xiàng)目的開(kāi)發(fā)。在互聯(lián)網(wǎng)席卷一切的,這個(gè)功能太為重要了。小到一個(gè)辦公室內(nèi)部開(kāi)發(fā)一個(gè)OA系統(tǒng),大到KDE小組利用互聯(lián)網(wǎng)開(kāi)發(fā)新版本的KDE,CVS都可以一展身手。一個(gè)程序員開(kāi)發(fā)出了自己負(fù)責(zé)模塊的新版本后,迅速的通過(guò)CVS讓開(kāi)發(fā)組的每一個(gè)成員都分享自己的新成果。甚至,CVS通過(guò)特定的機(jī)制允許多個(gè)程序員同時(shí)修改同一個(gè)源程序文件。   另外CVS增強(qiáng)的目錄結(jié)構(gòu)以及對(duì)二進(jìn)制文件良好的處理,都使得它遠(yuǎn)遠(yuǎn)優(yōu)于其它的版本管理系統(tǒng)。后,必須一提的是CVS是基于RCS開(kāi)發(fā)而成的。
  
  2.如何得到CVS?
  CVS在幾乎包含在所有的Linux發(fā)布版本中,如RedHat、Turbo Linux、Slackware以及國(guó)產(chǎn)的紅旗、Xteam Linux等。你可以試著敲一下cvs命令,大多數(shù)情況下都會(huì)出現(xiàn)以Usage: cvs開(kāi)頭的一堆信息,提示你如何使用cvs,這意味著在你的機(jī)器上早已有了CVS,只是遺憾的是它一直未被你發(fā)現(xiàn)和利用。運(yùn)氣不好的話(huà),你會(huì)看到形如cvs: Command not found.的提示,這意味著你的機(jī)器沒(méi)有安裝CVS。這時(shí)你有兩種選擇。一是找到你的Linux安裝盤(pán),從那里安裝CVS。例如在使用RPM方式安裝的Linux(上面介紹的幾個(gè)發(fā)布版本中似乎除了Slackware,其他都是)發(fā)布版本中,找到cvs***.rpm,用rpm命令進(jìn)行安裝。第二種方式是到一些站點(diǎn)cvs的源代碼,然后遵循里面附帶的指導(dǎo)進(jìn)行安裝,需要的讀者請(qǐng)?jiān)L問(wèn)站點(diǎn)http://www.cyclic.com/或者h(yuǎn)ttp://www.loria.fr/~molli/cvs-index.html。
  
  3.CVS的基本使用方法
  在這一節(jié)里,我們來(lái)學(xué)習(xí)掌握CVS的一些基本使用方法,F(xiàn)在我們假定已經(jīng)安裝好了CVS,并且我們打算用它來(lái)管理自己正在開(kāi)發(fā)的一個(gè)軟件,軟件名叫netants,它存放在硬盤(pán)上一個(gè)叫做netants的目錄里,目前里面有了文件netants.c、netants.h、http.c、http.h和Makefile。我們并沒(méi)有和它人協(xié)作開(kāi)發(fā)這個(gè)軟件,也沒(méi)有利用Internet或者Intranet來(lái)開(kāi)發(fā)這個(gè)軟件。或許,它只是自己的一個(gè)業(yè)余作品,試圖寫(xiě)出一個(gè)比Windows下的網(wǎng)絡(luò)螞蟻更好的下載工具出來(lái)。
  
  3.1 初始化CVS
  
  我們首先要使用的命令是cvs init,這個(gè)命令用來(lái)初始化CVS系統(tǒng)。正如我們所看到的,所有的CVS命令都以cvs開(kāi)頭,然后在后面緊跟命令、參數(shù)和一些選項(xiàng)。初始化CVS系統(tǒng)主要是為了創(chuàng)建一個(gè)為CVS所使用的源碼儲(chǔ)存庫(kù)(repository)。創(chuàng)建的時(shí)候,需要指定在那個(gè)目錄下創(chuàng)建這個(gè)源碼儲(chǔ)存庫(kù)。有兩種方法來(lái)指定目錄。一是利用"-d <目錄路徑>"選項(xiàng)來(lái)指定,例如:-d /usr/local/cvsroot。另一種更方便的方法是在shell里設(shè)定一個(gè)名叫CVSROOT的環(huán)境變量。使用csh或者tcsh的用戶(hù)可以使用命令setenv來(lái)設(shè)定,在文件 .csh rc或者文件 .tcshrc里添加入下的一行:
     setenv CVSROOT /usr/local/cvsroot
  使用sh或者bash的用戶(hù)需要在文件 .profile或者文件 .bashrc里添加如下兩行:
     CVSROOT=/usr/local/cvsroot
     export CVSROOT
  設(shè)置了環(huán)境變量CVSROOT后,我們運(yùn)行命令cvs init,CVS將在指定的目錄下面建立自己所需要的一些文件,以后我們使用CVS管理的任何項(xiàng)目,都會(huì)被CVS儲(chǔ)存在這個(gè)目錄之下。不過(guò)千萬(wàn)要注意的是:永遠(yuǎn)不要去試圖修改這個(gè)目錄下的文件。這個(gè)目錄是由CVS自己進(jìn)行管理的,輕率的改動(dòng)可能會(huì)導(dǎo)致你丟失你部分或全部的交由CVS管理的源代碼或其他資源。
  
  3.2 導(dǎo)入項(xiàng)目到CVS中去
  
  初始化結(jié)束以后,我們要真正開(kāi)始利用CVS來(lái)管理自己的程序網(wǎng)絡(luò)螞蟻了。第一步,我們將這個(gè)項(xiàng)目交由CVS管理。使用如下的CVS的import命令,將源程序?qū)氲紺VS的源碼儲(chǔ)存庫(kù)中去:
     cd netants
     cvs import -m "start my project: Netants" netants yoyo start
  這個(gè)命令看起來(lái)有些復(fù)雜,需要解釋一下。import是cvs的導(dǎo)入命令,默認(rèn)狀況下,它循環(huán)的將當(dāng)前目錄下的所有文件(包括子目錄)導(dǎo)入到源碼庫(kù)(即CVSROOT指定的目錄)里去。-m "start my project: Netants"告訴CVS你對(duì)這一步操作的說(shuō)明。這是CVS強(qiáng)制要求的,如果你沒(méi)有使用這種-m "字符串"的選項(xiàng),CVS將會(huì)彈出一個(gè)文本編輯器(如果自己不特別指定的話(huà),在Linux下一般是vi,而在Windows下則是Notepad),讓你輸入一些說(shuō)明信息它才罷休。netants是這個(gè)項(xiàng)目被CVS存儲(chǔ)時(shí)的路徑名,即CVS將在創(chuàng)建一個(gè)$CVSROOT/netants的目錄,并在此目錄下存放此項(xiàng)目的文件,當(dāng)然,它不是原封不動(dòng)的存儲(chǔ),CVS會(huì)做一番處理。后兩個(gè)字符串設(shè)定了兩個(gè)標(biāo)記(tag),現(xiàn)在并沒(méi)有什么用處,但它們同樣是CVS指定必需的,所以我們添上這兩個(gè)參數(shù)。執(zhí)行此命令時(shí),CVS自動(dòng)將所有的文件版本設(shè)為1.1,這是它所認(rèn)為的低版本。以下為執(zhí)行上述命令后的顯示信息: N netants/netants.c N netants/http.c N netants/http.h N netants/netants.h N netants/Makefile
  
  No conflicts created by this import N表示New,CVS成功的加載了這些文件,并沒(méi)有發(fā)現(xiàn)沖突。
  上面的命令稍長(zhǎng)了一些,而且顯得有些繁瑣,相信我,CVS不總是這樣的,這點(diǎn)"繁瑣"相對(duì)它給我們帶來(lái)的便利是完全可以忽略不計(jì)的。
  
  3.3 從CVS中導(dǎo)出項(xiàng)目
  
  好了,我們把自己的netants的項(xiàng)目交給了CVS去管理,現(xiàn)在,我們完全可以刪除原有的存儲(chǔ)我們代碼的netants目錄(當(dāng)然,安全起見(jiàn),你或許應(yīng)該再做一次備份,并希望是后一次)。我們要進(jìn)行開(kāi)發(fā)工作了,建一個(gè)目錄,叫什么呢,叫worktmp吧。我們進(jìn)到此目錄下,執(zhí)行命令cvs checkout netants,我們將會(huì)看到如下的信息: cvs checkout: Updating netants U netants/Makefile U netants/http.c U netants/http.h U netants/netants.c U netants/netants.h
  CVS在當(dāng)前目錄下建立一個(gè)叫做netants的目錄,我們?cè)鹊拇a文件都在這個(gè)目錄下出現(xiàn)了,而且還多了一個(gè)名為CVS的目錄。目錄CVS下面存放的是一些文本文件,記錄了CVSROOT的位置、此項(xiàng)目對(duì)應(yīng)源碼庫(kù)中那個(gè)目錄等一些信息。

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