[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 應用技術 > 其它 > 正文
CVS使用探討
本文出自:http://www.linuxforum.net 作者: lhl (enthusiast) (2002-06-27 06:02:00)
假設: 
cvsroot user:cvsroot home=/home2/cvsroot/cvsroot 
cvs group:cvs 

1:安全 

#groupadd cvs 
#mkdir /home2/cvsroot#注意:/home2/cvsroot為root所有 
#useradd -g cvs -G cvs -d /home2/cvsroot/cvsroot cvsroot 

/***未經實驗**/ 
#mv /usr/bin/cvs /usr/bin/cvs.real 
#cat > /usr/bin/cvs 
#!/bin/sh 
umask 2# Or whatever your site standard is. 
exec /usr/bin/cvs.real ${1+"$@"} 
^D 
/*************/ 

2:多倉庫 

注意,我們用cvsroot僅僅是用來管理,所以,不要在它$HOME下面創建任何倉庫 
另外,cvsroot用戶的初始環境不應該包含非空的$CVSROOT. 
使用cvsroot來進行的任何管理工作都指明CVSROOT是一個好的習慣. 

OK,開始給單個項目建倉庫 

假設有兩個項目,project1,project2,希望單獨存放,便管理 

#mkdir /home2/cvsroot/pro1 
#mkdir /home2/cvsroot/pro2 
#chown cvsroot.cvs /home2/cvsroot/pro1 
#chown cvsroot.cvs /home2/cvsroot/pro2 
#chmod 2775 /home2/cvsroot/pro1 
#chmod 2775 /home2/cvsroot/pro2 
(更高的安全要求則$chmod 2770 /home2/cvsroot/cvsroot/pro1) 

OK,開始建立倉庫 

#su - cvsroot 
$cvs -d /home2/cvsroot/pro1 init 
$cvs -d /home2/cvsroot/pro2 init 
$chmod 2775 /home2/cvsroot/pro1 
$chmod 2775 /home2/cvsroot/pro2 

修改啟動文件 

service cvspserver 

disable = no 
flags= REUSE 
socket_type= stream 
wait= no 
user= root 
bind= 192.168.0.1 
only_from= 192.168.0.0/24 
server= /usr/bin/cvs 
server_args= -f --allow-root=/home2/cvsroot/pro1 --allow-root=/home2/cvsroot/pro2 pserver 
log_on_failure += USERID 


/********技巧*************/ 

由xinetd的server_args長度限制,當你想運行很多的單個倉庫的時候,可以這做, 

#vi /etc/xinetd.d/cvspserver 
service cvspserver 

disable= no 
flags= REUSE 
socket_type= stream 
wait= no 
user= root 
bind= 192.168.0.1 
only_from= 192.168.0.1.0/24 
server= /home2/cvsroot/cvs.run 
log_on_failure += USERID 


:wq 

然寫腳本/home2/cvsroot/cvs.run 

#vi /home2/cvsroot/cvs.run 
#!/bin/bash 
/usr/bin/cvs -f \ 
--allow-root=/home2/cvsroot/pro1 \ 
--allow-root=/home2/cvsroot/pro2 \ 
--allow-root=/home2/cvsroot/pro3 \ 
--allow-root=/home2/cvsroot/pro4 \ 
--allow-root=/home2/cvsroot/pro5 \ 
--allow-root=/home2/cvsroot/pro6 \ 
pserver 

:wq 

#chmod +x /home2/cvsroot/cvs.run 

#service xinetd restart 

OK! 

/*************************/ 

修改不同倉庫的策略 

#su - cvsroot 

$export CVSROOT=/home2/cvsroot/pro1 
$cvs co CVSROOT 
$cd CVSROOT 
$vi config 
# Set this to "no" if pserver shouldn't check system users/passwords 
SystemAuth=no 

# Put CVS lock files in this directory rather than directly in the repository. 
LockDir=/var/cache/cvs/pro1 

# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top 
# level of the new working directory when using the `cvs checkout' 
# command. 
#TopLevelAdmin=no 

# Set `LogHistory' to `all' or `TOFEWGCMAR' to log all transactions to the 
# history file, or a subset as needed (ie `TMAR' logs all write operations) 
LogHistory=TOFEWGCMAR 

:wq 

$vi loginfo 
ALL (echo %{sVv}; cat) | /usr/local/viewcvs-0.9.2/loginfo-handler#SQL checkin 

:wq 

$cvs commit -m "auth change,log change" 


OK,既然不使用系統用戶驗証,那我們來創建用戶 
/************/ 

不使用系統帳號的原因是充分保証安全,避免系統帳號直接刪除倉庫裡的文件. 
雖然麻煩,但是很有必要,因為無法保証每一個程序員都對cvs操作很有經驗. 


在這種情況下,為每一個工程各建一個等效系統用戶,此用戶應該是cvs組的成員. 
不必有shell. 
(也可以為所有的項目建一個等效用戶,私有的cvs Server完全可以這做,甚至可以 
直接使用cvsroot,呵呵,就是比較危險而已) 

#adduser -g cvs -G cvs -s /bin/false -d /home2/cvsroot/pro1 -M cvspro1 

/************/ 

創建一個LockDir(選擇/var/cache是因為某些系統放在/var/lock下面有問題) 
#mkdir /var/cache/cvs 
#chown cvsroot.cvs /var/cache/cvs 
#chmod 2775 /var/cache/cvs 

#mkdir /var/cache/cvs/pro1 
#chown cvspro1.cvs /var/cache/cvs/pro1 
#chmod 2775 /var/cache/cvs/pro1 

創建用戶 

先清除環境 
$export CVSROOT= 
$cd ~cvsroot 
$rm -rf CVSROOT 

直接切換到pro1的倉庫下 

$cd /home2/cvsroot/pro1 
$cd CVSROOT 


創建用戶hleil 

$htpasswd -c passwd hleil 

修改passwd成cvs的格式 

$vi passwd 
hleil:svcsdasdcvjn:cvspro1 

:wq 

加入writers組 

$echo hleil >>writers 

/*****這裡有一個問題**********/ 

如果用戶hleil需要writers權限,那,他絕對不可以出現在readers組中. 
writers,readers,passwd的文件尾空行是必要的. 
等效系統帳號如果不存在,將導致access failed. 
cvs帳號盡量沒有對應的系統帳號,如果有,確保它們的passwd不同. 

/******************************/ 

OK了! 

項目pro2同理. 


3:夠建模塊化的工程 

關模塊化,大家掛在口邊也不是一天兩天了,這裡指的是項目的模塊化,不是指具體的程序. 


正常的項目開始具體實施之前,必定做好了系統分析和結構設計,當然,像打印"Hello World!" 
這樣的"項目"或許不用進行系統分析吧:P,所以也不用麻煩我們辛苦構建的cvs. 

軟件設計完成之,各個模塊應該也就出來了,在實施之前,我們需要考慮用cvs貫徹設計結果. 

cvs的模塊不必細化到瘋狂的程度,大致按照功能劃分並且兼顧工作組就可以了.同一模塊必需 
僅有單一工作組負責. 

確定模塊之,我們來建立模塊. 

#su - hleil 
$export CVSROOT=:pserver:hleil@192.168.0.1:/home2/cvsroot/pro1 
$cvs login 
$cvs co CVSROOT 

假設有這樣的目錄結構, 
pro01 
libs 
libs/01 
libs/02 
每個目錄下面都有一個初始化文件init(方便import) 

我們可以這樣定義modules, 

$vi CVSROOT/modules 
pro01pro01 & libs 
libs-01-d 01libs/01 
libs-02 -d 02libs/02 
libs-a libs-01 libs-02 

:wq 

$cvs commit -m "init modules" 

倒入目錄結構, 

$cvs import -m "init checkin" pro01 init start 


現在,你的三個小組可以分別工作pro01,libs-01,libs-02,全部程序只要co pro01就行了. 


簡單吧:P 

4:克隆 

構建模塊 

$export CVSROOT=remote 
$cvs login 
$cvs co CVSROOT/modules 
$cvs logout 
$mv CVSROOT/modules . 
$rm -rf CVSROOT 
$export CVSROOT=local 
$cvs login 
$cvs co CVSROOT/modules 
$cp modules CVSROOT/modules 
$cvs commit -m "clone init modules" 

研究目錄結構 
所有的 -a 定義的模塊不需要checkout 
$sed "/#/d" modules > modules.tmp 
$sed "/^$/d" modules.tmp > modules.tmp2 
$sed s/" "*/" "/g modules.tmp2 > modules.tmp 
$cat modules.tmp|sed /-a/d >mymodules 

仔細研究目錄結構,以便co不含有垃圾的代碼 

$cp mymodules co-list 

編輯co-list,不需要的注釋,OK 

$sed "/#/d" co-list > co-list.tmp 
$cut -d " " -f 1 co-list.tmp >co-list 

OK,此時的co-list就是我們所需要得所有模塊 

$export CVSROOT=remote 
$cvs login 
$for mm in $(cat co-list) 
do 
cvs co $mm 
done 

$cvs logout 
$export CVSROOT=local 
$cvs login 

作合適的目錄調整 

如果modules 裡面有 
xxx yyy 
那,co xxx將產生xxx目錄,實際應該是yyy 
保留co-list.tmp以便查証 
比如: 
gobj-lib -d gobj libs/gobj 
co gobj 則將在本地產生(- d) gobj的目錄,實際倉庫中的位置是libs/gobj 

可以根據co-list.tmp的內容編輯一個腳本, 

$cvs import -m "cvs checkin init" modulesname init start 

OK! 
(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
cvsup daemon (2002-03-22 06:02:00)
使用CVS進行項目開發管理 (2001-11-06 07:00:00)
cvs的配置和使用 (2001-09-10 08:00:00)
用CVS來管理自己的程序 (2001-08-09 15:00:00)
CVS 簡介 (2001-06-05 18:08:00)
CVS RCS HOWTO 原始程式碼版本控制系統 (3) (2001-05-02 10:11:41)
CVS RCS HOWTO 原始程式碼版本控制系統 (2) (2001-05-02 10:10:18)
CVS RCS HOWTO 原始程式碼版本控制系統 (1) (2001-05-02 10:09:53)
PostgreSQL7.0手冊-附錄-日期/時間支持-CVS 倉庫 (2001-04-21 23:48:48)
使用CVS進行版本管理 (2001-04-21 20:24:35)

===更多相關===
 

★  樊強制作 歡迎分享  ★