亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源配置管理工具 > cvs
CVSRCSHOWTO原始程式碼版本控制系統
作者:網絡轉載 發布時間:[ 2013/2/21 14:22:42 ] 推薦標簽:

作者:Al Dev (Alavoor Vasudevan) alavoor@yahoo.com
譯者:Cyril Huang cyril_huang@yahoo.com
v7.0, 20 Feb 2000 翻譯日期: 5 April 2000

--------------------------------------------------------------------------------
這份文件是一份 "實際操作的說明" ,以便於能使您很快的設定 CVS/RCS 原始程式碼控制系統。這份文件里也有一些將 CVS 上常用的混合命令包成可設定的 shell scripts 。這些 scripts 為 CVS 提供了一個簡單的使用者介面。這份文件的內容不僅能適用於 Linux 系統也適用於其他像 Unix 的系統,例如Solaris, HPUX, AIX, SCO, Sinix, BSD, SCO 等等。
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

1. 簡介

原始碼控制系統是一個必須能管理那些在軟體計劃發展時原始碼所做的改變。軟體開發者需要一個完整的原始碼改變歷史紀錄,以便於在發生問題時,能夠追溯到以前穩定的版本。既然原始程式碼對於任何的軟體計劃與開發,都是花時間與金錢中關鍵的部分,所以花時間藉由使用原始碼控制系統像 CVS 和 RCS 來安全的保護(safe-guarding)原始程式碼是非常重要的。

CVS (Concurrent Version Control System) 是一個能讓很多程式開發者同時做軟體開發的非常強大工具。它使用了RCS 的檔案規定格式但多了一層像應用程式介面的包裝,架在 RCS 的上層。

(譯注: RCS 是較老的版本控制,一個受 RCS 管制的檔案看起來是這樣子的 proj1.c,v ,CVS 沿用了一些 RCS 的規定。)

CVS 能夠紀錄你的檔案的歷史紀錄( 通常是原始程式碼,但是其他型態的檔案則不一定)。 CVS 只存了不同版本中檔案的差異,而不是你所建立的每個版本中的每個檔案。 CVS 也保持了一個何時,何人更改檔案,為什麼更改檔案等等不同觀點的歷史紀錄。

CVS 對於軟體的發行和多人同時更改目前原始碼的管理是非常的有幫助。他并不只是要對單一目錄下的檔案提供版本控制,相反的,CVS 更提供了多層有組織的目錄檔案的版本控制。在這個目錄下除了你的原始程式碼外,還包含有一個 CVS 所建立的改版控制目錄與檔案。

這些目錄與檔案後被合并在一起形成一個軟體的發行。

CVS 能被使用在 "C", "C++", Java, Perl, HTML 和其他檔案。

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

2. 那一種版本控制系統適合我? CVS 或 RCS

CVS 實際上是架在 RCS 之上的, CVS 只是一堆更強大能控制一個有完整原始程式碼階層目錄的工具。我們非常強烈的推薦您使用 CVS,因為您能夠很有彈性的用 perl , korn bash shell 等 scripts 語言設定您自己的 CVS 系統。請看一些 korn shell scripts 的□例 Shell Scripts 。

CVS 的優點

CVS 是非集中式的管理,使用者從儲存柜 (repository) 登出一個檔案目錄,并且有他自己的獨立的穩定目錄樹。

CVS 能夠在發行整個計劃的原始目錄樹中"蓋上印記" ("STAMP")。
CVS 能夠使大家同時修改檔案。
CVS 能夠用 shell scripts 或 perl 設定成檔案鎖住成單一使用或同時修改檔案模式。
CVS 的缺點

需要比 RCS 多一點的管理。
非常成熟復雜的系統,是目前應用上已有的高技術。(感謝網友tsaipaw@mars.seed.net.tw來信指證我的錯誤)
有豐富的命令還有命令選項,因此對於初學者來說有很陡的學習曲線。簡單使用的 shell scripts 可在這里找到 Shell Scripts 。
RCS 的優點

