CVS使用手册
CVS使用手冊(cè)
作者:車東 發(fā)表于:2002-02-06 18:02 最后更新于:2008-02-15 22:02
版權(quán)聲明:可以任意轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明。
http://www.chedong.com/tech/cvs_card.html
CVS是一個(gè)C/S系統(tǒng),多個(gè)開發(fā)人員通過一個(gè)中心版本控制系統(tǒng)來記錄文件版本,從而達(dá)到保證文件同步的目的。工作模式如下:
?????? CVS服務(wù)器(文件版本庫)
???? /???? |?????? \
???? (版本同步)
?? /?????? |???????? \
開發(fā)者1? 開發(fā)者2?? 開發(fā)者3
作為一般開發(fā)人員挑選2,6看就可以了,CVS的管理員則更需要懂的更多一些,最后還簡(jiǎn)單介紹了一些Windows下的cvs客戶端使用,CVS遠(yuǎn)程用戶認(rèn)證的選擇及與BUG跟蹤系統(tǒng)等開發(fā)環(huán)境的集成問題。
1. CVS環(huán)境初始化:CVS環(huán)境的搭建管理員
2. CVS的日常使用:日常開發(fā)中最常用的CVS命令,開發(fā)人員管理員
3. CVS的分支開發(fā):項(xiàng)目按照不同進(jìn)度和目標(biāo)并發(fā)進(jìn)行管理員
4. CVS的用戶認(rèn)證:通過SSH的遠(yuǎn)程用戶認(rèn)證,安全,簡(jiǎn)單管理員
5. CVSWEB:CVS的WEB訪問界面大大提高代碼版本比較的效率管理員
6. CVS TAG:將$Id$ 加入代碼注釋中,方便開發(fā)過程的跟蹤開發(fā)人員
7. CVS vs VSS: CVS和Virsual SourceSafe的比較開發(fā)人員管理員
8. WinCVS:通過SSH認(rèn)證的WinCVS認(rèn)證設(shè)置
9. 基于CVSTrac的小組開發(fā)環(huán)境搭建:通過CVSTrac實(shí)現(xiàn)web界面的CVS用戶管理,集成的BUG跟蹤和WIKI交流
10.?? CVS中的用戶權(quán)限管理:基于系統(tǒng)用戶的CVS權(quán)限管理和基于CVSROOT/passwd的虛擬用戶管理
一個(gè)系統(tǒng)20%的功能往往能夠滿足80%的需求,CVS也不例外,以下是CVS最常用的功能,可能還不到它全部命令選項(xiàng)的20%,作為一般開發(fā)人員平時(shí)會(huì)用cvs update和cvs commit就夠了,更多的需求在實(shí)際應(yīng)用過程中自然會(huì)出現(xiàn),不時(shí)回頭看看相關(guān)文檔經(jīng)常有意外的收獲。
CVS環(huán)境初始化
環(huán)境設(shè)置:指定CVS庫的路徑CVSROOT
tcsh
setenv CVSROOT /path/to/cvsroot
bash
CVSROOT=/path/to/cvsroot ; export CVSROOT
后面還提到遠(yuǎn)程CVS服務(wù)器的設(shè)置:
CVSROOT=:ext:$USER@test.server.address#port:/path/to/cvsroot CVS_RSH=ssh; export CVSROOT CVS_RSH
初始化:CVS版本庫的初始化。
cvs init
一個(gè)項(xiàng)目的首次導(dǎo)入
cvs import -m "write some comments here" project_name vendor_tag release_tag
執(zhí)行后:會(huì)將所有源文件及目錄導(dǎo)入到/path/to/cvsroot/project_name目錄下
vender_tag: 開發(fā)商標(biāo)記
release_tag: 版本發(fā)布標(biāo)記
項(xiàng)目導(dǎo)出:將代碼從CVS庫里導(dǎo)出
cvs checkout project_name
cvs 將創(chuàng)建project_name目錄,并將最新版本的源代碼導(dǎo)出到相應(yīng)目錄中。這個(gè)checkout和Virvual SourceSafe中的check out不是一個(gè)概念,相對(duì)于Virvual SourceSafe的check out是cvs update, check in是cvs commit。
CVS的日常使用
?
注意:第一次導(dǎo)出以后,就不是通過cvs checkout來同步文件了,而是要進(jìn)入剛才cvs checkout project_name導(dǎo)出的project_name目錄下進(jìn)行具體文件的版本同步(添加,修改,刪除)操作。
將文件同步到最新的版本
cvs update
不制定文件名,cvs將同步所有子目錄下的文件,也可以制定某個(gè)文件名/目錄進(jìn)行同步
cvs update file_name
最好每天開始工作前或?qū)⒆约旱墓ぷ鲗?dǎo)入到CVS庫里前都要做一次,并養(yǎng)成“先同步后修改”的習(xí)慣,和Virvual SourceSafe不同,CVS里沒有文件鎖定的概念,所有的沖突是在commit之前解決,如果你修改過程中,有其他人修改并commit到了CVS 庫中,CVS會(huì)通知你文件沖突,并自動(dòng)將沖突部分用
>>>>>>
content on cvs server
<<<<<<
content in your file
>>>>>>
標(biāo)記出來,由你確認(rèn)沖突內(nèi)容的取舍。
版本沖突一般是在多個(gè)人修改一個(gè)文件造成的,但這種項(xiàng)目管理上的問題不應(yīng)該指望由CVS來解決。
確認(rèn)修改寫入到CVS庫里
cvs commit -m "write some comments here" file_name
注意:CVS的很多動(dòng)作都是通過cvs commit進(jìn)行最后確認(rèn)并修改的,最好每次只修改一個(gè)文件。在確認(rèn)的前,還需要用戶填寫修改注釋,以幫助其他開發(fā)人員了解修改的原因。如果不用寫-m "comments"而直接確認(rèn)`cvs commit file_name` 的話,cvs會(huì)自動(dòng)調(diào)用系統(tǒng)缺省的文字編輯器(一般是vi)要求你寫入注釋。
注釋的質(zhì)量很重要:所以不僅必須要寫,而且必須寫一些比較有意義的內(nèi)容:以方便其他開發(fā)人員能夠很好的理解
不好的注釋,很難讓其他的開發(fā)人員快速的理解:比如: -m "bug fixed" 甚至 -m ""
好的注釋,甚至可以用中文: -m "在用戶注冊(cè)過程中加入了Email地址校驗(yàn)"
修改某個(gè)版本注釋:每次只確認(rèn)一個(gè)文件到CVS庫里是一個(gè)很好的習(xí)慣,但難免有時(shí)候忘了指定文件名,把多個(gè)文件以同樣注釋commit到CVS庫里了,以下命令可以允許你修改某個(gè)文件某個(gè)版本的注釋:
cvs admin -m 1.3:"write some comments here" file_name
添加文件
創(chuàng)建好新文件后,比如:touch new_file
cvs add new_file
注意:對(duì)于圖片,Word文檔等非純文本的項(xiàng)目,需要使用cvs add -kb選項(xiàng)按2進(jìn)制文件方式導(dǎo)入(k表示擴(kuò)展選項(xiàng),b表示binary),否則有可能出現(xiàn)文件被破壞的情況
比如:
cvs add -kb new_file.gif
cvs add -kb readme.doc
如果關(guān)鍵詞替換屬性在首次導(dǎo)入時(shí)設(shè)置錯(cuò)了怎么辦?
cvs admin -kkv new_file.css
然后確認(rèn)修改并注釋
cvs ci -m "write some comments here"
刪除文件
將某個(gè)源文件物理刪除后,比如:rm file_name
cvs rm file_name
然后確認(rèn)修改并注釋
cvs ci -m "write some comments here"
以上面前2步合并的方法為:
cvs rm -f file_name
cvs ci -m "why delete file"
注意:很多cvs命令都有縮寫形式:commit=>ci; update=>up; checkout=>co/get; remove=>rm;
添加目錄
cvs add dir_name
查看修改歷史
cvs log file_name
cvs history file_name
查看當(dāng)前文件不同版本的區(qū)別
cvs diff -r1.3 -r1.5 file_name
查看當(dāng)前文件(可能已經(jīng)修改了)和庫中相應(yīng)文件的區(qū)別
cvs diff file_name
cvs的web界面提供了更方便的定位文件修改和比較版本區(qū)別的方法,具體安裝設(shè)置請(qǐng)看后面的cvsweb使用
正確的通過CVS恢復(fù)舊版本的方法:
如果用cvs update -r1.2 file.name
這個(gè)命令是給file.name加一個(gè)STICK TAG: "1.2" ,雖然你的本意只是想將它恢復(fù)到1.2版本
正確的恢復(fù)版本的方法是:cvs update -p -r1.2 file_name >file_name
如果不小心已經(jīng)加成STICK TAG的話:用cvs update -A 解決
移動(dòng)文件/文件重命名
cvs里沒有cvs move或cvs rename,因?yàn)檫@兩個(gè)操作是可以由先cvs remove old_file_name,然后cvs add new_file_name實(shí)現(xiàn)的。
刪除/移動(dòng)目錄
最方便的方法是讓管理員直接移動(dòng),刪除CVSROOT里相應(yīng)目錄(因?yàn)?span style="color:#333333">CVS一個(gè)項(xiàng)目下的子目錄都是獨(dú)立的,移動(dòng)到$CVSROOT目錄下都可以作為新的獨(dú)立項(xiàng)目:好比一顆樹,其實(shí)砍下任意一枝都能獨(dú)立存活),對(duì)目錄進(jìn)行了修改后,要求其開發(fā)人員重新導(dǎo)出項(xiàng)目cvs checkout project_name 或者用cvs update -dP同步。
項(xiàng)目發(fā)布導(dǎo)出不帶CVS目錄的源文件
做開發(fā)的時(shí)候你可能注意到了,每個(gè)開發(fā)目錄下,CVS都創(chuàng)建了一個(gè)CVS/目錄。里面有文件用于記錄當(dāng)前目錄和CVS庫之間的對(duì)應(yīng)信息。但項(xiàng)目發(fā)布的時(shí)候你一般不希望把文件目錄還帶著含有CVS信息的CVS目錄吧,這個(gè)一次性的導(dǎo)出過程使用cvs export命令,不過export只能針對(duì)一個(gè)TAG或者日期導(dǎo)出,比如:
cvs export -r release1 project_name
cvs export -D 20021023 project_name
cvs export -D now project_name
CVS Branch:項(xiàng)目多分支同步開發(fā)
確認(rèn)版本里程碑:多個(gè)文件各自版本號(hào)不一樣,項(xiàng)目到一定階段,可以給所有文件統(tǒng)一指定一個(gè)階段里程碑版本號(hào),方便以后按照這個(gè)階段里程碑版本號(hào)導(dǎo)出項(xiàng)目,同時(shí)也是項(xiàng)目的多個(gè)分支開發(fā)的基礎(chǔ)。
cvs tag release_1_0
開始一個(gè)新的里程碑:
cvs commit -r 2 標(biāo)記所有文件開始進(jìn)入2.x的開發(fā)
注意:CVS里的revsion和軟件包的發(fā)布版本可以沒有直接的關(guān)系。但所有文件使用和發(fā)布版本一致的版本號(hào)比較有助于維護(hù)。
版本分支的建立
在開發(fā)項(xiàng)目的2.x版本的時(shí)候發(fā)現(xiàn)1.x有問題,但2.x又不敢用,則從先前標(biāo)記的里程碑:release_1_0導(dǎo)出一個(gè)分支 release_1_0_patch
cvs rtag -b -r release_1_0 release_1_0_patch proj_dir
一些人先在另外一個(gè)目錄下導(dǎo)出release_1_0_patch這個(gè)分支:解決1.0中的緊急問題,
cvs checkout -r release_1_0_patch
而其他人員仍舊在項(xiàng)目的主干分支2.x上開發(fā)
在release_1_0_patch上修正錯(cuò)誤后,標(biāo)記一個(gè)1.0的錯(cuò)誤修正版本號(hào)
cvs tag release_1_0_patch_1
如果2.0認(rèn)為這些錯(cuò)誤修改在2.0里也需要,也可以在2.0的開發(fā)目錄下合并release_1_0_patch_1中的修改到當(dāng)前代碼中:
cvs update -j release_1_0_patch_1
CVS的遠(yuǎn)程認(rèn)證通過SSH遠(yuǎn)程訪問CVS
使用cvs本身基于pserver的遠(yuǎn)程認(rèn)證很麻煩,需要定義服務(wù)器和用戶組,用戶名,設(shè)置密碼等,
常見的登陸格式如下:
cvs -d :pserver:cvs_user_name@cvs.server.address:/path/to/cvsroot login
例子:
cvs -d :pserver:cvs@samba.org:/cvsroot login
不是很安全,因此一般是作為匿名只讀CVS訪問的方式。從安全考慮,通過系統(tǒng)本地帳號(hào)認(rèn)證并通過SSH傳輸是比較好的辦法,通過在客戶機(jī)的/etc/profile里設(shè)置一下內(nèi)容:
CVSROOT=:ext:$USER@cvs.server.address#port:/path/to/cvsroot CVS_RSH=ssh; export CVSROOT CVS_RSH
所有客戶機(jī)所有本地用戶都可以映射到CVS服務(wù)器相應(yīng)同名帳號(hào)了。
比如:
CVS服務(wù)器是192.168.0.3,上面CVSROOT路徑是/home/cvsroot,另外一臺(tái)開發(fā)客戶機(jī)是192.168.0.4,如果 tom在2臺(tái)機(jī)器上都有同名的帳號(hào),那么從192.168.0.4上設(shè)置了:
export CVSROOT=:ext:tom@192.168.0.3:/home/cvsroot
export CVS_RSH=ssh
tom就可以直接在192.168.0.4上對(duì)192.168.0.3的cvsroot進(jìn)行訪問了(如果有權(quán)限的話)
cvs checkout project_name
cd project_name
cvs update
...
cvs commit
如果CVS所在服務(wù)器的SSH端口不在缺省的22,或者和客戶端與CVS服務(wù)器端SSH缺省端口不一致,有時(shí)候設(shè)置了:
:ext:$USER@test.server.address#port:/path/to/cvsroot
仍然不行,比如有以下錯(cuò)誤信息:
ssh: test.server.address#port: Name or service not known
cvs [checkout aborted]: end of file from server (consult above messages if any)
解決的方法是做一個(gè)腳本指定端口轉(zhuǎn)向(不能使用alias,會(huì)出找不到文件錯(cuò)誤):
創(chuàng)建一個(gè)/usr/bin/ssh_cvs文件,假設(shè)遠(yuǎn)程服務(wù)器的SSH端口是非缺省端口:34567
#!/bin/sh
/usr/bin/ssh -p 34567 "$@"
然后:chmod +x /usr/bin/ssh_cvs
并CVS_RSH=ssh_cvs; export CVS_RSH
注意:port是指相應(yīng)服務(wù)器SSH的端口,不是指cvs專用的pserver的端口
CVSWEB:提高文件瀏覽效率
CVSWEB就是CVS的WEB界面,可以大大提高程序員定位修改的效率:
使用的樣例可以看:http://www.freebsd.org/cgi/cvsweb.cgi
CVSWEB的下載:CVSWEB從最初的版本已經(jīng)演化出很多功能界面更豐富的版本,這個(gè)是我個(gè)人感覺安裝設(shè)置比較方便的:
原先在:http://www.spaghetti-code.de/software/linux/cvsweb/,但目前已經(jīng)刪除,目前仍可以在本站下載CVSWEB,其實(shí)最近2年FreeBSD的CVSWeb項(xiàng)目已經(jīng)有了更好的發(fā)展吧,而當(dāng)初沒有用FreeBSD那個(gè)版本主要就是因?yàn)闆]有彩色的文件Diff功能。
下載解包:
tar zxf cvsweb.tgz
把配置文件cvsweb.conf放到安全的地方(比如和apache的配置放在同一個(gè)目錄下),
修改:cvsweb.cgi讓CGI找到配置文件:
$config = $ENV{'CVSWEB_CONFIG'} || '/path/to/apache/conf/cvsweb.conf';
轉(zhuǎn)到/path/to/apache/conf下并修改cvsweb.conf:
1. 修改CVSROOT路徑設(shè)置:
%CVSROOT = (
'Development' => '/path/to/cvsroot', #<==修改指向本地的CVSROOT
);
2. 缺省不顯示已經(jīng)刪除的文檔:
"hideattic" => "1",#<==缺省不顯示已經(jīng)刪除的文檔
3. 在配置文件cvsweb.conf中還可以定制頁頭的描述信息,你可以修改$long_intro成你需要的文字
CVSWEB可不能隨便開放給所有用戶,因此需要使用WEB用戶認(rèn)證:
先生成 passwd:
/path/to/apache/bin/htpasswd -c cvsweb.passwd user
修改httpd.conf: 增加
<Directory "/path/to/apache/cgi-bin/cvsweb/">
AuthName "CVS Authorization"
AuthType Basic
AuthUserFile /path/to/cvsweb.passwd
require valid-user
</Directory>
CVS TAGS: $Id$
將$Id$ 加在程序文件開頭的注釋里是一個(gè)很好的習(xí)慣,cvs能夠自動(dòng)解釋更新其中的內(nèi)容成:file_name version time user_name 的格式,比如:cvs_card.txt,v 1.1 2002/04/05 04:24:12 chedong Exp,可以這些信息了解文件的最后修改人和修改時(shí)間。
幾個(gè)常用的缺省文件:
default.php
<?php
/*
?* Copyright (c) 2002 Company Name.
?* $Header$
?*/
?>
====================================
Default.java: 注意文件頭一般注釋用 /* 開始 JAVADOC注釋用 /** 開始的區(qū)別
/*
?* Copyright (c) 2002 MyCompany Name.
?* $Header$
?*/
package com.mycompany;
import java.;
/**
?* comments here
?*/
public class Default {
??? /**
???? * Comments here
???? * @param
???? * @return
???? */
??? public toString() {
??? }
}
====================================
default.pl:
#!/usr/bin/perl -w
# Copyright (c) 2002 Company Name.
# $Header$
# file comments here
use strict;
CVS vs VSS
CVS沒有文件鎖定模式,VSS在check out同時(shí),同時(shí)記錄了文件被導(dǎo)出者鎖定。
CVS的update和commit, VSS是get_lastest_version和check in
對(duì)應(yīng)VSS的check out/undo check out的CVS里是edit和unedit
在CVS中,標(biāo)記自動(dòng)更新功能缺省是打開的,這樣也帶來一個(gè)潛在的問題,就是不用-kb方式添加binary文件的話在cvs自動(dòng)更新時(shí)可能會(huì)導(dǎo)致文件失效。
$Header$ $Date$這樣的標(biāo)記在Virsual SourceSafe中稱之為Keyword Explaination,缺省是關(guān)閉的,需要通過OPITION打開,并指定需要進(jìn)行源文件關(guān)鍵詞掃描的文件類型:*.txt,*.java, *.html...
對(duì)于Virsual SourceSafe和CVS都通用的TAG有:
$Header$
$Author$
$Date$
$Revision$
我建議盡量使用通用的關(guān)鍵詞保證代碼在CVS和VSS都能方便的跟蹤。
WinCVS
下載:
cvs Windows客戶端:目前穩(wěn)定版本為1.2
http://cvsgui.sourceforge.net
ssh Windows客戶端
http://www.networksimplicity.com/openssh/
安裝好以上2個(gè)軟件以后:
WinCVS客戶端的admin==>preference設(shè)置
1 在general選單里
設(shè)置CVSROOT: username@192.168.0.123:/home/cvsroot
設(shè)置Authorization: 選擇SSH server
2 Port選單里
鉤上:check for alternate rsh name
并設(shè)置ssh.exe的路徑,缺省是裝在 C:\Program Files\NetworkSimplicity\ssh\ssh.exe
然后就可以使用WinCVS進(jìn)行cvs操作了,所有操作都會(huì)跳出命令行窗口要求你輸入服務(wù)器端的認(rèn)證密碼。
當(dāng)然,如果你覺得這樣很煩的話,還有一個(gè)辦法就是生成一個(gè)沒有密碼的公鑰/私鑰對(duì),并設(shè)置CVS使用基于公鑰/私鑰的SSH認(rèn)證(在general 選單里)。
可以選擇的diff工具:examdiff
下載:
http://www.prestosoft.com/examdiff/examdiff.htm
還是在WinCVS菜單admin==>preference的WinCVS選單里
選上:Externel diff program
并設(shè)置diff工具的路徑,比如:C:\Program Files\ed16i\ExamDiff.exe
在對(duì)文件進(jìn)行版本diff時(shí),第一次需要將窗口右下角的use externel diff選上。
基于CVSTrac的小組開發(fā)環(huán)境搭建
作為一個(gè)小組級(jí)的開發(fā)環(huán)境,版本控制系統(tǒng)和BUG跟蹤系統(tǒng)等都涉及到用戶認(rèn)證部分。如何方便的將這些系統(tǒng)集成起來是一個(gè)非常困難的事情,畢竟我們不能指望 Linux下有像Source Offsite那樣集成度很高的版本控制/BUG跟蹤集成系統(tǒng)。
我個(gè)人是很反對(duì)使用pserver模式的遠(yuǎn)程用戶認(rèn)證的,但如果大部分組員使用WINDOWS客戶端進(jìn)行開發(fā)的話,總體來說使用 CVSROOT/passwd認(rèn)證還是很難避免的,但CVS本身用戶的管理比較麻煩。本來我打算自己用perl寫一個(gè)管理界面的,直到我發(fā)現(xiàn)了 CVSTrac:一個(gè)基于WEB界面的BUG跟蹤系統(tǒng),它外掛在CVS系統(tǒng)上的BUG跟蹤系統(tǒng),其中就包括了WEB界面的CVSROOT/passwd文件的管理,甚至還集成了WIKIWIKI討論組功能。
這里首先說一下CVS的pserver模式下的用戶認(rèn)證,CVS的用戶認(rèn)證服務(wù)是基于inetd中的:
cvspserver stream tcp nowait apache /usr/bin/cvs cvs --allow-root=/home/cvsroot pserver
一般在2401端口(這個(gè)端口號(hào)很好記:49的平方)
CVS用戶數(shù)據(jù)庫是基于CVSROOT/passwd文件,文件格式:
[username]:[crypt_password]:[mapping_system_user]
由于密碼都用的是UNIX標(biāo)準(zhǔn)的CRYPT加密,這個(gè)passwd文件的格式基本上是apache的htpasswd格式的擴(kuò)展(比APACHE的 PASSWD文件多一個(gè)系統(tǒng)用戶映射字段),所以這個(gè)文件最簡(jiǎn)單的方法可以用
apache/bin/htpasswd -b myname mypassword
創(chuàng)建。注意:通過htpasswd創(chuàng)建出來的文件會(huì)沒有映射系統(tǒng)用戶的字段
例如:
new:geBvosup/zKl2
setup:aISQuNAAoY3qw
test:hwEpz/BX.rEDU
映射系統(tǒng)用戶的目的在于:你可以創(chuàng)建一個(gè)專門的CVS服務(wù)帳號(hào),比如用apache的運(yùn)行用戶apache,并將/home/cvsroot目錄下的所有權(quán)限賦予這個(gè)用戶,然后在passwd文件里創(chuàng)建不同的開發(fā)用戶帳號(hào),但開發(fā)用戶帳號(hào)最后的文件讀寫權(quán)限都映射為apache用戶,在SSH模式下多個(gè)系統(tǒng)開發(fā)用戶需要在同一個(gè)組中才可以相互讀寫CVS庫中的文件。
進(jìn)一步的,你可以將用戶分別映射到apache這個(gè)系統(tǒng)用戶上。
new:geBvosup/zKl2:apache
setup:aISQuNAAoY3qw:apache
test:hwEpz/BX.rEDU:apache
CVSTrac很好的解決了CVSROOT/passwd的管理問題,而且包含了BUG跟蹤報(bào)告系統(tǒng)和集成WIKIWIKI交流功能等,使用的 CGI方式的安裝,并且基于GNU Public License:
在inetd里加入cvspserver服務(wù):
cvspserver stream tcp nowait apache /usr/bin/cvs cvs --allow-root=/home/cvsroot pserver
xietd的配置文件:%cat cvspserver
service cvspserver
{
disable = no
socket_type = stream
wait = no
user = apache
server = /usr/bin/cvs
server_args = -f --allow-root=/home/cvsroot pserver
log_on_failure += USERID
}
注意:這里的用戶設(shè)置成apache目的是和/home/cvsroot的所有用戶一致,并且必須讓這個(gè)這個(gè)用戶對(duì)/home/cvsroot/下的 CVSROOT/passwd和cvstrac初始化生成的myproj.db有讀取權(quán)限。
?
安裝過程
1. 下載:可以從http://www.cvstrac.org下載
我用的是已經(jīng)在Linux上編譯好的應(yīng)用程序包:cvstrac-1.1.2.bin.gz,
%gzip -d cvstrac-1.1.2.bin.gz
%chmod +x cvstrac-1.1.2.bin
#mv cvstarc-1.1.1.bin /usr/bin/cvstrac
如果是從源代碼編譯:
從 http://www.sqlite.org/download.html 下載SQLITE的rpm包:
rpm -i sqlite-devel-2.8.6-1.i386.rpm
從 ftp://ftp.cvstrac.org/cvstrac/ 下載軟件包
解包,假設(shè)解包到/home/chedong/cvstrac-1.1.2下,并規(guī)劃將cvstrac安裝到/usr/local/bin目錄下, cd /home/chedong/cvstrac-1.1.2 編輯linux-gcc.mk:
修改:
SRCDIR = /home/chedong/cvstrac-1.1.2
INSTALLDIR = /usr/local/bin
然后
mv linux-gcc.mk Makefile
make
#make install
2. 初始化cvstrac數(shù)據(jù)庫:假設(shè)數(shù)據(jù)庫名是 myproj
在已經(jīng)裝好的CVS服務(wù)器上(CVS庫這時(shí)候應(yīng)該已經(jīng)是初始化好了,比如:cvs init初始化在/home/cvsroot里),運(yùn)行一下
%cvstrac init /home/cvsroot myproj
運(yùn)行后,/home/cvsroot里會(huì)有一個(gè)的myproj.db庫,使用CVSTRAC服務(wù),/home/cvsroot/myproj.db /home/cvsroot/CVSROOT/readers /home/cvsroot/CVSROOT/writers /home/cvsroot/CVSROOT/passwd這幾個(gè)文件對(duì)于web服務(wù)的運(yùn)行用戶應(yīng)該是可寫的,在RedHat8上,缺省就有一個(gè)叫 apache用戶和一個(gè)apache組,所以在httpd.conf文件中設(shè)置了用apache用戶運(yùn)行web服務(wù):
User apache
Group apache,
然后設(shè)置屬于apache用戶和apache組
#chown -R apache:apache /home/cvsroot
-rw-r--r-- 1 apache apache 55296 Jan 5 19:40 myproj.db
drwxrwxr-x 3 apache apache 4096 Oct 24 13:04 CVSROOT/
drwxrwxr-x 2 apache apache 4096 Aug 30 19:47 some_proj/
此外還在/home/cvsroot/CVSROOT中設(shè)置了:
chmod 664 readers writers passwd
3. 在apche/cgi-bin目錄中創(chuàng)建腳本cvstrac:
#!/bin/sh
/usr/bin/cvstrac cgi /home/cvsroot
設(shè)置腳本可執(zhí)行:
chmod +x /home/apache/cgi-bin/cvstrac
4. 從 http://cvs.server.address/cgi-bin/cvstrac/myproj 進(jìn)入管理界面
缺省登錄名:setup 密碼 setup
對(duì)于一般用戶可以從:
http://cvs.server.address/cgi-bin/cvstrac/myproj
5. 在setup中重新設(shè)置了CVSROOT的路徑后,/home/cvsroot
如果是初次使用需要在/home/cvsroot/CVSROOT下創(chuàng)建passwd, readers, writers文件
touch passwd readers writers
然后設(shè)置屬于apache用戶,
chown apache.apache passwd readers writers
這樣使用setup用戶創(chuàng)建新用戶后會(huì)同步更新CVSROOT/passwd下的帳號(hào)
修改登錄密碼,進(jìn)行BUG報(bào)告等,
更多使用細(xì)節(jié)可以在使用中慢慢了解。
對(duì)于前面提到的WinCVS在perference里設(shè)置:
CVSROOT欄輸入:username@ip.address.of.cvs:/home/cvsroot
Authenitication選擇:use passwd file on server side
就可以了從服務(wù)器上進(jìn)行CVS操作了。
CVS的用戶權(quán)限管理
CVS的權(quán)限管理分2種策略:
·?? 基于系統(tǒng)文件權(quán)限的系統(tǒng)用戶管理:適合多個(gè)在Linux上使用系統(tǒng)帳號(hào)的開發(fā)人員進(jìn)行開發(fā)。
·?? 基于CVSROOT/passwd的虛擬用戶管理:適合多個(gè)在Windows平臺(tái)上的開發(fā)人員將帳號(hào)映射成系統(tǒng)帳號(hào)使用。
為什么使用apache/apache用戶?首先RedHat8中缺省就有了,而且使用這個(gè)用戶可以方便通過cvstrac進(jìn)行WEB管理。
chown -R apache.apache /home/cvsroot
chmod 775 /home/cvsroot
Linux上通過ssh連接CVS服務(wù)器的多個(gè)開發(fā)人員:通過都屬于apache組實(shí)現(xiàn)文件的共享讀寫
開發(fā)人員有開發(fā)服務(wù)器上的系統(tǒng)帳號(hào):sysuser1 sysuser2,設(shè)置讓他們都屬于apache組,因?yàn)橥ㄟ^cvs新導(dǎo)入的項(xiàng)目都是對(duì)組開放的:664權(quán)限的,這樣無論那個(gè)系統(tǒng)用戶導(dǎo)入的項(xiàng)目文件,只要文件的組宿主是apache,所有其他同組系統(tǒng)開發(fā)用戶就都可以讀寫;基于ssh遠(yuǎn)程認(rèn)證的也是一樣。
? ?apache(system group)
/ ? ? ? ? ? ?| ? ? ? ? ? \
sysuser1 ? sysuser2 ? ? sysuser3
Windows上通過cvspserver連接CVS服務(wù)器的多個(gè)開發(fā)人員:通過在passwd文件種映射成 apache用戶實(shí)現(xiàn)文件的共享讀寫
他們的帳號(hào)通過CVSROOT/passwd和readers writers這幾個(gè)文件管理;通過cvstrac設(shè)置所有虛擬用戶都映射到apache用戶上即可。
? ?apache(system user)
/ ? ? ? ? ? ?| ? ? ? ? ? ?\
windev1 ? ? windev2 ? ? ?windev3? ? ? ? ? ? ?
?
?
利用CVS WinCVS/CVSWeb/CVSTrac 構(gòu)成了一個(gè)相對(duì)完善的跨平臺(tái)工作組開發(fā)版本控制環(huán)境。
相關(guān)資源:
CVS HOME:
http://www.cvshome.org
CVS FAQ:
http://www.loria.fr/~molli/cvs-index.html
相關(guān)網(wǎng)站:
http://directory.google.com/Top/Computers/Software/Configuration_Management/Tools/Concurrent_Versions_System/
CVS--并行版本系統(tǒng)
http://www.soforge.com/cvsdoc/zh_CN/book1.html
CVS 免費(fèi)書:
http://cvsbook.red-bean.com/
CVS命令的速查卡片 refcards.com/refcards/cvs/
WinCVS:
http://cvsgui.sourceforge.net/
CVSTrac: A Web-Based Bug And Patch-Set Tracking System For CVS
http://www.cvstrac.org
StatCVS:基于CVS的代碼統(tǒng)計(jì)工具:按代碼量,按開發(fā)者的統(tǒng)計(jì)表等
http://sourceforge.net/projects/statcvs
如何在WEB開發(fā)中規(guī)劃CVS上:在Google上查 "cvs web development"
http://ccm.redhat.com/bboard-archive/cvs_for_web_development/index.html
一些集成了CVS的IDE環(huán)境:
Eclipse
- Eclipse, CVS使用指南(轉(zhuǎn))
版權(quán)聲明:轉(zhuǎn)載時(shí)請(qǐng)以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明
http://hrbyzq.blogbus.com/logs/20754969.html
本文概述了 Eclipse 平臺(tái)如何支持軟件項(xiàng)目中的源代碼版本控制。首先,我們將簡(jiǎn)要討論一下團(tuán)隊(duì)代碼開發(fā)的思想,然后研究 Eclipse 如何使用 CVS 代碼資源庫。我們還將研究一些源代碼管理軟件工具,可以通過 Eclipse 插件擴(kuò)展來支持這些工具。
在團(tuán)隊(duì)項(xiàng)目中共享源代碼
現(xiàn)今的大多數(shù)應(yīng)用程序是由多人組成的團(tuán)隊(duì)開發(fā)的。即使只涉及幾個(gè)開發(fā)人員的小項(xiàng)目,也需要對(duì)源代碼的更改進(jìn)行嚴(yán)格控制。這就是源代碼管理軟件的任務(wù)。源代碼版本控制軟件必須支持兩個(gè)核心功能:
提供一種方法,能夠協(xié)調(diào)對(duì)源代碼的更改,并能集成這些更改
團(tuán)隊(duì)所提交工作的歷史記錄
當(dāng)團(tuán)隊(duì)成員完成新的工作時(shí),通過將這些更改提交到資源庫來共享他們的工作。類似地,當(dāng)他們希望獲得最新可用的工作成果時(shí),就可以根據(jù)資源庫中的更改,更新自己的本地工作空間。這意味著項(xiàng)目資源庫會(huì)因團(tuán)隊(duì)成員提交新工作成果而經(jīng)常發(fā)生更改。換句話說,資源庫應(yīng)該表示項(xiàng)目的當(dāng)前狀態(tài)。任何時(shí)候,團(tuán)隊(duì)成員都要能夠根據(jù)資源庫更新自己的工作空間,并確信它們是最新的。
維護(hù)歷史記錄也很重要,那樣就可以將當(dāng)前工作與先前版本進(jìn)行比較,如有必要,還可以回復(fù)到先前版本。協(xié)調(diào)團(tuán)隊(duì)的工作,以便只存在唯一的當(dāng)前項(xiàng)目狀態(tài)定義,以及包含團(tuán)隊(duì)已集成的工作,這些對(duì)于管理版本控制也是十分必要的。這種協(xié)調(diào)有可能是最難實(shí)現(xiàn)的目標(biāo)。
最理想的模型是:團(tuán)隊(duì)的任何成員都可以對(duì)自己有權(quán)訪問的任何資源進(jìn)行更改。因?yàn)閮蓚€(gè)團(tuán)隊(duì)成員可以提交對(duì)同一資源的更改,所以有可能發(fā)生沖突,必須解決這種沖突。這種模型假定沖突具有唯一性。但遺憾的是,沒有任何源代碼是孤立地存在的;通常它包含與其它資源隱式或顯式的相關(guān)性。源代碼引用了在其它源代碼資源中描述的構(gòu)件。但源代碼管理軟件的工作就到此為止了,因?yàn)樗⒉荒苋〈?xiàng)目管理。項(xiàng)目管理者必須履行其職責(zé):協(xié)調(diào)其它成員的工作以及負(fù)責(zé)進(jìn)度、項(xiàng)目階段和發(fā)布日期。此外,源代碼管理也不能替代開發(fā)人員之間的交流。
Eclipse 平臺(tái)如何支持代碼管理
Eclipse 平臺(tái)提供了作為團(tuán)隊(duì)在軟件項(xiàng)目中共享代碼和工作的能力。Eclipse 廣泛地支持各種代碼管理解決方案,這要?dú)w功于它的插件體系結(jié)構(gòu)(不過,現(xiàn)已推出了對(duì) CVS 的支持)。Eclipse 平臺(tái)體系結(jié)構(gòu)的重點(diǎn)在于工作空間。工作空間維護(hù)構(gòu)建和測(cè)試軟件項(xiàng)目所需的一切。它包含對(duì)象(源代碼和資源)。它還保存了用于項(xiàng)目、IDE 和插件的配置設(shè)置。工作空間是在開發(fā)人員的機(jī)器上本地進(jìn)行維護(hù)的,而團(tuán)隊(duì)通過外部資源庫進(jìn)行協(xié)作,不同開發(fā)人員的代碼在資源庫進(jìn)行匯集。可以經(jīng)由因特網(wǎng)通過“客戶機(jī)-服務(wù)器”體系結(jié)構(gòu)訪問資源庫。
Eclipse 平臺(tái)提供了對(duì)于直接從工作空間進(jìn)行團(tuán)隊(duì)開發(fā)操作的支持。這種支持允許開發(fā)人員并發(fā)地與幾個(gè)獨(dú)立的資源庫以及不同版本的代碼或項(xiàng)目進(jìn)行交互。工作空間中的資源允許團(tuán)隊(duì)支持組件處理版本和配置管理問題。當(dāng)然,單個(gè)工作空間可以同時(shí)訪問不同類型的資源庫。Eclipse 平臺(tái)并沒有提供它自己的代碼管理解決方案;它總是依靠外部系統(tǒng)。Eclipse 平臺(tái)只對(duì)一個(gè)(但也是最流行的一個(gè))源代碼管理系統(tǒng)提供內(nèi)置支持:并發(fā)版本控制系統(tǒng)(Concurrent Versions System,CVS)。對(duì)第三方代碼管理應(yīng)用程序的支持一節(jié)中描述了使用第三方插件支持其它資源庫。
CVS 是什么?
CVS 誕生于 1986 年,當(dāng)時(shí)作為一組 shell 腳本而出現(xiàn),但它現(xiàn)在已經(jīng)發(fā)展成了最流行的針對(duì)軟件開發(fā)人員的源代碼版本管理解決方案。CVS 是用于代碼版本管理的開放源碼的客戶機(jī)/服務(wù)器解決方案,它可用于各種平臺(tái),包括 Linux 和 Windows NT/2000/XP。請(qǐng)參閱本文末尾的參考資料,其中有 CVS 客戶機(jī)、服務(wù)器和源代碼的下載鏈接。
通常,CVS 的主要功能是記錄源文件的歷史。當(dāng)一組開發(fā)人員從事同一個(gè)項(xiàng)目時(shí),CVS 將他們彼此隔離開來。每個(gè)開發(fā)人員都在他/她自己的目錄中獨(dú)立工作,然后使用 CVS 資源庫(不時(shí)地)合并工作結(jié)果。
Eclipse 擁有與 Eclipse 平臺(tái) IDE 緊密集成的內(nèi)置 CVS 客戶機(jī),它是作為一個(gè)單獨(dú)透視圖(CVS Repository Exploring 透視圖)而實(shí)現(xiàn)的,用于與 CVS 的交互。用于 CVS 的通用 Eclipse 設(shè)置(General Eclipse settings for CVS)位于 Window -> Preferences window -> Team 下。在切換到 CVS Repository Exploring 透視圖之后,就可以使用所有 CVS 操作了(轉(zhuǎn)至 Window -> Open Perspective -> Other -> CVS Repository Exploring。
先設(shè)置資源庫的位置,它將定義用于選定 CVS 服務(wù)器/資源庫的連接參數(shù)。
Eclipse/CVS 的源代碼工作流
在 CVS 團(tuán)隊(duì)協(xié)作模型中,團(tuán)隊(duì)成員彼此獨(dú)立地在他們各自的工作臺(tái)上完成自己的所有工作。最后,他們希望共享其工作。他們通過 CVS 資源庫實(shí)現(xiàn)這一點(diǎn)。CVS 使用分支(branch)模型來支持彼此獨(dú)立而又高度相互依賴的多個(gè)工作流程(course of work)。這些分支是開發(fā)團(tuán)隊(duì)用來共享和集成正在進(jìn)行中的工作的地方。可以認(rèn)為分支是一個(gè)共享的工作臺(tái),當(dāng)團(tuán)隊(duì)成員對(duì)源代碼進(jìn)行更改時(shí)就更新這個(gè)工作臺(tái)。這個(gè)模型允許從事 CVS 團(tuán)隊(duì)項(xiàng)目的每個(gè)開發(fā)人員在進(jìn)行更改時(shí)與其他成員共享其工作,以及在項(xiàng)目進(jìn)展期間訪問其他成員的工作。
一個(gè)稱為 HEAD 的特殊分支用來表示資源庫中的主要工作流程(HEAD 通常被稱為主干)。當(dāng)團(tuán)隊(duì)成員將資源提交給該分支時(shí),會(huì)影響這些相關(guān)性。確保相關(guān)性的完整性是很重要的,因?yàn)樵摲种П硎玖水?dāng)前項(xiàng)目的狀態(tài)。當(dāng)然,任何時(shí)候,團(tuán)隊(duì)成員都可以使用該分支的內(nèi)容作為新工作的基礎(chǔ)。
那些規(guī)則不僅適用于 CVS:無論使用哪種版本控制軟件,團(tuán)隊(duì)項(xiàng)目中都有一些用于源代碼管理的常見步驟。下面是一個(gè)使用 Eclipse 內(nèi)置的 CVS 支持的示例工作流:
1. 啟動(dòng)新的團(tuán)隊(duì)項(xiàng)目
每個(gè)新的空 Eclipse 項(xiàng)目都可以通過 CVS(或受支持的任何其它源代碼管理系統(tǒng))進(jìn)行共享。開發(fā)人員也可以通過將其現(xiàn)有的代碼遷移到資源庫來共享它。要進(jìn)行共享,單擊項(xiàng)目主文件夾,在顯示的上下文菜單中使用 Team -> Share Project 選項(xiàng)
另一個(gè)選項(xiàng)是通過從選定的 CVS 資源庫分支導(dǎo)入代碼來創(chuàng)建新的工作臺(tái)項(xiàng)目。只要選擇適當(dāng)分支(或 HEAD),然后選擇從 CVS Repository Exploring 透視圖中的上下文菜單中選擇“Checkout As Project”選項(xiàng)
2. 使用代碼并進(jìn)行更改
開發(fā)人員通過 Eclipse 工作臺(tái)在本地使用代碼,包括的工作有創(chuàng)建新資源、修改現(xiàn)有資源、編寫注釋,并在他們使用后在本地保存這些內(nèi)容。
3. 使本地更改與 CVS 資源庫同步
如果一個(gè)項(xiàng)目開發(fā)人員準(zhǔn)備提交他/她的工作,那么首先要執(zhí)行更新操作。這會(huì)針對(duì)引入的更改核對(duì)資源庫,并將這些更改添加到該開發(fā)人員的本地工作臺(tái)。這樣確保了開發(fā)人員知道這些更改可能會(huì)影響他/她將要提交的工作的完整性。使用項(xiàng)目上下文菜單中的 Compare With... 選項(xiàng)將本地版本與資源庫中存儲(chǔ)的代碼進(jìn)行比較
下一步是解決最后出現(xiàn)的任何沖突,并設(shè)法再次編譯代碼。如果一切正常,那么從項(xiàng)目上下文菜單使用 Team -> Commit... 選項(xiàng)執(zhí)行提交操作,如圖 6 所示。這會(huì)使所有更改都集成到資源庫中。
4. 管理資源庫
CVS 允許開發(fā)人員將更改隔離在開發(fā)的某些獨(dú)立路徑之內(nèi),這些路徑稱為分支。當(dāng)一個(gè)開發(fā)人員更改某個(gè)分支上的文件時(shí),這種更改不會(huì)出現(xiàn)在主干或其它分支上。那些分支被命名為子版本(subversion)或代碼分叉(code fork)。稍后,由合并操作將更改從一個(gè)分支遷移到另一個(gè)分支(或主干)。然后提交這些修訂。這樣就有效地將更改復(fù)制到了另一個(gè)分支上。使用項(xiàng)目上下文菜單的Team -> Branch...選項(xiàng),Eclipse 使開發(fā)分支之間的遷移變得容易。
當(dāng)然,當(dāng)開發(fā)團(tuán)隊(duì)維護(hù)大型資源庫時(shí),有必要控制項(xiàng)目?jī)?nèi)的提交和合并操作。Eclipse/CVS 集成提供了一種特殊的視圖:CVS Repository History(請(qǐng)參閱圖 7)。它給出了關(guān)于團(tuán)隊(duì)成員在資源庫中所執(zhí)行更改的快速預(yù)覽。
Eclipse 平臺(tái)提供了幾個(gè)支持代碼管理的實(shí)用程序。最有用的是補(bǔ)丁功能。它將出自兩個(gè)來源(譬如本地工作臺(tái)和資源庫)的代碼進(jìn)行比較,然后創(chuàng)建一個(gè)包含代碼差異的類似 UNIX 的補(bǔ)丁文件(請(qǐng)參閱圖 8)。可以將該文件發(fā)送給開發(fā)人員以將源代碼升級(jí)到最新版本。
5. 斷開項(xiàng)目與 CVS 的連接
當(dāng)項(xiàng)目開發(fā)已經(jīng)結(jié)束,并且團(tuán)隊(duì)希望凍結(jié)源代碼時(shí),可以從 HEAD 資源庫刪除該項(xiàng)目的最終版本。斷開項(xiàng)目與 CVS 的連接將在該項(xiàng)目及其資源上禁用資源庫操作,并刪除與該項(xiàng)目相關(guān)聯(lián)的 CVS 信息(這一操作是可選的)。
可以通過項(xiàng)目上下文菜單中的 Team -> Disconnect 選項(xiàng)執(zhí)行斷開連接操作。通過選擇這個(gè)選項(xiàng),會(huì)打開 Confirm Disconnect from CVS 對(duì)話框。在將該項(xiàng)目與資源庫的連接斷開之后,該團(tuán)隊(duì)必須確定如何處理 CVS 信息。第一個(gè)選項(xiàng)是“Delete the CVS meta information”;它將禁用 CVS 團(tuán)隊(duì)菜單操作并從文件系統(tǒng)中刪除 CVS 文件夾及其內(nèi)容。第二個(gè)選項(xiàng)是“Do not delete the CVS meta information”;它將禁用 CVS 團(tuán)隊(duì)菜單操作,但保留 CVS 元信息。
對(duì)第三方代碼管理應(yīng)用程序的支持
CVS 有幾個(gè)重要的限制:它不能確定單個(gè)文件或整個(gè)文件集范圍內(nèi)同時(shí)進(jìn)行的更改,它也不能檢測(cè)文件之間的邏輯沖突。其沖突概念純粹是文本意義上的,當(dāng)對(duì)于同一基本文件的兩個(gè)更改時(shí)間上非常非常接近,從而使合并命令受到干擾時(shí),就會(huì)發(fā)生沖突。CVS 也不能提供任何類似于消息傳遞這樣的交互式協(xié)作工具。幸運(yùn)的是,CVS 并不是 Eclipse 平臺(tái)所支持的唯一的源代碼管理軟件。開發(fā)人員可以通過插件擴(kuò)展 Eclipse 平臺(tái)的功能,而且目前(到 2003 年 3 月 4 日為止)已有 16 個(gè)可用于團(tuán)隊(duì)開發(fā)軟件的插件。所有插件都是由 Eclipse 社區(qū)或商業(yè)軟件供應(yīng)商創(chuàng)建的。這些插件中的大多數(shù)添加了對(duì)第三方、商業(yè)源代碼管理系統(tǒng)的支持。最有價(jià)值的插件是那些支持流行的企業(yè)代碼管理系統(tǒng)(如 Merant PVCS 和 Rational ClearCase)的插件。例如,CVS-SSH2 插件允許通過 SSH2 會(huì)話訪問 CVS,而 Microsoft Visual SourceSafe(VSS)團(tuán)隊(duì)提供程序插件添加了對(duì) MS VSS 產(chǎn)品的支持(也可以在諸如 Linux 這樣的非 Windows 平臺(tái)上使用)。
但是,我本人所偏愛的插件是 Koi(請(qǐng)參閱參考資料以獲取鏈接)。盡管它并非嚴(yán)格用于源代碼控制,但這個(gè)創(chuàng)新的工具給協(xié)作開發(fā)注入了許多新的活力。其當(dāng)前版本支持工作臺(tái)到工作臺(tái)的消息傳遞、共享標(biāo)記、沖突更改通知、共享日歷和事件通知。Koi 將 XML-RPC 用作其客戶機(jī)-服務(wù)器體系結(jié)構(gòu)中的通信模型。客戶機(jī)是與“協(xié)作服務(wù)器”通信的單個(gè) Eclipse 平臺(tái)實(shí)例,而協(xié)作服務(wù)器也是一個(gè) Eclipse 插件。Koi 使用以 JDBC 訪問的關(guān)系數(shù)據(jù)庫作為數(shù)據(jù)存儲(chǔ)。可在參考資料中找到指向完整的、經(jīng)過分類的 Eclipse 插件注冊(cè)表的鏈接。
參考資料
請(qǐng)參加 eclipse.org 上的 Eclipse 平臺(tái)社區(qū)。Eclipse 平臺(tái)源代碼遵循 Common Public License。Eclipse.org 還有一個(gè) Eclipse 項(xiàng)目的術(shù)語和描述詞匯表,以及技術(shù)文章和新聞組。Eclipse 平臺(tái)白皮書(可在 Eclipse.org 主頁獲取)詳細(xì)描述了 Eclipse 的主要組件和功能。
從 eclipse.org 下載 KOI 插件。
查看 Eclipse 插件的完整的、經(jīng)過分類的注冊(cè)表。
從 CVS 主頁或 LORIA 站點(diǎn)下載 CVS 客戶機(jī)、服務(wù)器和源代碼。
請(qǐng)參閱 developerWorks 文章“Working the Eclipse Platform”,以了解關(guān)于 Eclipse 平臺(tái)的背景知識(shí)。
請(qǐng)參閱 developerWorks 文章“Getting started with the Eclipse Platform”,這篇文章介紹了用 Eclipse 平臺(tái)以及使用 Eclipse 插件編輯、編譯和調(diào)試應(yīng)用程序。
請(qǐng)參閱 developerWorks 文章“開發(fā) Eclipse 插件”,這篇文章介紹了如何開發(fā) Eclipse 插件。
從 developerWorks 的這些文章中獲取關(guān)于 Eclipse 的更多信息:
在 developerWorks 開放源碼項(xiàng)目專區(qū)查找更多有關(guān) Eclipse 和開放源碼參考資料。
?
關(guān)于作者
Pawel Leszek 是 Studio B 的一位作家,他是一位專長(zhǎng)于 Linux/Win/Mac OS 系統(tǒng)體系結(jié)構(gòu)和管理的獨(dú)立軟件顧問和作家。他具有許多操作系統(tǒng)、編程語言和網(wǎng)絡(luò)協(xié)議方面的經(jīng)驗(yàn),尤其是 Lotus Domino 和 DB2 方面。Pawel 還在 LinuxWorld 上發(fā)表過一系列文章,他是 PC World 波蘭版的 Linux 專欄作家。Pawel 和他的妻子以及可愛的小女兒住在華沙。歡迎提問并提出意見;您可以通過 pawel.leszek@ipgate.pl 與 Pawel 聯(lián)系。
update 和 checkout 在執(zhí)行中,會(huì)為每個(gè)文件打印一行提示信息,文件的狀態(tài)通過前面的單個(gè)字符指明:
?
U file
文件按要求從倉庫得到更新。用在那些倉庫里面有但你的工作目錄沒有的文件,以及工作目錄里面沒有修改過,但舊于倉庫的文件。
?
P file
類似 `U',但是 cvs 服務(wù)器發(fā)送的是補(bǔ)丁而不是整個(gè)文件。完成與 `U' 同樣的工作,但降低帶寬的使用。
?
A file
添加到你的私人副本中,當(dāng)你使用 commit 后會(huì)加到倉庫。這可以提醒你需要提交文件。
?
R file
從你的私人副本中刪除,當(dāng)你執(zhí)行 commit 命令后會(huì)從倉庫清除。這可以提醒你文件需要提交。
?
M file
在你的工作目錄中,文件已經(jīng)修改。
`M' 可以標(biāo)明你工作的文件的兩種狀態(tài): 同樣的文件倉庫里面沒有修改,你的文件仍保持原樣; 或者倉庫里面的文件也有修改,但在工作目錄里成功合并,沒有沖突發(fā)生。
?
如果合并,cvs 將打印一些信息,并建立工作文件的備份(與 update 執(zhí)行前相同)。update 運(yùn)行時(shí)會(huì)打印相應(yīng)的名字。
?
?
C file
合并你與倉庫中修改到 file 時(shí)檢測(cè)到?jīng)_突。file (你工作目錄里面的副本) 是合并兩個(gè)修訂版的結(jié)果; 工作目錄里面還有未修改文件的副本,名為 .#file.revision,其中 revision 是你修改的文件所基于的修訂版。解決沖突見 Conflicts example 說明。 (注意,在有些系統(tǒng)里面,如果一段日子沒有訪問 .# 起頭的文件,系統(tǒng)會(huì)自動(dòng)清除。如果你需要保留這些原始的文件副本,最好將其改名) vms 系統(tǒng)中,文件名以 __ 開始,而不是 .#。
?
? file
file 處于工作目錄,但是倉庫里面沒有對(duì)應(yīng)的文件,它們也不是 cvs 忽略的文件(參見 `-I' 選項(xiàng)的說明,以及參閱 cvsignore)。
?
?
update的幾個(gè)常用參數(shù):
?
-D date
使用不遲于 date 的最新修訂版。這是一個(gè)粘性的選項(xiàng),含有 `-P'。見 Sticky tags,了解更多粘性標(biāo)簽/日期的信息。
?
-f
只與 `-D' 或 `-r' 標(biāo)識(shí)一起使用。如果沒有匹配的修訂版,獲取最新的修訂版(而不是忽略這些文件)。
?
-k kflag
根據(jù) kflag 處理關(guān)鍵字。參閱 Keyword substitution。此選項(xiàng)是粘性的; 以后在這個(gè)工作目錄里面更新,還是使用相同的 kflag。status 命令可以看到粘性的選項(xiàng)。參閱 Invoking CVS,了解 status 命令的信息。
?
-l
只在當(dāng)前工作目錄里面執(zhí)行。參閱 Recursive behavior.
?
-P
清除空目錄。參閱 Moving directories.
?
-p
管道方式輸出到標(biāo)準(zhǔn)輸出。
?
-R
遞歸方式檢出(默認(rèn))。參閱 Recursive behavior.
?
-r tag[:date]
獲得 rev 修訂版/標(biāo)簽,或者當(dāng) date 指定,并且 tag 是分支標(biāo)簽,分支 tag 上的版本可以當(dāng)作是在 date 上。此選項(xiàng)是粘性的,含`-P'。參閱 Sticky tags 和 Common options 了解更多粘性標(biāo)簽/日期的信息。
update 還有一些特殊的選項(xiàng)。
?
-A
重置任何的粘性標(biāo)簽,日期,或 `-k' 選項(xiàng)。參閱Sticky tags,了解更多粘性標(biāo)簽/日期的信息。
?
-C
用倉庫里面干凈的副本覆蓋本地的修改(但修改過的文件另存為 .#file.revision)。
?
-d
創(chuàng)建倉庫里面存在而工作目錄里面沒有的目錄。通常,update 只作用于你工作目錄里面已經(jīng)存在的文件和目錄。
此選項(xiàng)通常用來更新最初檢出創(chuàng)建的目錄; 但也有不好的副作用。如果你在建立工作目錄時(shí),刻意避免倉庫里面的某些目錄(通過模塊名,或在命令行上明確指定所需的文件和目錄),用 `-d' 選項(xiàng)更新將創(chuàng)建這些你不想要的目錄。
?
?
-I name
更新時(shí)忽略匹配 name 的文件(在工作目錄里面)。你可以在命令行上多次使用 `-I' 指定多個(gè)要忽略的文件。`-I !' 可以避免忽略任何文件。參閱 cvsignore, 了解 cvs 忽略文件的其他方式。
?
-Wspec
指定更新時(shí)需要過濾的文件名。你可以重復(fù)使用此選項(xiàng)。
spec 可以是文件名模板,與 .cvswrappers 文件里面的類型相同。參閱 Wrappers.
?
?
-jrevision
通過兩個(gè) `-j' 選項(xiàng),合并第一個(gè) `-j' 選項(xiàng)指定的修訂版至第二個(gè) `j' 選項(xiàng)修訂版的變更到工作目錄。
使用一個(gè) `-j' 選項(xiàng),合并最初的修訂版至 `-j' 選項(xiàng)指定修訂版的變更到工作目錄。最初的修訂版是工作目錄文件基于的修訂版和 `-j' 選項(xiàng)指定修訂版共同的祖先。
?
注意使用 `-j tagname' 選項(xiàng)而不是 `-j branchname',合并的通常不是從分支上刪除文件的變更。參閱 Merging adds and removals, 了解詳細(xì)情況。
?
另外,每個(gè) `-j' 選項(xiàng)可以包含可選的日期規(guī)格,當(dāng)用于分支時(shí),可以限制修訂版處于指定日期之內(nèi)。可選的日期通過分號(hào)(:)加在標(biāo)簽里面: `-jSymbolic_Tag:Date_Specifier'.
?
?
本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/put2006/archive/2005/08/24/464318.aspx
總結(jié)
- 上一篇: head,branch,version,
- 下一篇: csharp attributes