CVS 是 Concurrent Version System(并行版本系統(tǒng))的縮寫,用于版本管理.如果大家曾經(jīng)參與過多人協(xié)作開發(fā)的項目,大家肯定有這樣的痛苦經(jīng)歷:由于多個人同時修改同一個文件, 自己辛辛苦苦修改的程序被別人徹底刪除了.另外,如果你的軟件/程序已經(jīng)發(fā)布了三個版本,而這時候用戶需要你修改第二個版本的東西,也許你會因為只保留了 最新版本而痛哭流涕。還有就是你對程序做了一些修改,但是修改很少,你只想給遠方的同事發(fā)一個兩個版本之間的差別文件,這樣可以免于郵箱不夠大,網(wǎng)速太慢 之類的問題.為了解決類似這樣的問題,以及諸如生成補丁文件,歷史版本修改等,一幫黑客(褒義)在原先 Unix 體系里很成熟的 SCCS 和 RCS 的基礎上,開發(fā)了 CVS。(SCCS:Source Code Control System,RCS:Revision Control System)。
我們知道,CVS是使用“客戶端/服務器”(Client/Server)模式來工作的,這也是優(yōu)秀版本控制系統(tǒng)的發(fā)展趨勢。那么我們首先要有一臺CVS 服務器(當然這臺電腦也可以同時作為客戶端來使用)。本節(jié)所要介紹的就是如何利用CVSNT架設一臺windows操作系統(tǒng)環(huán)境下的CVS服務器。 CVSNT顧名思義,肯定是用在windows上的,此軟件可以從www.CVSNT.org免費下載最新版本。
CVS 的基本工作思路是這樣的:在一臺服務器上建立一個倉庫,倉庫里可以存放許多不同項目的源程序。由倉庫管理員統(tǒng)一管理這些源程序.這樣,就好象只有一個人在 修改文件一樣.避免了沖突.每個用戶在使用倉庫之前,首先要把倉庫里的項目文件下載到本地。用戶做的任何修改首先都是在本地進行,然后用 cvs 命令進行提交,由 cvs 倉庫管理員統(tǒng)一 修改.這樣就可以做到跟蹤文件變化,沖突控制等等。
軟件安裝
1、 目的:用CVSNT作為CVS服務器,用TortoiseCVS或WinCVS或Eclipse3.4.2作為CVS的客戶端。2、 CVSNT+TortoiseCVS軟件的安裝
先安裝CVSNT,再安裝TortoiseCVS。默認安裝即可。
3、Eclipse自帶客戶端
4、WinCVS默認安裝即可
CVSNT服務器端的配置
1、 打開CVSNT的控制面板,運行開始菜單CVSNT菜單文件夾里的“CVSNT Control Panel”即可。確保CVSNT的兩個服務啟動正常,單擊選項卡“Repository configuration”(倉庫配置)。CVS倉庫是代碼的每個版本和所有相關記錄在服務器端的儲存地。有些時候又稱它為主拷貝(Master Copy)。在創(chuàng)建CVS倉庫之前,我們首先需要新建一個文件夾用于充當倉庫,如創(chuàng)建倉庫文件夾 I:\mycvsdata。該文件夾最好不要與程序放在一起,以免萬一系統(tǒng)崩潰時破壞數(shù)據(jù)。2、服務器配置, 單擊“Server Settings(服務器配置)”選項卡,保持默認選項即可。
3、兼容性配置,單擊“Compatibility Options(兼容性配置)”選項卡:Any CVS/CVSNT
4、插件配置, 單擊“Plugins(插件)”選項卡,默認即可
5、高級選項,單擊“Advanced(高級)”選項卡,保持默認即可
6、測試服務器
1)開始菜單-run-cmd,進入命令行環(huán)境
2)輸入Cvs ,會出現(xiàn)相應的幫助,如果沒出現(xiàn),說明環(huán)境變量中的Path值沒有設置,你可以手動設置到你的Cvs.exe文件所在的目錄
3)set cvsroot=:pserver:administrator@127.0.0.1/mycvsdata
4)輸入cvs version ,顯示當前CvsNt版本號
Client: Concurrent Versions System (CVSNT) 2.0.58a (client/server
Server: Concurrent Versions System (CVS) 1.11.2 (client/server)
5)cvs login
輸入你的Windows登陸密碼
6)cvs ls
顯示所以module,至少會有一個CVSROOT
7)如果以上步驟都沒有錯誤,說明CVSNT配置成功
添加普通新用戶
cvs passwd -a -r administrator xindouxindou是你想新添加的用戶名 administrator指定現(xiàn)在用具有admin權限的用戶來創(chuàng)建xin用戶
否則出現(xiàn)錯誤信息:
(1) Only administrators can add or change another's password
(2) Empty password used - try 'cvs login' with a real password
cvs [passwd aborted]: authorization failed: server 127.0.0.1 rejected access to /tarena/cvs for user administrator
這條命令后就可以設置這個用戶的密碼。
成功后可以使用這個用戶了
CVS口令文件:
缺省情況下cvs passwd 驗證方式所需的passwd文件(位于$CVSROOT/CVSROOT目錄下)不存在,需自己創(chuàng)建文件格式如下:
cvsadm:adfWS~!#$@S->:cvsadm
user1::osuser1
user2::osuser2
user3::osuser1
注:passwd文件的格式是:
以“:”為分隔,分為三部分:
第一部分是cvs帳號名(與系統(tǒng)帳號無關,也可與系統(tǒng)帳號名相同)
第二部分(可選項)是加密串,每個系統(tǒng)用戶的加密串缺省是在/etc/shadow中,如果cvs帳號不是操作系統(tǒng)的帳號,shadow中是不會有cvs帳號的加密串的,這時就必須手工為cvs帳號生成加密串,可以將其他系統(tǒng)帳號的密碼修改成想要的密碼(此時shadow文件的加密串跟著改變),在取得加密串后改回去。當?shù)诙糠种每諘r,該帳號以任何口令均可登入cvs server
第三部分(可選項)是一個操作系統(tǒng)帳號, 如果登陸成功, cvs用戶就以此系統(tǒng)帳號的身份存取cvs中的源代碼,這里的系統(tǒng)帳號是cvs權限控制的關鍵, 這個系統(tǒng)帳號有什么權限, 以此帳號身份存取cvs的cvs用戶就有相同的權限.。注意: 考慮到cvs用戶是以某個系統(tǒng)帳號的身份運行的, 此系統(tǒng)帳號應當對repository下的相應目錄有寫的權限, 這樣就存在直接進入目錄對文件進行修改的可能, 而這是cvs操作所不允許的,為了避免這種誤操作, 建議在產(chǎn)生此系統(tǒng)帳號時使其shell為/bin/false, 并且不設置此帳號的密碼,這樣可以禁止直接以此系統(tǒng)帳號telnet或者ftp進入CVS Server。
另外,passwd文件中的用戶不能重名,否則只有第一個有效。
CVS客戶端配置
(一)、TortoiseCVS客戶端的配置1、 TortoiseCVS是最佳的CVS客戶端軟件,使用方便。為了演示配置,先建立一個工程文件夾C:\testprjcvs,然后建立一個文本文件test.txt。
2、 添加項目模塊,也就是把項目添加到CVS倉庫。方法如下,在項目文件夾上點擊右鍵:點擊“創(chuàng)建新模塊”后,會彈出,按照選項填寫完成后,單擊“確認”,項目添加到倉庫。
3、察看C:\testprjcvs,發(fā)現(xiàn)上面有個綠色標記,說明項目已經(jīng)成功添加到倉庫了。
4、 打開項目文件夾,添加一個文件到倉庫文本文件,單擊確定,完成添加。添加后,還需要提交操作,才能將文件加入到CVS,右鍵單擊test.txt的文件,提交,也可以在空白處單擊右鍵,選擇提交,提交所有的沒有提交的操作。
(二)、用CVSNT或者TortoiseCVS命令行命令作為客戶端軟件操作CVS
1、 將CVSNT或者TortoiseCVS安裝目錄添加到系統(tǒng)變量CVSNT或者TortoiseCVS
2、 為了操作方便,可以設置一個環(huán)境變量
CVSROOT=:pserver:yutian@localhost:2401/mycvsdata,然后從命令行用命令進行登陸,
命令如下:
cvs login
然后輸入密碼
然后就可以通過命令行可以執(zhí)行cvs的各種操作了。在此不做詳細介紹。
注意:CVSROOT的寫法是: :pserver:username@hostname(或IP地址):CVS倉庫路徑
這個格式是絕對不能錯的,否則CVS命令就不能正常執(zhí)行。
下面我解釋一下上面的字符串的含義:
1、“pserver” 是最常用的一直CVS遠程訪問方式;
2、“username” 是指客戶端在服務器上的用戶名,也就是我們在上面的“配置CVS帳號”一結中講到的;
3、“hostname” 是CVS服務器的主機名,也可以是它的IP地址;
4、“CVS倉庫路徑” 是一個CVS倉庫所在的目錄,用于區(qū)分你要訪問的是哪個倉庫(因為一個CVS服務器上可能有多個不同倉庫)。
例如::pserver:leizhimin@icisserver:/zfvims
(三)、CVSNT+Eclipse的CVS的配置
1、 用Eclipse創(chuàng)建一個項目EclipseCVS,并添加一個測試類
2、 將項目添加到CVS倉庫。單擊“共享項目”,彈出設置窗口,填寫配置后,單擊下一步。。。
3、 修改CVSTest.java文件,然后提交,看看版本有什么變化
4、 在Eclipse里將項目從CVS倉庫里導入到本地,點選“CVS中的項目”,然后單擊“下一步”。。。選擇“Java項目”,單擊“下一步”。。。
(四)、CVSNT+IntelliJ IDEA 5.12的CVS的配置
1、 創(chuàng)建一個測試項目IdeaCVS
2、 然后配置版本控制工具CVS,點擊“配置選項”按鈕,單擊“版本控制工具”,選擇CVS,然后單擊“OK”。
3、 回到Idea窗口,開始導入項目到CVS倉庫,點擊“Import into CVS...(導入到CVS)”,單擊“Configure...”來配置一個CVS,單擊“+”,添加一個配置,并填寫單擊“Edit by Field...”。。。。
(五)、CVSNT+WinCVS配置
* WinCvs-1.3.17b在菜單"Admin"-"Preferences"下的"General"選項卡中設置
Authentication:指的是認證方式選擇Pserver
Path:指CVS的Repository(即倉庫)的存放路徑
cvsnt-2.0.41的倉庫存放路徑為d:\cvs_repository格式
cvsnt-2.5.03.2382的倉庫存放路徑為/cvs_repository格式
Host address:cvs服務器的主機地址
User name:登陸時使用的用戶名
CVSROOT:上面四項配置好以后,此項會自動生成,格式如:
:pserver:cvsuser@127.0.0.1:d:\cvs_repository或
:pserver:cvsuser@127.0.0.1:/cvs_repository
* WinCvs-2.0.9在菜單"Admin"-"Command Line Setting"下的"Setting"選項卡中設置
選中下面的"CVSROOT"復選框,點擊后面的按鈕,會彈出CVSROOT的設置框
Protocol:下拉列表中選擇"Pserver"
Repository:填寫d:\cvs_repository或/cvs_repository,根據(jù)服務器的版本不同,填寫不同的內(nèi)容。
Keywords:此項下面是登陸上面的倉庫所需要的基本信息
username--登陸用戶名
password--可以先留空
hostname--服務器地址,如127.0.0.1
下面幾項是端口、代理服務器信息等,根據(jù)實際需要填寫。
填寫好上面信息以后,會看到下面的"CVSROOT preview"中有如下信息:
:pserver:cvsuser@127.0.0.1:d:\cvs_repository或
:pserver:cvsuser@127.0.0.1:/cvs_repository
這里要重點說明的是Keywords項的填寫,當使用cvsnt-2.5.03.2382服務器時,這里面的username,password,hostname,port項都不見了,只剩下proxy,proxyport,Tunnel和
proxyuser,proxypassword。
所以我們要手動在Repository項中天上缺失的信息,這時Repository項的內(nèi)容如下:
:/cvs_repository
上面就是發(fā)用戶名cvsuser和服務器地址127.0.0.1手動添加到了這里。
此外在WinCVS的使用過程中,可能會有一下錯誤信息提示:
cvs [server aborted]: can't create temporary directory C:\Program Files\cvsnt\Temp/cvs-serv1504: Permission denied
這是由于這個Temp目錄所在的磁盤分區(qū)是NTFS格式的,需要你在這里目錄上為當前登陸倉庫的用戶分配write權限,如果是XP系統(tǒng),可以通過取消"文件夾選項"--"查看"下面的"使用簡單文件共享"選項以后,再到這個Temp文件上點擊鼠標右鍵屬性,到"安全"選項中為你的用戶分配寫權限。或是干脆通過修改CVSNT服務器的配置,將這個Temp目錄指到一個Fat32分區(qū)上的目錄就可以了。
總結
1、 CVS是一個版本控制工具,是程序員必須掌握的一個工具,對CVS的使用程度也從側面反映了一個程序員開發(fā)水平。一旦接觸了CVS,就離不開它。CVSNT和TortoiseCVS都是免費的功能強大而且使用方便的CVS工具。2、 CVS配置的還很多,本文旨在讓讀者能對CVS有個初步認識,并且能在日常的開發(fā)中快速的配置并使用CVS。
3、 CVS還有一個重要問題在此沒有提到,就是用戶管理。這一塊比較復雜,不同的CVS服務器管理也有差別,還在進一步研究中。