UNIX CVS

2018-11-24 15:24 更新

服務(wù)器設(shè)置

CVS 環(huán)境初始化

決定主 repository 將要?jiǎng)?chuàng)建和重置的 cvs 根目錄。比如 /usr/local/cvs (根):

# mkdir -p /usr/local/cvs
# setenv CVSROOT /usr/local/cvs      # 設(shè)置 CVSROOT 環(huán)境變量(本地)
# cvs init                           # 創(chuàng)建所有初始化 CVS 配置文件
# cd /root
# cvs checkout CVSROOT               # 簽出配置文件來(lái)修改他們
# cd CVSROOT
edit config ( fine as it is)
# cvs commit config
cat >> writers                       # 創(chuàng)建 writers 文件 (也可為 readers)colin
^D                                   # 使用 [Control][D] 退出編輯
# cvs add writers                    # 添加文件 writers 進(jìn) repository
# cvs edit checkoutlist
# cat >> checkoutlist
writers
^D                                   # 使用 [Control][D] 退出編輯
# cvs commit                         # 提交所有配置更改

添加一個(gè) readers 文件,如果你要區(qū)分讀寫權(quán)限的話。注意: 不要在主 cvs 中直接編輯文件,而應(yīng)該簽出要編輯的文件,修改完成后再簽入。我們所做的文件 writers 用來(lái)定義可寫權(quán)限。
下面有三種流行的方式去訪問(wèn) CVS。前兩個(gè)不需要任何進(jìn)一步的配置。看 CVSROOT 部分的實(shí)例了解如何使用它們:

  • 直接本的訪問(wèn)文件系統(tǒng)。用戶需要有足夠的權(quán)限來(lái)直接訪問(wèn) CVS,除了要登錄到操作系統(tǒng),沒(méi)有進(jìn)一步的驗(yàn)證。然而這僅對(duì)本地 repository 才有用。

  • 使用 ext 協(xié)議通過(guò) ssh 來(lái)遠(yuǎn)程訪問(wèn)。任何有 ssh shell 賬戶和在 CVS 服務(wù)器上可讀寫權(quán)限的都可直接使用 ext 協(xié)議通過(guò) ssh 來(lái)訪問(wèn) CVS,而不需要任何額外的隧道。沒(méi)有服務(wù)器來(lái)處理運(yùn)行在 CVS 上的驗(yàn)證工作。ssh 登錄會(huì)去驗(yàn)證。

  • 用 pserver 來(lái)遠(yuǎn)程訪問(wèn)。這是對(duì)于有較大用戶量的首選方法,用戶由 CVS 的 pserver 通過(guò)一個(gè)專門的密碼數(shù)據(jù)庫(kù)來(lái)驗(yàn)證,因此不需要本地用戶帳戶。這種設(shè)置在下面會(huì)有說(shuō)明。

用 inetd 設(shè)置網(wǎng)絡(luò)

如果不需要網(wǎng)絡(luò)訪問(wèn),CVS 可以運(yùn)行于本地。對(duì)于遠(yuǎn)程訪問(wèn),在 /etc/inetd.conf (Suse 為 /etc/xinetd.d/cvs)中配置如下行,可讓守護(hù)進(jìn)程 inetd 啟動(dòng) pserver:

cvspserver  stream  tcp  nowait  cvs  /usr/bin/cvs  cvs \
--allow-root=/usr/local/cvs pserver

這是個(gè)用來(lái)阻斷從 internet 訪問(wèn) cvs 端口的好方法,可使用 ssh 隧道來(lái)遠(yuǎn)程的訪問(wèn) repository。

單獨(dú)認(rèn)證

CVS 用戶可能不是操作系統(tǒng)的一部分(即不是本地用戶)。這其實(shí)可從安全的角度去看。簡(jiǎn)單的添加一個(gè)叫 passwd (in the CVSROOT directory) 的文件,其包含 crypt 格式的用戶登錄名和密碼。這也可以使用 apache 的 htpasswd 工具來(lái)完成。
_注意:_這個(gè) passwd 文件僅僅是文件,可以在 CVSROOT 中直接編輯。它不能被簽出。更多信息請(qǐng)用 htpasswd --help

# htpasswd -cb passwd user1 password1  # -c 創(chuàng)建文件
# htpasswd -b passwd user2 password2

現(xiàn)在添加 :cvs 到每行的結(jié)尾處,用來(lái)告訴 cvs 服務(wù)器更改用戶到 cvs (或任何你正在運(yùn)行的 cvs 服務(wù)器下)。它看起來(lái)像這樣:

# cat passwd
user1:xsFjhU22u8Fuo:cvs
user2:vnefJOsnnvToM:cvs

測(cè)試它

測(cè)試作為一般用戶登錄(比如我)

# cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs login
Logging in to :pserver:colin@192.168.50.254:2401/usr/local/cvs
CVS password:

