建立和配置操作都是在RedhatLinux8.0上做的。系統帶的CVS可執行程序在/usr/bin下面,版本信息為:ConcurrentVersionsSystem(CVS)1.11.2(client/server)。系統帶的這個cvs可執行程序既可以當客戶端使用,也可以用來建立cvs原始碼庫伺服器。
建立一個原始碼庫主要有以下幾步:
(1)初始化cvs伺服器環境。
#cvs-d/usr/local/sourceinit
之後進入/usr/local/source,可以看到有一個目錄CVSROOT,下面是初始化後的CVS伺服器配置文件。暫且保持不動。
(2)把cvs服務放到xinetd系統服務中。
首先在/etc/xinetd.d目錄下生成任務配置文件cvspserver,文件名稱可以隨便用。
其中內容大致如下:
servicecvspserver
{
flags=REUSE
socket_type=stream
wait=no
user=root
protocol=tcp
server=/usr/bin/cvs
server_args=-f--allow-root=/usr/local/sourcepserver
disable=no
}
其中server_args一個參數指定了原始碼庫路徑,一個指定了伺服器使用密碼認證方式。
第二,要確認/etc/services文件中,有cvspserver關鍵詞,並分配了埠,如:cvspserver2401/tcp。
第三,重新啟動xinetd服務,cvs服務就可以用了。
(3)測試。假定cvs伺服器在192.168.0.205上,系統上有一個用戶cvs。登陸另一臺linxu機器,執行下列命令可以完成測試:
$exportCVSROOT=:pserver:cvs@192.168.0.205:2401/usr/local/source
$cvslogin
輸入密碼,沒有出錯提示表示登陸成功。
如果想在一個linux系統上建多個原始碼庫,分別提供cvs服務。重複上面步驟就可以了。
第一步時候要注意使用一個不同路徑。
第二步放到xinetd系統服務中稍微麻煩點。/etc/xinetd.d目錄下要生成一個新的任務配置文件,例如cvspserver1,文件中service名稱一定要區分第一個,例如servicecvspserver1,server_args做相應變動。還要在/etc/services文件中,加入新的服務埠號,例如:cvspserver12402/tcp。重新啟動xinetd服務.
第三步測試時候,可以這樣設定:
$exportCVSROOT=:pserver:cvs@192.168.0.205:2402/usr/local/source1
cvs作為並行版本控制系統,多用戶讀寫是需要的。但有時候希望有些用戶只能checkout,不能提交新代碼。有時希望cvs上的某些用戶不能checkout一些代碼,例如和另一個開發組共用一個CVS,希望另一個組的成員不能checkout自己組代碼。
cvs伺服器有一套自己的用戶認證機制,我使用時候沒採用,而是使用了系統上用戶直接作為cvs伺服器用戶,採用linux組、用戶權限實現了這樣的功能。
舉例說明,在linxu系統上模擬實際兩個開發組a、b,分別有用戶a-user1,a-user2,b-user1,b-user2。
模塊a-source,希望a組成員都可以讀寫,b組成員沒有任何權限。可以使用以下系列命令:
#chown-Ra-user1a-source
#chgrp-Raa-source
#chmod-R770a-source
如果希望模塊a-source,只有a-user1可以寫,同組其它用戶可以讀,b組成員沒有任何權限,把chmod命令改成-R750就行了。
必須說明的,cvs中默認一個用戶checkout代碼時候,會在當前模塊下生成一個鎖文件,如果這個用戶對當前模塊沒有寫權限,讀是不可能的。配合上面的權限設置,必須改一下cvs伺服器配置。改成不在當前模塊目錄下生成鎖文件,把鎖文件集中到一個所有用戶都有讀寫權限的目錄。修改配置文件CVSROOT/config:
#PutCVSlockfilesinthisdirectoryratherthandirectlyintherepository.#LockDir=/var/lock/cvs
把LockDir設上就可以了。