RCS 非常容易設定。較少一些管理上的工作。
RCS 用在一個每個人在一起工作的集中區域。
RCS 對於簡單的系統很有用。
非常嚴謹的單一檔案修改模式 - 同步與同時是不允許的。
RCS 的缺失

由於使用單一目錄控制與檔案鎖住,不可能由很多的程式設計者做同時的開發。因為單一目錄下很多人對檔案的改變,會造成 make 的使用錯誤。
不能對整個軟體計劃戳上發行(releases)的印記。
這份文件也包含一些 shell scripts 以提供簡單的命令來作登出 (check-out), 登錄 (check-in), 送交(commit) 檔案的動作。請看一些 shell scripts 的□例 Shell Scripts 。

對於 RCS 而言,請看 Linux CD-ROM 里面的RCS mini-howto。
--------------------------------------------------------------------------------
cd /mnt/cdrom/Redhat/RPMS
ls -l howto-6.0-*.noarch.rpm
rpm -qpl howto-6* | grep -i rcs
--------------------------------------------------------------------------------
或者看 http://sunsite.unc.edu/LDP/HOWTO/mini/RCS-HOWTO.html
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

3. 設定 CVS

首先,你需要安裝 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
--------------------------------------------------------------------------------
然後用 j, k, CTRL+f, CTRL+D, CTRL+B, CTRL+U 或上下左右鍵, page up/down 瀏覽一下結果。請用 'man less' 查看 less 的用法
在其他的 unix 機器上,你可能需要下載 RCS CVS 的 tar.gz 檔案,然後根據 README, INSTALL 檔的指示來安裝 CVS。請到 http://www.cyclic.com 和 http://www.loria.fr/~molli/cvs-index.html

3.1 CVS 的專有環境變數

下列的環境變數需要在 /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 ,并且從現在開始把你的原始程式碼交給 CVS 管理。請做 -
--------------------------------------------------------------------------------

cvs init

(譯注;這個初始化的動作在於建造一個儲藏柜,是一個目錄$CVSROOT/。
同時 $CVSROOT/CVSROOT 也在此時被建造,這個模組目錄下面是控制你CVS的administration files,
里面的檔案做一些修改後,可以使CVS更強大好用。
$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 只是識別用的東西,
將來你可以用 tag 來存取你要的特定版本
這個動作會在 $CVSROOT/ 下開個" 模組 "的目錄,然後把 my_source_code_dir 整個放到 CVS 下管理,
$HOME/my_source_code_dir 沒用了。import 的動作是把已經寫好的一堆 code 擺進來,
如果將來想新增檔案xxxx.c,必須先寫好xxxx.c,再用 cvs add xxxx.c)

--------------------------------------------------------------------------------

3.2 從 RCS 轉換到 CVS 系統

要轉換已經存在的 RCS 檔案到 CVS ,請使用下面的 script 。并確定你從你的 Linux CD-ROM 安裝了 korn shell 套件 pdksh*.rpm。

注意 : 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
#############################################################
#
# rcs2cvs - convert source tree from RCS to CVS
#

# project to convert
PROJECT='project'

# current RCS root
RCSROOT="$HOME/rcs"

if cd "$RCSROOT/$PROJECT"
then
        cd "$RCSROOT"
else
        echo >&2 "`basename "$0"`: can't change to RCS directory '$RCSROOT/$PROJECT'."
        exit 1
fi

# current CVS root
CVSROOT="$HOME/cvs"

# create new CVS directory for project 'project'
if mkdir "$CVSROOT/$PROJECT"
then
        :
else
        echo >&2 "`basename "$0"`: can't create CVS directory '$CVSROOT/$PROJECT'."
        exit 2
fi

