版本控制工具SVN和CVS
CVS相信大家都聽說過,不過這個廣為使用的版本控制工具還有不少問題,包括中文支援和二進位制檔案的處理都有或多或少的問題。
現在好了,CVS的作者又為我們開發了SVN。Gnome和KDE的開發團隊都已經換用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 merge;svn resolve
SVN的相關資源
是SVN的專案網站。
的電子書。
是繁體中文的SVN文件(只有部分被翻譯過來了)。
不能不提的CVS
雖然我已經轉入了SVN的陣營,但是CVS仍然是應用最為廣泛的版本控制軟體之一。這裡收集了一些關於CVS的資源。
CVS使用簡介
(注:這是oscargreat整理的資料,我拿來用相信他不會介意:)
什麼是CVS
CVS(Cocurrent 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等命令對伺服器和程式碼庫進行配置和設定。
CVS在Linux下客戶端的使用
Linux下的多種IDE/Editor,如Emacs,Eclipse等都對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 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10455649/viewspace-967907/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 版本控制工具(svn)
- 版本控制之道-使用CVS
- 如何使用CVS進行版本控制
- Windows下Subversion和TortoiseSVN構建SVN版本控制Windows
- ubuntu centos搭建版本控制svnUbuntuCentOS
- 【4】版本控制系統SVN
- 版本管理工具之Git 和SVNGit
- 什麼是SVN? 什麼是CVS? SVN跟CVS又有什麼關係呢?
- SVN1.4.5Server架設( 版本控制)Server
- 實現PL/SQL的版本控制-SVNSQL
- 版本控制工具
- hbuilderx整合集中式版本控制系統SVNUI
- pl/sql 版本控制工具SQL
- Java工具面試題:版本控制工具Java面試題
- svn和git版本管理優缺點Git
- Git 版本控制工具的使用Git
- 分散式的版本控制工具分散式
- Git分散式版本控制工具Git分散式
- jbuilder和cvsUI
- SVN原始碼版本控制系統平臺的搭建及使用原始碼
- CentOs下 SVN版本控制的安裝(包括yum與非yum)CentOS
- 如何刪除"CVS"目錄及一些版本控制檔案
- 使用 Docker 部署版本控制工具 GogsDockerGo
- 版本控制工具——Git常用操作(下)Git
- 版本控制工具——Git常用操作(上)Git
- SOS:如何刪除"CVS"目錄及一些版本控制檔案
- svn程式碼版本管理
- svn轉移版本庫
- svn歷史版本刪除(為svn庫瘦身)
- SVN 建立版本庫 與 啟動 SVN 服務
- 分散式版本控制工具 Mercurial 使用分散式
- svn版本升級遷移和異地備份
- 最課程階段大作業之01:使用SVN實現版本控制
- svn 重新定位版本庫
- SVN 版本衝突解決
- Eclipse SVN版本還原Eclipse
- [.net 物件導向程式設計進階] (23) 團隊開發利器(二)優秀的版本控制工具SVN(上)物件程式設計
- 版本管理三國志 (CVS, Subversion, git)Git