在Eclipse 2.0中使用版本控制系統(tǒng)CVS
董向輝 (xianghui.dong@mail.ia.ac.cn)
2002 年 7 月
2002年6月28日,Eclipse 2.0正式版已經(jīng)正式完成,這將是Java開發(fā)工具歷史上的一個重要事件,Eclipse開始步入成熟階段。本文借此機會介紹在Eclipse中使用版本控制系統(tǒng)CVS的一些經(jīng)驗和技巧。首先介紹為什么Eclipse要使用CVS來作為自己的版本控制系統(tǒng)而放棄了有著很好口碑的Visual Age Java的ENVY,然后簡要講述CVS系統(tǒng)的背景及NT平臺下CVS服務(wù)器的安裝和設(shè)置。接下來,針對Eclipse,詳細(xì)講解了使用CVS進行團隊開發(fā)時的開發(fā)流程以及在Eclipse中具體使用的重要操作方法。
背景
在Visual Age Java之后,IBM推出了新一代的開放源碼軟件開發(fā)平臺Eclipse,在此基礎(chǔ)上打造其核心產(chǎn)品WebSphere家族。而對于大部分個人開發(fā)者而言,Eclipse作為一個嶄新的Java集成開發(fā)環(huán)境提供了一個非常具有吸引力的選擇,已經(jīng)得到了越來越多開發(fā)者的關(guān)注和喜愛。
項目的版本控制對于團隊開發(fā)是極端重要的,對于個人開發(fā)者也是項目復(fù)雜化時不可缺少的工具。
在Visual Age Java中,由于Visual Age Java特有的項目數(shù)據(jù)存儲方式――所有的相關(guān)文件都存在一個二進制文件中,可以做到直接內(nèi)置的版本控制,這一系統(tǒng)也就是著名的ENVY,它在Visual Age Java的使用者中有著非常好的口碑。
而在Eclipse中,情況有了變化。ENVY把項目數(shù)據(jù)存儲在二進制文件中,也即所謂基于Repository的存儲,而幾乎所有其他集成開發(fā)環(huán)境的項目數(shù)據(jù)存儲方式都是基于文件的,項目的所有相關(guān)文件直接作為物理文件存儲在硬盤上。兩種方式各有利弊,有許多剛接觸Visual Age Java的用戶很不習(xí)慣ENVY,認(rèn)為看不見文件使得自己失去了直接感,反過來也有Visual Age Java的忠實用戶極力支持和贊揚ENVY。(不過作者認(rèn)為,在Visual Age Java中開發(fā)者至少可以幾乎完全不用花心思在文件路徑問題上,這個問題一般總是會耗費新手甚至老手的大量時間和精力。)在Eclipse中最終使用了基于文件的存儲方式,這樣增強了透明性和互操作性,但是要達(dá)到Visual Age Java以前做到的項目管理和源代碼控制就必須采用不同的方式。
Eclipse的內(nèi)置版本支持
Eclipse本身內(nèi)置了一定程度的版本支持,也就是所謂的Local History。在Eclipse中編輯的文件每次存盤都會留下記錄,可以隨時與歷史記錄比較,恢復(fù)到某一個時刻的狀態(tài)。在資源視圖(Resource Perspective)或者Java視圖(Java Perspective)中的文件上點右鍵,選擇Compare With,Local History,就會得到如下的畫面,可以很清晰看到各個版本的區(qū)別。
圖1:Eclipse中的內(nèi)置版本支持:Local History。
如果需要,則可以通過Replace With,Local History來恢復(fù)到任一個以前的版本。當(dāng)然,這樣版本的歷史是有限制的,可以在Eclipse的Preference中設(shè)置。在Preference―>Workbench->Local History中,可以設(shè)置保持最多保持幾天的文件,每一文件的版本數(shù)目,歷史文件的大小限制。
但是,這樣的版本系統(tǒng)只實現(xiàn)了最基本的版本功能,如果想把文件某一個狀態(tài)標(biāo)記為一個版本,加上注釋(僅僅從Local History中的保存時間很難看出每一個版本的特點,也難以找到重要的關(guān)鍵版本),或者想把某個目錄乃至整個項目版本化,Eclipse內(nèi)置的Local History都是無能為力的。
好在Eclipse基于開放的思想,采用了業(yè)界標(biāo)準(zhǔn)的版本控制系統(tǒng)CVS,這樣不僅很好地實現(xiàn)了版本控制的功能,對于已經(jīng)熟悉CVS的開發(fā)者來說也更容易使用,更重要的是,可以為團隊開發(fā)提供更加靈活和開放的選擇:項目的數(shù)據(jù)可以存儲在一個CVS服務(wù)器內(nèi),不同的開發(fā)者甚至可以采用不同的開發(fā)工具,只要這些工具都支持CVS。也許這時我們可以理解為什么Eclipse放棄了Visual Age Java的業(yè)已很成功的ENVY系統(tǒng),這一點很好地體現(xiàn)了Eclipse的開放性和對其他軟件的良好互操作性。
CVS
CVS是Concurrent Versions System(并發(fā)版本系統(tǒng))的縮寫,基于Unix體系中成熟的SCCS(Source Code Control System)和RCS(Revision Control System)開發(fā),是一個開放源碼的項目,目前已是版本控制系統(tǒng)的主流軟件。一個很常見的使用CVS的場合,就是開放源碼項目。由于開放源碼項目的開發(fā)者的分布性,對于版本管理的要求更加嚴(yán)格,而目前大部分的開放源碼項目幾乎都是采用CVS來管理源代碼,CVS的標(biāo)準(zhǔn)性和強大可見一斑。
CVS采用客戶機/服務(wù)器體系,代碼以及各種版本存儲在中心服務(wù)器內(nèi),每一個個體開發(fā)者開發(fā)時都首先從服務(wù)器上獲得一份自己的拷貝,在此基礎(chǔ)上進行開發(fā),以避免直接影響服務(wù)器上的數(shù)據(jù)。開發(fā)者可以隨時把自己的新代碼提交給服務(wù)器,并通過更新獲得代碼的最新狀態(tài),保持與其他開發(fā)者的一致。
CVS對于網(wǎng)絡(luò)是透明的,開發(fā)者可以使用客戶端軟件(幾乎所有的平臺上都有相應(yīng)的客戶端軟件)在任何時候,任何地點通過網(wǎng)絡(luò)來獲取最新的代碼。
對于Eclipse的開發(fā)者而言,Eclipse本身內(nèi)置了CVS支持,不需要使用其他客戶端軟件,只要建立一個CVS服務(wù)器,就可以使用這一強大的版本控制系統(tǒng)了。
CVS起源于Unix/Linux平臺,關(guān)于Unix/Linux平臺下的安裝使用的介紹文章很多,這里就不再重復(fù),讀者如果需要在Unix/Linux平臺下建立CVS服務(wù)器,可以參考本文附錄的相關(guān)資源。
在Windows平臺上也有CVS的一個實現(xiàn)――CVSNT,CVSNT的安裝有一定困難,這里我們做一個簡單介紹。 CVSNT的安裝
首先到CVSNT的主頁http://www.cvsnt.org下載最新版本,目前是CVSNT 1.11.1.3 (Build 57f)。
CVSNT的安裝有一些注意事項,請讀者盡量按照下面所說的步驟來進行安裝,描述主要針對Windows 2000。如果讀者在安裝過程中還有問題,可以參考本文附錄的資源中關(guān)于CVSNT的安裝技巧的文章或郵件列表。
- CVSNT可以安裝在Windows NT4 服務(wù)器或工作站SP6, Windows 2000服務(wù)器或?qū)I(yè)版,Windows XP專業(yè)版上。
- 以管理員賬號登陸,首先修改環(huán)境變量。直接執(zhí)行安裝程序,很有可能在最后會出現(xiàn)無法創(chuàng)建路徑變量的錯誤,為此我們首先修改環(huán)境變量,設(shè)定路徑。假設(shè)我們要把CVSNT安裝到D:appcvsnt目錄下(與CVSNT相關(guān)的內(nèi)容最好安裝到NTFS分區(qū)上,也盡量不要使用含有空格的目錄名或者文件名,雖然CVSNT已經(jīng)盡量支持包含空格的目錄名和文件名,但仍有可能出現(xiàn)問題),那么打開控制面板,系統(tǒng)屬性,高級,環(huán)境變量,系統(tǒng)變量中的Path,添加上D:appcvsnt并保存設(shè)置。
- 接下來可以執(zhí)行安裝程序,修改安裝目錄,一步步完成安裝。
- 從開始菜單的程序組中啟動CVSNT配置程序Configure Server。這時應(yīng)該看到服務(wù)器還沒有運行(CVSNT作為系統(tǒng)服務(wù)運行),如果已經(jīng)運行了,先把它停下來。
- 選擇第二個選項卡Repositories,首先勾上Repositories prefix(數(shù)據(jù)庫路徑前綴)的選項。CVSNT中只有一個數(shù)據(jù)庫路徑前綴,在這同一個前綴下,可以有多個數(shù)據(jù)庫。相應(yīng)的,所有的數(shù)據(jù)庫都位于數(shù)據(jù)庫路徑前綴對應(yīng)的目錄之下。這里我們假設(shè)數(shù)據(jù)庫都存儲在E:workcvsrepo下,點擊省略號按鈕來選擇E:workcvsrepo作為數(shù)據(jù)庫路徑前綴。
- 點擊下面的Add按鈕添加數(shù)據(jù)庫根,可以有多個。比如我們將/work作為我們的工作項目的存儲根。注意添加時系統(tǒng)自動把已設(shè)定的E:workcvsrepo作為了路徑前綴。
- 選擇第三個選項卡Advanced,勾上全部選項,包括Use local users instead of domain。設(shè)置臨時目錄,假設(shè)為E:workcvstemp。注意要保證臨時目錄的安全設(shè)置(右鍵點擊目錄屬性,共享,權(quán)限)給所有賬號以完全控制權(quán)限,包括SYSTEM賬號。并且,絕對不能把臨時目錄設(shè)在諸如C:WINNTTEMP或者C:Documents and Settings下的任何地方,因為這些地方對于用戶的訪問是有限制的。
- 點擊應(yīng)用以保存設(shè)置,這一點相當(dāng)重要。
- 現(xiàn)在可以回到第一個選項卡,點擊Start按鈕,服務(wù)應(yīng)該正常啟動運行了。如果有問題,可以打開一個命令行窗口,輸入path命令來檢查路徑是否已經(jīng)設(shè)置正確,也許需要重新啟動來使設(shè)置生效。
- 打開一個命令行窗口,輸入如下命令,用你的實際計算機名和用戶名替代尖括號內(nèi)的內(nèi)容,注意對于NT Server,不能用localhost作為計算機名,必須使用實際計算機名:
set cvsroot=:ntserver:<計算機名>:/work
這一命令通過設(shè)定cvsroot這一環(huán)境變量,設(shè)定/work為目前的cvs數(shù)據(jù)庫根。這里使用ntserver模式,這一模式比較適合服務(wù)器就在本地的情形。它要求局域網(wǎng)或者域內(nèi)所有機器的用戶賬號相同,客戶端使用Windows NT,Windows 2000或者Windows XP。pserver模式是缺省的,除非關(guān)掉2401端口,下面我們的Eclipse就是使用pserver模式。
cvs passwd -a <你的NT用戶名>
這一命令設(shè)定CVS中的用戶名和密碼,輸入后將提示你輸入密碼。
注意如果需要CVS 服務(wù)器同時以ntserver和pserver模式運行,那么密碼最好不要和系統(tǒng)中用戶的真實密碼相同以保證安全。
這里的用戶必須是服務(wù)器上的真實用戶,不過可以給真實用戶設(shè)定一個不同的使用名alias。使用命令:
cvs passwd -a -r <你的NT用戶名>
必須注意,這些名字里最好不要使用任何空格。如果必須的話,可以用雙引號括起來。
- 到此為止,CVS服務(wù)器已經(jīng)初步設(shè)置完成,可以使用了。缺省情況下,服務(wù)器將作為NT服務(wù)自動運行。讀者既可以使用命令行的CVS命令,也可以使用各種CVS客戶端來連接CVS服務(wù)器,執(zhí)行CVS操作。不過,下面我們主要介紹在Eclipse中通過內(nèi)置的CVS支持來使用CVS系統(tǒng)。
在Eclipse中使用CVS系統(tǒng)
前面已經(jīng)提到,CVS的數(shù)據(jù)存放在服務(wù)器的數(shù)據(jù)庫中。為了支持Concurrent這一并發(fā)特點,CVS使用了一個分枝(Branch)模型,以保證不同開發(fā)者的相對獨立,但是又高度集成。分枝可以看成一個開發(fā)團隊共享的工作區(qū)(Workspace),在CVS數(shù)據(jù)庫中,有一個特殊的分枝稱為HEAD,代表主要工作流。
開發(fā)者可以提交(Commit)自己的工作,并通過更新(Update)與其他人的最新修改保持同步。提交是把自己的修改提交給數(shù)據(jù)庫,稱為輸出(Outgoing),更新則是得到其他人的修改,稱為輸入(Incoming)。每次提交之前,都應(yīng)該先更新,以保持與最新狀態(tài)同步。
因此,在Eclipse中使用CVS進行團隊開發(fā),理想的開發(fā)流程應(yīng)該是這樣的(具體操作方法隨后介紹):
圖2:團隊開發(fā)流程
- 從最新狀態(tài)開始。開始工作前,要保證所有資源與最新的分枝狀態(tài)一致。對于從頭開始的新項目,首先要連接服務(wù)器,設(shè)定存儲那些資源文件。對于在服務(wù)器數(shù)據(jù)庫中已經(jīng)有記錄的項目,首先要通過更新來保證資源狀態(tài)最新。如果本地的工作沒有需要特別保存的,可以直接把數(shù)據(jù)庫中的最新版本Check Out As Project,或者Replace With,Latest from Repository。
- 進行本地工作,保存修改。
- 同步。當(dāng)做好提交工作的準(zhǔn)備后,要和服務(wù)器數(shù)據(jù)庫同步。
- 首先應(yīng)該更新(Update),檢查所有的Incoming改變,輸入到本地,看是否會影響自己的工作,是否會造成沖突,破壞完整性等等。
- 檢查完更新后,可以確認(rèn)自己的工作和最新的Branch內(nèi)容是一致的,就可以提交(Commit)自己的修改了,標(biāo)上適當(dāng)?shù)淖⑨尅?
下面介紹這一開發(fā)流程所用到的主要操作。
對于一個新的項目而言,首先需要做的就是設(shè)置Eclipse來連接CVS服務(wù)器。首次連接將與服務(wù)器同步(Synchronize)。
首先在Eclipse的資源視圖(Resource Perspective)或者Java視圖(Java Perspective)中的項目上點右鍵,選擇Team,Share Project,將出現(xiàn)提示窗口,選擇是使用已知的CVS數(shù)據(jù)庫位置還是新建數(shù)據(jù)庫位置。對于第一次連接CVS服務(wù)器的情況,將需要首先定義連接所需的服務(wù)器參數(shù)和路徑,用戶名,密碼等等。這些參數(shù)將得到保存,以后如果需要重新連接,就可以直接使用已知的CVS數(shù)據(jù)庫設(shè)置。
這里我們選擇新建一個數(shù)據(jù)庫位置,進入下一個輸入畫面。
這里的主機名(Host)可以輸入localhost(在Windows NT 4下不可以這樣輸入),因為我們的CVS服務(wù)器就在本機上。
接下來輸入/work,設(shè)定我們的項目數(shù)據(jù)存放在這一數(shù)據(jù)庫根路徑下。
然后輸入用戶名和密碼。
連接類型選擇pserver,端口是缺省的不用改動。當(dāng)然,如果你修改過CVS服務(wù)器使用的端口,這里就要保持一致。
圖3:在Eclipse中設(shè)置使用CVS系統(tǒng)
接下來可以直接點擊Finish完成設(shè)置。如果點擊下一步,可以繼續(xù)定義在CVS中是否使用與項目名不同的名字作為模塊名,缺省是使用相同的名字。
現(xiàn)在我們完成了項目與CVS服務(wù)器的連接,項目已經(jīng)和CVS服務(wù)器同步了。
但是這并不意味著CVS已經(jīng)開始記錄版本信息。因為在一個項目中可能有相當(dāng)一部分資源文件不適合存儲到數(shù)據(jù)庫中記錄版本信息,比如編輯器生成的臨時文件,編譯生成的.class文件,或者某些編譯過程生成的二進制文件等等。因此,Eclipse并不自動把所有文件存儲到數(shù)據(jù)庫中,需要開發(fā)者手工指定把那些文件存儲到數(shù)據(jù)庫中,也就是加入版本控制add to version control。對于單個文件的指定,可以隨時在資源視圖(Resource Perspective)或者Java視圖(Java Perspective)中的文件上使用右鍵,選擇Team,Add to Version Control。如果需要存儲整個項目或者同時指定多個文件,則要使用同步(Synchronize)視圖。
注意項目與CVS服務(wù)器連接完成并同步后,在Eclipse右下角的Tasks和Console的位置新出現(xiàn)了一個Synchronize窗口,下方狀態(tài)欄也顯示了這次同步的狀態(tài)信息。雙擊Synchronize窗口的標(biāo)題欄使之最大化,我們可以看到窗口上半部分列出了所有尚未指定加入數(shù)據(jù)庫的資源和文件。在這里我們可以同時選擇多個文件,甚至選擇整個項目,使用右鍵,選擇Team,Add to Version Control,就可以把多個文件或者整個項目加入到數(shù)據(jù)庫中,開始記錄其版本信息。
我們可以看到,這時的同步視圖上標(biāo)明了處于Outgoing模式。同步(Synchronize)視圖有Incoming模式和Outgoing模式,對應(yīng)于提交(Commit)和更新(Update)操作,表示目前修改是來自本地還是來自服務(wù)器。當(dāng)然,視圖也可以同時顯示Incoming和Outgoing方向的變化。當(dāng)有變化時,在下半部分的比較窗口可以顯示不同版本之間的差異和變化。進一步地,可以通過工具條上的合并(Merge)操作來消除對同一文件不同修改所帶來的沖突。
在此之后,當(dāng)完成對文件或者項目的修改,需要確認(rèn)修改,把最新的狀態(tài)存儲到數(shù)據(jù)庫中去,就需要執(zhí)行提交(commit)操作。類似的,我們可以在資源視圖(Resource Perspective)或者Java視圖(Java Perspective)中的文件上使用右鍵,選擇Team,Commit;或者在同步(Synchronize)視圖中同時提交多個文件乃至整個項目。注意,每次提交時都會提示輸入注釋,這是很重要的,作為每一個狀態(tài)的說明和提示。
當(dāng)我們需要把文件或者項目的不同版本進行比較或者替換時,可以在資源視圖(Resource Perspective)或者Java視圖(Java Perspective)中的文件上使用右鍵,選擇Team,Compare With或者Team,Replace With來完成。進行比較時將打開一個比較編輯器,很好地表示不同版本之間的差異,和Local History類似。
如果要了解CVS數(shù)據(jù)庫的內(nèi)容情況,可以使用CVS數(shù)據(jù)庫瀏覽視圖(CVS Repository Exploring Perspective)。我們可以點擊Eclipse左上角的開啟視圖(Open Perspective)按鈕,增加這一視圖到左邊的視圖瀏覽欄里。前面已經(jīng)提到,HEAD代表CVS數(shù)據(jù)庫里的主流內(nèi)容。展開Versions,可以看到以往的版本。另外,在右下角有數(shù)據(jù)庫的歷史記錄標(biāo)明每次修改的相關(guān)信息。
如果需要導(dǎo)出某一版本,就要用到Check Out操作。在某一版本上右鍵選擇Check Out As Project,這將把這一版本導(dǎo)出為同名的項目,從而可以覆蓋已有的狀態(tài),或者選擇Check Out對話框來導(dǎo)出為其他項目。
圖4:CVS數(shù)據(jù)庫瀏覽視圖
關(guān)于更詳細(xì)的CVS使用方法和技巧,可以參考Eclipse的幫助中相關(guān)內(nèi)容。
關(guān)于作者:
董向輝,1998年畢業(yè)于清華大學(xué),隨后進入中科院自動化所人工智能實驗室直接攻博??蒲信d趣主要在演化計算和系統(tǒng)復(fù)雜性問題,技術(shù)方面,從接觸Java開始,便一直保持著對Java的興趣并作為主要編程語言。同時注意關(guān)心新出現(xiàn)的有前景的相關(guān)技術(shù),聚焦點先后包括軟件工程,XML,J2ME等等。電子郵件地址:xianghui.dong@mail.ia.ac.cn。
相關(guān)資源:
關(guān)于CVS:
http://www.cvshome.org,CVS官方網(wǎng)站,可以從這里下載最新版本的CVS(Unix/Linux平臺版本)以及相關(guān)的文檔和資料,例如Per Cederqvist的Version Management with CVS 這本官方手冊。
http://laser.zhengmai.com.cn/cvstutorials.html,一個中文的CVS簡單教程。
http://www.cvsnt.org,CVSNT,在Windows NT上的CVS服務(wù)器,在此基礎(chǔ)上也有返回Unix/Linux平臺的版本。目前最新版本是CVSNT 1.11.1.3 (Build 57f)。
http://www.cvsnt.org/mailman/listinfo/cvsnt,關(guān)于CVSNT的使用問題的郵件列表。
http://w1.858.telia.com/~u85831169/InstallCVSNT.html,關(guān)于CVSNT安裝的一些技巧和知識,感謝作者慷慨的準(zhǔn)許,本文參考了其中部分內(nèi)容。
http://devguy.com/cvsnt,另一個CVSNT安裝問題的幫助和常見問題回答。
http://www.cvsgui.org,Windows平臺下的圖形化CVS客戶端軟件。
關(guān)于Eclipse:
http://www.eclipse.org,Eclipse官方網(wǎng)站,可以從這里下載最新版本2.0。
http://www-900.ibm.com/developerWorks/cn/java/l-ide/part2/index.shtml,VAJ之后是什么?,介紹從Visual Age Java到Eclipse,WSWB等等的來龍去脈以及各自的特點。
http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/platform-vcm-home/docs/online/cvs_features2.0/cvs-faq.html,在Eclipse中使用CVS的常見問題回答。更詳細(xì)的具體操作介紹,可以參考Eclipse軟件所附帶的幫助。
http://www-900.ibm.com/developerWorks/cn/java/l-cvs/index.shtml
安裝和使用CVS |
日期:2005年6月22日 作者:非常下載 人氣: |
簡介
CVS 是 Concurrent Version System(并行版本系統(tǒng))的縮寫,用于版本管理.如果大家曾經(jīng)參與過多人協(xié)作開發(fā)的項目,大家肯定有這樣的痛苦經(jīng)歷:由于多個人同時修改同一個文件, 自己辛辛苦苦修改的程序被別人徹底刪除了.另外,如果你的軟件/程序已經(jīng)發(fā)布了三個版本, 而這時候用戶需要你修改第二個版本的東西,也許你會因為只保留了最新版本而痛哭流涕。還有就是你對程序做了一些修改,但是修改很少,你只想給遠(yuǎn)方的同事發(fā)一個兩個版本之間的差別文件,這樣可以免于郵箱不夠大,網(wǎng)速太慢之類的問題.為了解決類似這樣的問題,以及諸如生成補丁文件,歷史版本修改等,一幫黑客(褒義)在原先 Unix 體系里很成熟的 SCCS 和 RCS 的基礎(chǔ)上,開發(fā)了 CVS。(SCCS:Source Code Control System,RCS:Revision Control System)。
CVS 的基本工作思路是這樣的:在一臺服務(wù)器上建立一個倉庫,倉庫里可以存放許多不同項目的源程序。由倉庫管理員統(tǒng)一管理這些源程序.這樣,就好象只有一個人在修改文件一樣.避免了沖突.每個用戶在使用倉庫之前,首先要把倉庫里的項目文件下載到本地。用戶做的任何修改首先都是在本地進行,然后用 cvs 命令進行提交,由 cvs 倉庫管理員統(tǒng)一 修改.這樣就可以做到跟蹤文件變化,沖突控制等等.
由于 CVS 是典型的 C/S 結(jié)構(gòu)的軟件,因此它也分成服務(wù)器端和客戶端兩部分。不過大多數(shù)CVS 軟件都把它們合二為一了。我們這里就分別從服務(wù)器和客戶端的角度討論cvs的使用。
Cvs服務(wù)器安裝
首先確保系統(tǒng)安裝有cvs:
[root@mail xinetd.d]# rpm -qa|grep cvs
cvs-1.11.1p1-3
如果命令輸出類似于上面的輸出則說明系統(tǒng)已經(jīng)安裝有cvs,否則就需要從安裝光盤中安裝cvs的rpm包。
一 創(chuàng)建CVS屬主用戶:
# useradd -d /cvsroot cvs
# chmod 771 /cv sroot
二、建立CVS倉庫(初始化cvs)
# su cvs
$ cvs -d /cvsroot init
$exit
#
四、啟動cvs服務(wù)器
在/etc/xinetd.d/目錄下創(chuàng)建文件cvspserver,內(nèi)容如下:
# default: on
# description: The cvs server sessions;
service cvspserver
{
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是用來限制訪問的,可以根據(jù)實際情況不要或者修改。
修改該文件權(quán)限:
# chmod 644 cvspserver
然后重新啟動xinetd:
# /etc/rc.d/init.d/xined restart
然后察看cvs服務(wù)器是否已經(jīng)運行:
[root@mail xinetd.d]# netstat -lnp|grep 2401
tcp 0 0 0.0.0.0:2401 0.0.0.0:* LISTEN 7866/xinetd
則說明cvs服務(wù)器已經(jīng)運行。
五、創(chuàng)建用來訪問cvs的用戶
前面創(chuàng)建的cvs用戶是cvs倉庫管理用戶,而為了讓用戶訪問則還需要一個訪問用戶:
# useradd cvspub
# usemod -G cvs cvspub
這里添加了一個用戶cvspub,并且將該用戶添加到cvs組中。
六、管理cvs服務(wù)器
管理 cvs 服務(wù)器.服務(wù)器可以用了,現(xiàn)在大家最關(guān)心的就是如何管理服務(wù)器,比如,我想讓一些人有讀和/或?qū)?CVS 倉庫的權(quán)限,但是不想給它系統(tǒng)權(quán)限怎么辦呢?不難,cvs初始化結(jié)束以后,在管理員用戶(這里是cvs用戶)的主目錄里有一個 CVSROOT 目錄,這個目錄里有三個配置文件:passwd, readers, writers。我們可以通過設(shè)置這三個文件來配置 CVS 服務(wù)器,下面分別介紹這幾個文件的作用:
passwd:cvs 用戶的用戶列表文件,它的格式很象 shadow 文件:
{cvs 用戶名}:[加密的口令]:[等效系統(tǒng)用戶名]
如果你希望一個用戶只是 cvs 用戶,而不是系統(tǒng)用戶,那么你就要設(shè)置這個文件,剛剛安裝完之后這個文件可能不存在,你需要以cvs管理員身份(su cvs)用戶手工創(chuàng)建,當(dāng)然要按照上面格式;
第二個字段是該用戶的加密口令,就是用 crypt (3) 加密的,你可以自己寫一個程序來做加密,也可以用兩個偷懶的方法:先創(chuàng)建一個系統(tǒng)用戶,名字和 cvs 用戶一樣,口令就是準(zhǔn)備給它的 cvs 用戶口令,創(chuàng)建完之后從 /etc/shadow 把該用戶第二個字段拷貝過來,然后 再把這個用戶刪除.這個方法對付數(shù)量少的用戶比較方便,人一多就不合適了,而且還有沖突條件(race condition)的安全隱患,還要 root 權(quán)限,實在不怎么樣,不過權(quán)益之計而已;另外一個方法就是利用apche的htpasswd命令創(chuàng)建passwd用戶,添加用戶只需要htpasswd passwd username即可添加用戶到passwd文件中,不過需要在文件中對應(yīng)行的最后添加一個":"冒號和對應(yīng)的等效系統(tǒng)用戶名;最好的就是自己編寫一個程序了來生成這個passwd文件了。
第三個字段就是等效系統(tǒng)用戶名,實際上就是賦與一個 cvs 用戶一個等效的系統(tǒng)用戶的權(quán)限,看下面的例子你就明白它的功能了。
readers:有 cvs 讀權(quán)限的用戶列表文件,就是一個一維列表。在這個文件中的用戶對 cvs
只有讀權(quán)限。
writers:有 cvs 寫權(quán)限的用戶的列表文件,和 readers 一樣,是一個一維列表。在這個文件中的用戶對 cvs 有寫權(quán)限。
上面三個文件在缺省安裝的時候可能都不存在,需要我們自己創(chuàng)建,好吧,現(xiàn)在還是讓我們用一個例子來教學(xué)吧.假設(shè)我們有下面幾個用戶需要使用 cvs:
cvsuser1, cvsuser2, henry, betty, anonymous
其中 laser 和 gumpwu 是系統(tǒng)用戶,而henry, betty, anonymous 我們都不想給系統(tǒng)用戶權(quán)限,并且 betty 和 anonymous 都是只讀用戶,而且 anonymous 更是連口令都沒有。
然后編輯 cvs 管理員家目錄里 CVSROOT/passwd 文件,加入下面幾行:
laser:$xxefajfka;faffa33:cvspub
gumpwu:$ajfaal;323r0ofeeanv:cvspub
henry:$fajkdpaieje:cvspub
betty:fjkal;ffjieinfn/:cvspub
anonymous::cvspub
注意:上面的第二個字段(分隔符為 :)是密文口令,你要用程序或者用我的土辦法生成。
編輯 readers 文件,加入下面幾行:
anonymous
betty
編輯 writer 文件,加入下面幾行:
laser
gumpwu
henry
這樣就 ok 了,你再用幾個用戶分別登陸測試,就會發(fā)現(xiàn)一切都 ok 了。這里面的原理和說明我想就不多說了,其實很簡單,和系統(tǒng)管理用戶的概念是一樣的。
七、建立新的CVS項目
一般我們都已經(jīng)有一個或多個項目了,這樣我們可以用下面步驟生成一個新的CVS項目。
將一個工程文件置于CVs中進行版本控制,在CVS 術(shù)語中稱作導(dǎo)入(import)。從名字上就可以看出,在導(dǎo)入前需要為此作些準(zhǔn)備工作。
輸入操作的基本要求是有個"干凈"的目錄結(jié)構(gòu)。"干凈"的意思是不需要版本控制的文件都被移走了(如編譯生成的文件,備份文件等等)。如果工程已經(jīng)開始一段時間了,這就顯得很重要。在目錄中也許有些是不打算將其置于版本控制下的文件,但是又想將他們放在這里,這種情況下,你要在輸入之前將它們移走,然后再移回來。
注意的是CVS 認(rèn)為空目錄是不存在的。如果想增加一個既不包含文件又不包含子目錄的目錄,需要在其下創(chuàng)建一個啞文件。建議你創(chuàng)建一個名為 README.txt 的文件,其內(nèi)容為對目錄的簡要說明。
進入到已有項目的目錄,比如叫 cvstest:
$cd cvstest
運行命令將項目文件導(dǎo)入到cvs倉庫中:
$cvs import -m "this is a cvstest project" cvstest v_0_0_1 start
說明:import 是cvs的命令之一,表示向cvs倉庫輸入項目文件.
-m參數(shù)后面的字串是描述文本,對項目進行描述,如果不加 -m 參數(shù),那么cvs會自動運行一個編輯器(一般是vi,但是可以通過修改環(huán)境變量EDITOR來改成你喜歡用的編輯器)讓你輸入信息,cvstest 是項目名稱(實際上是倉庫名,在CVS服務(wù)器上會存儲在以這個名字命名的倉庫里)
v_0_0_1是這個分支的總標(biāo)記.沒啥用(或曰不常用)
start 是每次 import 標(biāo)識文件的輸入層次的標(biāo)記,沒啥用。
這樣我們就建立了一個CVS倉庫了,然后,我們可以把這個測試項目的文件刪除,試驗如何從倉庫獲取文件這會在后面的客戶端文章進行說明。
在Win2k上安裝和使用CVS
1.準(zhǔn)備有關(guān)軟件:
從 www.cvsnt.org 下載服務(wù)器 cvs-1.10.8NT.exe.zip
從 www.wincvs.org 下載客戶端 WinCvs11b16.zip
用winzip把cvs-1.10.8NT.exe.zip解壓到d:cvs。
解壓并安裝wincvs.
2.把路徑 d:cvs 加到path環(huán)境變量中。
具體方法:點選"我的電腦",單擊右鍵,選屬性,點環(huán)境變量按鈕。
3.建立CVS存儲目錄。
打開一個dos窗口,鍵入"cvs -d :local:d:cvsroot init",然后你會發(fā)現(xiàn)d:cvs下面多了一個root子目錄。
4.注冊CVS服務(wù)
在dos窗口中,鍵入"ntservice -i d:cvsroot",屏幕顯示"CVS NT Service Installed successfully",打開控制面板中的服務(wù),你會發(fā)現(xiàn)多了一個"CVS NT Service"服務(wù)
用"net start cvs"啟動cvs服務(wù)。 用"net stop cvs"關(guān)閉cvs服務(wù)。
5.設(shè)置密碼
新建一個空白的passwd文件,放到d:cvsrootcvsroot目錄下。用pwgen.exe生成密碼。把用戶名和密碼寫到passwd文件,例如:test:OuIgxgsUZH48g
6.使用wincvs
選Admin->Perferences,設(shè)CVSROOT為":pserver:test@server:d:cvsroot",server為作為服務(wù)器的計算機的名稱。test為用戶名。
7.登陸
選Admin->login,輸入密碼登陸。
8.導(dǎo)入模塊
假設(shè)要管理的代碼已經(jīng)存在于c:source目錄,選彈出菜單上的import module,選擇目錄c:source,輸入模塊名"test",wincvs就會把該目錄導(dǎo)入到模塊test中。
9.導(dǎo)出模塊
選Create->checkout module,輸入模塊名和相應(yīng)的目錄就可以了。
10。修改文件
選中要修改的文件,點修改鈕(筆圖標(biāo))。然后修改文件,最后選彈出菜單上的commit selection,修改就被提交了。
CVS NT服務(wù)器安裝指南
下載地址:http://www.cvsnt.org
運行 cvsnt_1.11.1.2.exe
點兩次“Next”跳過“Welcome”界面開始安裝
點“Yes”接受License
點“Next”用默認(rèn)的Typical安裝
選“Yes”并點“Finish”,重新啟動
到桌面,在“我的電腦”按右鍵,點“屬性”
點“高級”,點“環(huán)境變量”
選擇“系統(tǒng)變量”中的Path,點“編輯”
在變量值后加“;C:Program FilesCVS for NT”(引號不要加入)
點“確定”
再“確定”
進入控制面板,雙擊“CVS for NT”
點“Install”安裝CVSNT服務(wù)
Install按鈕會變無效,Uninstall變有效
點“Add”,輸入“d:cvsroot”,點“OK”
會提問是否創(chuàng)建目錄,回答“是”
點“Start”啟動CVSNT服務(wù)
在d:cvsrootCVSROOT目錄下創(chuàng)建一個文件名為passwd的文件(沒有擴展名)
(怎么創(chuàng)建沒有擴展名的文件:
點資源管理器菜單“工具”->“文件夾選項”
點“文件類型”
找到并選中“TXT 文本文檔”,點“高級”
選中“始終顯示擴展名”,點“確定”,然后“關(guān)閉”)
在d:cvsrootCVSRTOO下新建文本文件
編輯該文件,把下面三行
user1:user1encryptedpassword (加密密碼是用CVSNT帶的工具“Generate Passwords”生成的,安裝后菜單里有)
user2:user2encryptedpassword
user3:user3encryptedpassword
加入,保存退出,然后把該文件改名為passwd(把擴展名去掉)
加3個windows用戶
user1密碼同上面設(shè)的
user2密碼同上面設(shè)的
user3密碼同上面設(shè)的
安裝wincvs(下載地址:http://www.cvsgui.org)后運行wincvs
點“Admin”->Preferences
CVSROOT 改為 user1@myservername:d:cvsroot
Authentication 選擇 "passwd" file on the cvs server
Use vesion 選擇 cvs 1.10 (Standard)
然后“Admin”->“Login”,成功的返回碼為0
然后可以Import一個module
然后可以checkout這個module,如果checkout到同一個目錄,要把原來的目錄改名或刪除
點Create->Checkout module
module name 填 mymodulename
Local folder如 d:user1
在Globals頁里面把 Checkout read-only 不選中
其它的不管,點“確定”即可
checkout之前如果沒有l(wèi)ogin,必須先login一次,除非工作目錄,否則不需要重新login