# create CVS project tree from RCS tree
find "$PROJECT" -type d -name RCS -print |
while read RCS
do
        CVS="`dirname "$RCS"`"
        (if cd "$RCS"
        then
#               if find . -type f -name '*,v' -print | cpio -pdmv "$CVSROOT/$CVS"
                if find . -type f -print | cpio -pdmv "$CVSROOT/$CVS"
                then
                        :
                else
                        echo >&2 "`basename "$0"`: can't convert RCS subdirectory '$RCSROOT/$RCS' to CVS subdirectory '$CVSROOT/$CVS'."
                fi
        else
                echo >&2 "`basename "$0"`: can't change to RCS subdirectory '$RCSROOT/$RCS'."
        fi)
done

--------------------------------------------------------------------------------

現在 RCS 已經被改成 CVS 系統下的 'project'. 你可以開始用CVS命令來存取 'project' 這個模組了.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

4. Shell Scripts

下面的 scripts 是基本 CVS 命令的集合,而且是 Korn shell 的 scripts 。你可以把他轉成 perl 或者 bash。你可以自己修改成你想要的樣子。這些只是運用基本 CVS 命令但有些特殊的花樣加在里面。例如, sedit 這個 script 提供了檔案鎖住的功能使得其他人知道有某人正在修改這個檔案,當然你也可以直接使用 CVS 命令而不用這些 scripts ,這些 scripts 只是在展示 CVS 是多麼的有彈性。

把這些 scripts 復制到 /usr/local/bin 下,并且此目錄應該在你的 PATH 環境變數中。

sget [-r revision_number]  要從 CVS 獲得一個唯讀檔案或整個唯讀目錄,請按 sget
sedit [-r revision_number]  要修改一個一個程式碼時,這個 scripts 會做檔案鎖住的動作,因此沒有別人可以登出這個檔案了。當然你可以改變這個 script 成你想要的功能 - 例如不鎖住,只出現警告訊息,或者相反的,非常嚴謹的鎖檔案。請按 sedit
scommit [-r revision_number]  要交出某個你修改的檔案或整個目錄。 把你的改變交給 CVS。請按 scommit
supdate  要藉由從 CVS 得到新的檔案來update 一個檔案或整個目錄。請按 supdate
sunlock [-r revision_number]  要把因為用 sedit 後的檔案鎖關掉。這會釋放檔案鎖(Release File Lock)。請按 sunlock
slist 要看目前正被你修改的檔案列表。做 'ls -l | grep | ...' 命令,請按 slist
sinfo  要得到一個檔案的改版資訊。 請按 sinfo
slog  要得到一個 CVS 檔案改版的歷史紀錄,請按 slog
sdif 
sdif -r rev1 -r rev2  要得到你的檔案與 CVS 柜子里的檔案不同的地方在哪里。請按 sdif

注意: sdif 只有一個 'f' ,因為這里已經有一個 unix 命令叫 'sdiff'。

sadd  要新增一個檔案到 CVS 柜子里。請按 sadd
sdelete  要從 CVS 柜子里清掉一個檔案。請按 sdelete
sfreeze   要凍結原始碼 (freeze codes) ,這是將要發行 (release) 整個原始碼目錄樹。請按 sfreeze
saddtree   要新增一個目錄樹到 CVS 。請按 saddtree
例如 :

--------------------------------------------------------------------------------
        cd $HOME;  
        sfreeze REVISION_1_0  srctree 
--------------------------------------------------------------------------------
這將會凍結原始碼,并貼上一個標簽 REVISION_1_0 ,如此一來你可以稍後用版本名字登出整個目錄樹。

  ******************************************************

4.1 sget

注意 : Korn shell /bin/ksh 在你從Linux CD-ROM 安裝 pdksh*.rpm 時會產生

請把他存成一般文字檔并改變存取權限 chmod a+rx
--------------------------------------------------------------------------------

#!/bin/ksh

# CVS program sget
# Program to check out the file from CVS read-only

cmdname=`basename $0`

