版本控制工具SVN和CVS

polalisi發表於2007-09-04

CVS相信大家都聽說過,不過這個廣為使用的版本控制工具還有不少問題,包括中文支援和二進位制檔案的處理都有或多或少的問題。

現在好了,CVS的作者又為我們開發了SVNGnomeKDE的開發團隊都已經換用SVN了,您為什麼不試一下呢?

最基本的用法

建立程式碼庫 svnadmin create /path/to/repos

匯入資料 svn import /path/to/project file::///path/to/repos -m "initial import"

匯出資料 svn checkout file::///path/to/repos

提交更新 svn commit filename

新增檔案 svn add

刪除檔案 svn delele

複製檔案 svn copy

移動檔案 svn move

查詢狀態 svn status

檢查不同 svn diff

同步工作目錄 svn update

合併程式碼 svn mergesvn resolve

SVN的相關資源

SVN的專案網站。

的電子書。

是繁體中文的SVN文件(只有部分被翻譯過來了)。

不能不提的CVS

雖然我已經轉入了SVN的陣營,但是CVS仍然是應用最為廣泛的版本控制軟體之一。這裡收集了一些關於CVS的資源。

CVS使用簡介

(注:這是oscargreat整理的資料,我拿來用相信他不會介意:)

什麼是CVS

CVSCocurrent Version Systems,併發版本系統)是一個C/S模式的版本控制系統,用於在軟體開發過程中記錄檔案版本,協調開發人員保證檔案同步,從而保證專案正確的進行並行開發,並支援版本回滾、bug 跟蹤和補丁生成。使用CVS可以有效地對軟體開發的原始碼和開發文件進行統一的管理和組織。

CVS的工作模式:

CVS的基本工作模式如下:

CVS伺服器(程式碼文件庫)

/ |

(版 本 同 步) / |

開發者1 開發者2 開發者3

CVS在伺服器端維護程式碼文件庫,不同的開發者在本地機器上建立對應程式碼樹,並利用CVS保持原生程式碼文件同程式碼文件庫的一致。當由於多個開發者對檔案的同時修改造成本地與庫中的程式碼檔案衝突時,CVS報告並協助解決衝突程式碼的合併問題。普通開發者(非管理員)對CVS的使用流程如下所示:

Check out(獲取) -------------------- Merge(合併)

| | ^

v v Conflict(衝突) |

Modify(修改)-> Update(更新) ----------------

^ |

| | No Conflict(無衝突)

| v

Update(更新) (提交)

|

v

Export(匯出)

check out命令只需在開始建立原生程式碼樹時使用一次,其後更新原生程式碼則使用update命令。update命令比較伺服器和原生程式碼庫的區別,並把原生程式碼樹中過時的檔案自動更新。當完成對程式碼的修改之後,在提交程式碼之前同樣需要使用update命令,以獲取他人並行修改的的程式碼。如果出現衝突(即對同一檔案同時進行了修改),CVS將在原生程式碼中把兩者都保留並標記出來,要求開發者處理衝突。在衝突不存在或已解決的情況下,使用commit命令將伺服器程式碼更新為原生程式碼。CVS要求為更改提供註釋,並自動為更新的檔案處理版本編號。當軟體需要正式釋出時,使用export命令匯出不包含CVS設定資訊的原始碼樹。

CVS的管理員還使用包括init, import, admin等命令對伺服器和程式碼庫進行配置和設定。

CVSLinux下客戶端的使用

Linux下的多種IDE/Editor,如EmacsEclipse等都對CVS提供了支援,但基於命令列的cvs操作是最為基本和靈活的。以下介紹CVS命令列的使用。

環境變數

CVSROOT 指定程式碼庫的位置

如果CVS程式碼庫在本地機器上,可直接指定程式碼庫的路徑,如:

export CVSROOT=/path/to/cvsroot

如果CVS程式碼庫在伺服器上,則還需指定伺服器位置,通訊方式

及使用者等資訊,格式為:

CVSROOT=:method:username@cvs.server.address#port:/path/to/cvsroot

