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