Usage()
{
        print " Usage: $cmdname [-r revision_number/symbolic_tag_name]  "
        print "The options -r are optional "
        print "For example - "
        print " $cmdname -r 1.1 foo.cpp"
        print " $cmdname foo.cpp "
        print " $cmdname some_directory "
        print "Extract by symbolic revision tag like - "
        print " $cmdname -r REVISION_1 some_directory "
        print " "
        exit
}

# Command getopt will not supported in next major release.
# Use getopts instead.
while getopts r: ii
do
        case $ii in
        r) FLAG1=$ii; OARG1="$OPTARG";;
        ?) Usage; exit 2;;
        esac
done
shift ` expr $OPTIND - 1 `

#echo FLAG1 = $FLAG1 , OARG1 = $OARG1

if [ $# -lt 1 ]; then
        Usage
fi

bkextn=sget_bak

hme=` echo $HOME | cut -f1 -d' '  `
if [ "$hme" = "" ]; then
        print " Error: $HOME is not set!! "
        exit
fi

# Check if file already exists....
if [ -f $1 ]; then
        user_perms=" "
        group_perms=" "
        other_perms=" "
        user_perms=`ls -l $1 | awk '{print $1 }' | cut -b3-3 `
        group_perms=`ls -l $1 | awk '{print $1 }' | cut -b6-6 `
        other_perms=`ls -l $1 | awk '{print $1 }' | cut -b9-9 `
        if [ "$user_perms" = "w" -o "$group_perms" = "w" 
                -o "$other_perms" = "w" ]; then
                print " Error: The file is writable. Aborting $cmdname ......"
                print "       You should either backup, scommit or delete the file and"
                print "       try $cmdname again "
                exit
        fi
fi

cur_dir=`pwd`
#echo $cur_dir

len=${#hme}
len=$(($len + 2))
#echo $len

subdir=` echo $cur_dir | cut -b $len-2000 `
#echo $subdir

if [ "$subdir" = "" ]; then
        fdname=$1
else
        fdname=$subdir"/"$1
fi

# Move the file
touch $1 2>/dev/null
mv -f $1 $1.$bkextn

# Create subshell
(
cd $hme
#echo $fdname

# Use -A option to clear all sticky flags
if [ "$FLAG1" = "" ]; then
        cvs -r checkout -A $fdname
else
        cvs -r checkout -A -$FLAG1 $OARG1 $fdname
fi
)
#pwd

if [ -f $1 ]; then
        print " READ-ONLY copy of the file $fdname obtained."
        print "Done $cmdname"
        #print " Tip (Usage): $cmdname  "
fi

--------------------------------------------------------------------------------

上一頁1234下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 亚洲国产成人久久综合一 | 久久熟| 免费国产成人高清在线观看不卡 | 最近在线观看免费完整视频 | 中文日本在线 | 国产情侣草莓视频在线 | 欧美人禽猛交狂配免费看 | 黄色视屏在线看 | 国产一级 黄 片 | 99re热精品视频国产免费 | 182tv午夜精品视频在线播放 | 色噜噜狠狠色综合免费视频 | 国产欧美在线观看不卡一 | 久爱视频www在线播放 | 亚洲成年看片在线观看男男 | 欧美成人午夜 | 在线视频a | 黄色小视频在线免费观看 | 欧美性free极品另类 | 青青艹在线视频 | 国产日本视频 | 色无五月 | 欧美日韩图区 | 97精品久久天干天天蜜 | 国产免费成人在线视频 | 狠狠色狠狠色很很综合很久久 | 亚洲欧美黄色片 | 欧美日本亚洲 | 1024在线视频国产在线播放 | 国产精品免费看香蕉 | 久久久久国产精品免费看 | 天天人人| 国产高清精品在线 | 小泽玛利亚在线观看123 | 影音先锋日韩 | 狼人久草 | 国产欧美在线视频免费 | a视频免费看 | 日韩欧美精品在线观看 | 中文字幕在线观看一区二区三区 | 成人免费看毛片 |