例如:

export CVSROOT=:ext:horn@166.111.55.119:/cvs/horn

其中ext指定使用SSH協議,horn是有權訪問伺服器相應目錄的

使用者。

CVSROOT的值可以在命令列上用-d選項重新指定,如:

cvs -d /cvs/horn update

CVS_RSH 指定客戶端訪問伺服器的協議

使用SSH協議時,可如下設定:

export CVS_RSH=ssh

基本命令

cvs的命令列格式為:

cvs [options] command [options] filename

具體引數可參考info cvs

cvs的命令如果不帶引數,則總是以當前所在目錄作為操作物件。

以下介紹基本命令:

init CVS程式碼庫的初始化,管理員使用。

cvs -d /cvs/horn init

/cvs/horn初始化為一個程式碼庫

import 匯入一個專案/模組,管理員使用。

cvs import -m "comments" project_name vendor_tag release_tag

執行後,會將當前目錄下所有檔案及目錄匯入到

/path/to/cvsroot/project_name

目錄下。

vender_tag: 開發商標記

release_tag: 初始版本標記

-m 引數如果不加,則cvs會自動啟動vi,要求輸入註釋。

如:

cd /home/horn/blob-2.05/

cvs import blob Hornworks InitVersion

checkout/co 從伺服器獲取程式碼,在本地建立程式碼樹

cvs checkout project_name

update/up 將本地檔案同步到最新的版本

cvs update filename

不指定檔名,cvs將當前目錄下所有子目錄下的檔案。如前

所述,在每天工作前和工作之後commit之前都應當update,以

保證原生程式碼總是最新的,且和伺服器的程式碼無衝突。

commit/ci 將修改同步到CVS庫裡

cvs commit -m "write some comments here" file_name

CVS的很多動作都是透過cvs commit進行最後確認並修改的。

在確認的前,還需要使用者填寫修改註釋,以幫助其他開發人員

瞭解修改的原因。

add 向專案中新增檔案/目錄

cvs add new_file

新增檔案之前應當首先建立檔案,之後使用cvs add新增。添

加檔案的操作只有經過cvs commit之後才真正被新增到程式碼庫

中。對於圖片,Word文件等非純文字的專案,需要使用

cvs add -kb

選項按二進位制檔案方式匯入(k表示擴充套件選項,b表示

binary),否則有可能出現檔案被破壞的情況。

remove/rm 從專案中刪除檔案

cvs remove file_name

刪除時,應當先將某個原始檔物理刪除後,再使用remove命令。

比如:

rm file_name

cvs remove file_name

然後commit確認刪除。

也可以加上-f引數將兩步合一:

cvs remmove -f file_name

cvs commit -m "why delete file"

cvs不允許刪除目錄,空目錄在update時會依選項自動忽略。

log/history 檢視修改歷史

cvs log file_name

diff 檢視檔案不同版本的區別

cvs diff -r1.3 -r1.5 file_name

檢視1.3版本何1.5版本的區別

cvs diff file_name

檢視本地和庫中檔案的區別

tag 標記版本號

cvs tag release_version

CVS自動維護每個檔案的版本號,檔案每修改一次,則其版本

號自動增加。此版本號不能用作階段性發布使用。tag命令為

當前目錄下所有檔案標記一個統一的發行版本號。

如:

cd blob/

cvs tag 2.1.0-Hornworks

tag命令應當由專案負責人統一指定和使用。

export 專案釋出, 匯出不帶CVS目錄的原始檔

原生程式碼樹的每個目錄下,CVS都建立了一個CVS/目錄用於記

錄當前目錄和CVS庫之間的對應資訊。export可以匯出不包含

CVS目錄的程式碼樹。

cvs export -r release project_name

匯出版本號標記為 release的程式碼

cvs export -D 20021023 project_name

匯出截至2002.10.23時最新的檔案


Updated: 2005-07-05

Index

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10455649/viewspace-967907/,如需轉載,請註明出處,否則將追究法律責任。

相關文章