首先,你需要安裝 CVS 套件,在Redhat Linux 上請用
cd /mnt/cdrom/Redhat/RPMS rpm -i rcs*.rpm rpm -i cvs*.rpm To see the list of files installed do - rpm -qpl cvs*.rpm | less
在其他的 unix 機器上,你可能需要下載 RCS CVS 的 tar.gz 檔案, 然後根據 README, INSTALL 檔的指示來安裝 CVS。 請到 http://www.cyclic.com 和 http://www.loria.fr/~molli/cvs-index.html
下列的環境變數需要在 /etc/profile 檔中設定,/etc/profile 是對所有使用者都有效的內定值設定檔, 如果沒有設定 /etc/profile,那麼你應該加這些設定到你自己的設定檔 /.bash_profile 內。
export EDITOR=/bin/vi export CVSROOT=/home/cvsroot export CVSREAD=yes
建造一個目錄來存你原始程式碼的儲藏櫃 (repository) 並且給予 unix group 與 user 讀寫的權力。 (譯註:這個目錄下將會有很多你將來的原始碼。)
export CVSROOT=/home/cvsroot mkdir $CVSROOT chmod o-rwx $CVSROOT chmod ug+rwx $CVSROOT
cvs init (譯註;這個初始化的動作在於建造一個儲藏櫃,是一個目錄$CVSROOT/CVSROOT。 $CVSROOT 下的目錄每個都是 module 的意思,一個 module 可以就是一個專案計劃。 但也可能是你把一個計劃拆成很多 module ,不同 module 交給不同的 team 去發展。) # 一定要換到想要 CVS 控制的計劃目錄下喔 cd $HOME/my_source_code_dir # 把整個目錄納入管理用 import 命令 cvs import my_source_code_dir V1_0 R1_0 (譯註:其實是 cd 到你的project下後,cvs import 模組 vendor_tag release_tag, 不一定要是目錄名稱 my_source_code_dir,vendor_tag, release_tag 只是識別用的東西, 這個動作會在 $CVSROOT/ 下開個" 模組 "的目錄,然後把 my_source_code_dir 整個放到 CVS 下管理, $HOME/my_source_code_dir 就沒用了。import 的動作是把已經寫好的一堆 code 擺進來, 如果將來想新增檔案xxxx.c,必須先寫好xxxx.c,再用 cvs add xxxx.c)
要轉換已經存在的 RCS 檔案到 CVS ,請使用下面的 script 。並確定你從你的 Linux CD-ROM 安裝了 korn shell 套件 pdksh*.rpm。, 跑完 script 後,把得到的目錄移到$CVSROOT/some_project_name。
注意 : Korn shell /bin/ksh 在你從Linux CD-ROM 安裝 pdksh*.rpm 時就會產生
#!/bin/ksh ############################################################# # Program to Migrate the existing source code in RCS to CVS # # Needs the korn shell RPM package pdksh*.rpm from Linux # contrib cdrom ############################################################# # Enter your current RCS file location here. RCS_DIRECTORY=/usr/home/my_rcs_tree # Temporary directory to hold the files TMP_RCS_DIR=$HOME/tmp_rcs_directory mkdir $TMP_RCS_DIR # Copy the tree having RCS directory into temporary directory cd $RCS_DIRECTORY tar cvf - ` find . -name RCS -print ` | ( cd $TMP_RCS_DIR; tar -xvf - ) cd $TMP_RCS_DIR for ii in `find . -type f -print` ; do # $ii will have like /home/foo/RCS/sample.c,v echo $ii # Get the dir name like /home/foo/RCS from ii kk=`dirname $ii` # echo $kk # Drop off RCS from kk - like /home/foo jj=`dirname $kk` # echo $jj # Move file from RCS to upper leve like # mv /home/foo/RCS/sample.c,v /home/foo mv $ii $jj done # Remove the empty directory RCS like - # rmdir /home/foo/RCS cd $TMP_RCS_DIR find . -type d -name RCS -exec rmdir {} \; # The resultant directory is $TMP_RCS_DIR (which is $HOME/tmp_rcs_directory) # Move the directory tmp_rcs_directory to $CVSROOT/some_project_name # Now the RCS is migrated to CVS as 'some_project_name' .