本地使用CVS

2022-04-10 12:43:55 字數 3304 閱讀 4903

cvs是乙個版本控制軟體,當多人共同開發同一**時,可以方便有效的控制不同開發人員的軟體版本

我個人開發**,但也希望對開發進行版本控制.

首先安裝cvs,設定cvs目錄,並初始化cvs

sudo apt-get

install cvs

cvsroot=~/cvs

cvs init

無論是開發新**還是修改**都可以這樣做.

先建立專案資料夾(不要隨意修改這個資料夾中的內容),再把專案匯入cvs,用cvs匯出專案到另乙個資料夾中(在此資料夾中修改專案)

mkdir project_dir

cvs import -m "

write some comments here

"project_name vendor_tag release_tag

cvs checkout project_name

如果是修改**的話(在a資料夾下修改b資料夾下的內容,不能隨意移動資料夾),可以先把b資料夾移到別的地方(如c),在匯入時以b資料夾的名字作為project_name,最後在a中匯出專案.此時c就是源**的存放處,依然可以在b中修改**並提交.

以下是cvs日常使用時的一些命令:

將檔案同步到最新的版本

cvs update

不制定檔名,cvs將同步所有子目錄下的檔案,也可以制定某個檔名/目錄進行同步

cvs update file_name

最好每天開始工作前或將自己的工作匯入到cvs庫里前都要做一次,並養成「先同步 後修改」的習慣,和virvual sourcesafe不同,cvs裡沒有檔案鎖定的概念,所有的衝突是在commit之前解決,如果你修改過程中,有其他人修改並commit到了cvs 庫中,cvs會通知你檔案衝突,並自動將衝突部分用

>>>>>>

content on cvs server

<<<<<<

content in your file

>>>>>>

標記出來,由你確認衝突內容的取捨。

版本衝突一般是在多個人修改乙個檔案造成的,但這種專案管理上的問題不應該指望由cvs來解決。

確認修改寫入到cvs庫里

cvs commit -m "write some comments here" file_name

注意:cvs的很多動作都是通過cvs commit進行最後確認並修改的,最好每次只修改乙個檔案。在確認的前,還需要使用者填寫修改注釋,以幫助其他開發人員了解修改的原因。如果不用寫-m "comments"而直接確認`cvs commit file_name` 的話,cvs會自動呼叫系統預設的文字編輯器(一般是vi)要求你寫入注釋。

注釋的質量很重要:所以不僅必須要寫,而且必須寫一些比較有意義的內容:以方便其他開發人員能夠很好的理解

不好的注釋,很難讓其他的開發人員快速的理解:比如: -m "bug fixed" 甚至 -m ""

好的注釋,甚至可以用中文: -m "在使用者註冊過程中加入了email位址校驗"

修改某個版本注釋:每次只確認乙個檔案到cvs庫里是乙個很好的習慣,但難免有時候忘了指定檔名,把多個檔案以同樣注釋commit到cvs庫里了,以 下命令可以允許你修改某個檔案某個版本的注釋:

cvs admin -m 1.3:"write some comments here" file_name

新增檔案

建立好新檔案後,比如:touch new_file

cvs add new_file

注意:對於,word文件等非純文字的專案,需要使用cvs add -kb選項按2進製檔案方式匯入(k表示擴充套件選項,b表示binary),否則有可能出現檔案被破壞的情況

比如:cvs add -kb new_file.gif

cvs add -kb readme.doc

刪除檔案

將某個原始檔物理刪除後,比如:rm file_name

cvs rm file_name

然後確認修改並注釋

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

檢視當前檔案不同版本的區別

cvs diff -r1.3 -r1.5 file_name

檢視當前檔案(可能已經修改了)和庫中相應檔案的區別

cvs diff file_name

cvs的web介面提供了更方便的定位檔案修改和比較版本區別的方法,具體安裝設定請看後面的cvsweb使用

正確的通過cvs恢復舊版本的方法:

如果用cvs update -r1.2 file.name

這個命令是給file.name加乙個stick tag: "1.2" ,雖然你的本意只是想將它恢復到1.2版本

正確的恢復版本的方法是:cvs update -p -r1.2 file_name >file_name

如果不小心已經加成stick tag的話:用cvs update -a 解決

移動檔案/檔案重新命名

cvs裡沒有cvs move或cvs rename,因為這兩個操作是可以由先cvs remove old_file_name,然後cvs add new_file_name實現的。

刪除/移動目錄

最方便的方法是讓管理員直接移動,刪除cvsroot裡相應目錄(因為cvs乙個專案下的子目錄都是獨立的,移動到$cvsroot目錄下都可以作為新的 獨立專案:好比一顆樹,其實砍下任意一枝都能獨立存活),對目錄進行了修改後,要求其開發人員重新匯出專案cvs checkout project_name 或者用cvs update -dp同步。

專案發布匯出不帶cvs目錄的原始檔

做開發的時候你可能注意到了,每個開發目錄下,cvs都建立了乙個cvs/目錄。裡面有檔案用於記錄當前目錄和cvs庫之間的對應資訊。但專案發布的時候 你一般不希望把檔案目錄還帶著含有cvs資訊的cvs目錄吧,這個一次性的匯出過程使用cvs export命令,不過export只能針對乙個tag或者日期匯出,比如:

cvs export -r release1 project_name 

cvs export -d 20021023 project_name

cvs export -d now project_name

本地CVS環境搭建

以前的原始碼管理辦法就是不停的copy rename備份,很是麻煩,現在終於決定自己在本地搭建cvs伺服器,管理自己的原始碼。搭建cvs的原因主要是公司正好也在拿用cvs,如果有時間想學用下svn和git。網上找了很多關於 本地伺服器 local server 的文章,大多數配置都是加偵聽埠,可以支...

CVS 使用問答

1,執行新增命令出錯?重現錯誤 執行命令 cvs add mydir cvs add in directory cvs add aborted there is no version here do cvs checkout first 環境變數 echo cvsroot pserver hover...

CVS使用規範

修改檔案之前首先 update 這意味著修改時的版本盡可能新,一旦發生衝突,解決它的工作量會比較小 及時 mit 本地 與 庫中的 差異越小,別人合併的難度也就越小 他們有比較大的概率能夠拿到新的版本 將不同的功能單元修改分開 mit 一方面,這樣做能夠盡早地 mit 減少別人合併的難度 另一方面,...