CVSROOT 變量

這是個(gè)環(huán)境變量用來(lái)指定 repository 的位置。對(duì)于本地使用,該變量只需設(shè)置成 repository 的目錄。對(duì)于通過(guò)網(wǎng)絡(luò)使用,傳輸協(xié)議必須指定。使用 setenv CVSROOT string (csh, tcsh shell) 或者 export CVSROOT=string ( sh, bash shell) 設(shè)置 CVSROOT 環(huán)境變量。

# setenv CVSROOT :pserver:<username>@<host>:/cvsdirectory
For example:
# setenv CVSROOT /usr/local/cvs                               # 僅限本的使用
# setenv CVSROOT :local:/usr/local/cvs                        # 同上
# setenv CVSROOT :ext:user@cvsserver:/usr/local/cvs           # 通過(guò) SSH 直接訪問(wèn)
# setenv CVS_RSH ssh                                          # ext 協(xié)議訪問(wèn)
# setenv CVSROOT :pserver:user@cvsserver.254:/usr/local/cvs   # 通過(guò) pserver 網(wǎng)絡(luò)訪問(wèn)

一旦登錄成功就可導(dǎo)入一個(gè)新項(xiàng)目進(jìn) repository:cd 進(jìn)入你的項(xiàng)目根目錄

cvs import <module name> <vendor tag> <initial tag>
cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs import MyProject MyCompany START

在 repository 中有個(gè)名叫 MyProject 新項(xiàng)目(之后用來(lái)簽出)。CVS 會(huì)導(dǎo)入當(dāng)前目錄的內(nèi)容進(jìn)新項(xiàng)目。

簽出:

# cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs checkout MyProject
或者
# setenv CVSROOT :pserver:colin@192.168.50.254:/usr/local/cvs
# cvs checkout MyProject

通過(guò) SSH 隧道訪問(wèn) CVS

我們需要兩個(gè) shell 來(lái)做這個(gè)。在第一個(gè) shell 中,我們連接到 cvs 服務(wù)器并對(duì) cvs 連接進(jìn)行端口轉(zhuǎn)發(fā)(port-forward)。在第二個(gè) shell 中,我們就像在本地一樣使用 cvs。 
在 shell 1:

# ssh -L2401:localhost:2401 colin@cvs_server   # 直接連接到 cvs 服務(wù)器?;颍?# ssh -L2401:cvs_server:2401 colin@gateway     # 使用一個(gè)網(wǎng)關(guān)間接連接到 cvs 服務(wù)器

在 shell 2:

# setenv CVSROOT :pserver:colin@localhost:/usr/local/cvs
# cvs login
Logging in to :pserver:colin@localhost:2401/usr/local/cvs
CVS password:
# cvs checkout MyProject/src

CVS 命令及其使用

導(dǎo)入

該 import 命令用來(lái)添加整個(gè)目錄,它必須運(yùn)行于要導(dǎo)入的目錄中。比如,目錄 /devel/ 包含的所有文件和子目錄要導(dǎo)入。該目錄名在 CVS 中(模塊)將會(huì)稱為 "myapp"。

# cvs import [options] directory-name vendor-tag release-tag
# cd /devel                          # 必須在該目錄中來(lái)導(dǎo)入
# cvs import myapp Company R1_0      # 修訂(release)標(biāo)簽可以為任何單個(gè)單詞

在添加了一個(gè)新目錄 "/devel/tools/" 后,也可這么導(dǎo)入。

# cd /devel/tools
# cvs import myapp/tools Company R1_0

簽出、更新和提交

# cvs co myapp/tools                 # 僅會(huì)簽出 tools 目錄
# cvs co -r R1_1 myapp               # 簽出修訂版本為 R1_1 的 myapp (sticky)
# cvs -q -d update -P                # 典型的 CVS 更新
# cvs update -A                      # 重置所有 sticky 標(biāo)簽(或日期、選項(xiàng))
# cvs add newfile                    # 添加一個(gè)新文件
# cvs add -kb newfile                # 添加一個(gè)二進(jìn)制文件
# cvs commit file1 file2             # 僅提交這兩個(gè)文件
# cvs commit -m "message"            # 提交所有更改并為這個(gè)更改添加日志消息

創(chuàng)建一個(gè) patch

It is best to create and apply a patch from the working development directory related to the project, or from within the source directory.

# cd /devel/project
# diff -Naur olddir newdir > patchfile # Create a patch from a directory or a file
# diff -Naur oldfile newfile > patchfile

應(yīng)用一個(gè) patch

Sometimes it is necessary to strip a directory level from the patch, depending how it was created. In case of difficulties, simply look at the first lines of the patch and try -p0, -p1 or -p2.

# cd /devel/project
# patch --dry-run -p0 < patchfile    # Test the path without applying it
# patch -p0 < patchfile
# patch -p1 < patchfile              # strip off the 1st level from the path
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)