CVS――Concurrent Versions System并行版本系統;
是一個標準的版本控制系統;
對代碼進行集中管理;
記錄代碼所有的更改歷史;
提供協作開發的功能;
支持多人同時CheckOut與合并。
以客戶端/服務器模式工作,所有的用戶都在客戶端進行CVS操作,而所有命令的執行都在CVS服務器端進行。
- CVS倉庫:又稱主拷貝,是CVS系統保存軟件資源的地方。所有項目的所有文件的所有版本都保存在這個倉庫中。
- 版本:開發人員每次向CVS提交所做的修改就形成了一個新版本。
- 工作拷貝:從CVS服務器端取出的,保存在我們正在使用的客戶端計算機上的代碼拷貝。每個人員都有一個屬于自己的工作拷貝。
- 檢出代碼(創建工作拷貝check out):從服務器取出代碼,就是創建工作拷貝的過程。
- 提交代碼(commit):將代碼送到服務器保存,commit又叫作check in。
- 導入代碼(import):將未被CVS進行版本管理的代碼引入CVS系統中,由CVS開始對它進行版本管理。
- CVS日志:CVS用來記錄每次操作的內容的信息。日志信息可以用cvs log命令來查看。
- 更新(update):在協同開發環境下,將其他人所作的最新修改從CVS倉庫中取到你的工作拷貝中,從而使得你得工作拷貝與倉庫中得最新版本保持一致。使用update是同步各個工作拷貝的手段。
- 沖突(conflict):在協同開發的環境下,當兩個開發人員對同一個文件進行修改,并且依次提交CVS倉庫時就發生了沖突。這種沖突需要開發人員手工消除,并提交到CVS倉庫中形成解除沖突之后的新版本。
1.設置環境變量。
2.簽出工作版本到工作目錄。
該命令只將account/src/common目錄結構簽出到本地。若使用
則將account下所有目錄結構簽出來。
3.提交修改的文件到CVS版本庫中:
注意若提交多個文件可以輸入多個文件名,并以空格分開。若將該目錄下所有文件都提交,那么只需
即可。
4.提交新增加的目錄或文件到CVS版本庫中:
5.刪除目錄及文件,需先刪除目錄下的文件
再執行
則將該空目錄刪除(只是刪除本地工作拷貝的空目錄)。
6.查看文件狀態
例如:
注意:最重要的是Status欄,可以有以下幾種狀態:
Up-to-date
:表明你的工作拷貝是最新的.
Locally Modified:表明你曾經修改過該文件,但還沒有提交,你的版本比倉庫里的新.
Needing Patch:表明有人已經修改過該文件并且已經提交了!你沒有修改但你的工作拷貝的版本比倉庫里的舊.
Needs Merge:表明你修改了該文件但沒有提交,而有人也修改了這個文件,并且提交給倉庫了。
Locally added
:表明使用了"add"命令增加了該文件,但還沒有"commit"
Locally Removed
:表明你使用了"remove"命令,但還沒有"commit"
Unkown
:CVS不知道關于這個文件的情況.例如,你創建了一個新文件,而沒有使用"add"命令
解決辦法:
若狀態為Locally Modified,則需執行$cvs ci <filename>
若狀態為Needing Patch或Needing Merge,則需執行$cvs up <filename>
將版本庫里的文件與工作拷貝合并后,再提交給版本庫,使用命令:
$cvs ci <filename>
。
若狀態為:Locallyadded,則需執行$cvs ci <filename>
若狀態為:Removed,則需執行$cvs ci <filename>
若狀態為:Unkown,則需執行$cvs add <filename>,$cvs ci <filename>。
7.查看工作拷貝和倉庫中最后版本之間的修改
8.查看指定的兩個版本之間的修改
9.版本回退(取出以前的某個版本)
有兩種方式:
一是只把某一版本的文件輸出到標準輸出上:
“-p”選項讓CVS命令的結果只輸出到標準輸出,而不寫入到結果文件中。
另一種是將輸出到標準輸出的結果重定向到文件中:
如:目前abc.c文件的版本號為1.5,要取出1.2的版本,那么執行
若沒有使用“-p”選項進行回退,而是使用了$cvs up –r 1.2 abc.c命令,之后若對1.2版本進行修改后再提交到CVS時,會出現如下提示信息:
解決辦法兩種方式:
1、修改CVS/Entries文件,將以下黃色標記部分刪除即可。
10.如何恢復已經刪除的文件或目錄:
1. 在執行了【Remove】命令之后恢復文件。 ◇ 【Ctrl+L】直接輸入命令cvs add xxxxx,或執行【Add Selection】界面操作。 ◇ 這樣就可以直接恢復還未提交的刪除文件。
2. 在執行了【Commit】命令之后恢復文件。 ◇ 只能用【Ctrl+L】直接輸入命令cvs add xxxxx,這時會得到一個空的文件。 ◇ 選中這個空文件,執行【Update】操作,得到這個文件的實體。 ◇ 再次選中這個文件,執行【Commit】操作,得到這個文件最新版本。
3. 由于CVS系統中本質上不會刪除任何目錄,因此,談不上對目錄的恢復,但是CVS系統默認情況下是要在用戶本機上(如:YCW2000)要刪除空目錄,因此,可以用如下方法得到已被刪除的空目錄:cvs checkout -p xxx,也可以在Admin=>Preference的【Globals】頁面進行設置。
=============================================================================
CVS是一個C/S系統,多個開發人員通過一個中心版本控制系統來記錄文件版本,從而達到保證文件同步的目的。工作模式如下:
CVS服務器(文件版本庫)
/ | \ (版 本 同 步)
/ | \
開發者1 開發者2 開發者3
CVS(Concurrent Version System)版本控制系統是一種GNU軟件包,主要用于在多人開發環境下的源碼的維護。實際上CVS可以維護任意文檔的開發和使用,例如共享文件的編輯修改,而不僅僅局限于程序設計。CVS維護的文件類型可以是文本類型也可以是二進制類型。CVS用Copy-Modify-Merge(拷貝、修改、合并)變化表支持對文件的同時訪問和修改。它明確地將源文件的存儲和用戶的工作空間獨立開來,并使其并行操作。CVS基于客戶端/服務器的行為使其可容納多個用戶,構成網絡也很方便。這一特性使得CVS成為位于不同地點的人同時處理數據文件(特別是程序的源代碼)時的首選。
所有重要的免費軟件項目都使用CVS作為其程序員之間的中心點,以便能夠綜合各程序員的改進和更改。這些項目包括GNOME、KDE、THE GIMP和Wine等。
CVS的基本工作思路是這樣的:在一臺服務器上建立一個源代碼庫,庫里可以存放許多不同項目的源程序。由源代碼庫管理員統一管理這些源程序。每個用戶在使用源代碼庫之前,首先要把源代碼庫里的項目文件下載到本地,然后用戶可以在本地任意修改,最后用CVS命令進行提交,由CVS源代碼庫統一管理修改。這樣,就好象只有一個人在修改文件一樣,既避免了沖突,又可以做到跟蹤文件變化等。
CVS是并發版本系統(Concurrent Versions System)的意思,主流的開放源碼網絡透明的版本控制系統。CVS對于從個人開發者到大型,分布團隊都是有用的:
它的客戶機/服務器存取方法使得開發者可以從任何因特網的接入點存取最 新的代碼。它的無限制的版本管理檢出(check out:注1)的模式避免了通常的因為排它 檢出模式而引起的人工沖突。 它的客戶端工具可以在絕大多數的平臺上使用。
CVS被應用于流行的開放源碼工程中,象Mozilla,GIMP,XEmacs,KDE,和GNOME等。 那么它到底怎么樣?
你可能會說,它非常棒,但是對于 "我"來說它能做什么?首先,基本的 :一個版本控制系統保持了對一系列文件所作改變的歷史記錄。對于一個開發者來說,那就意味著在你對一個程 序所進行開發的整個期間,能夠跟蹤對其所作的所有改動的痕跡。對你來說,有沒有出現過由于在令行上 按錯鍵而導致一天的工作都白費的情況呢?版本控制系統給了你一個安全的網絡。
版本控制系統對任何人都有用,真的。(畢竟,誰不愿意使用一個安全的 網絡呢?)但是它們經常被軟件開發團隊使用。在團隊中工作的開發者需要能夠調整他們的各自的修改;一個集 中式版本控制系統允許那樣做。
代碼集中的配置
個人開發者希望一個版本控制系統的安全網絡能夠運行在他們的本地的 一臺機器上。然而,開發團隊需要一個集中的服務器,所有的成員可以將服務器作為倉庫來訪問他們的代碼。在 一個辦公室中,沒有問題 --只是將倉庫連到本地網絡上的一臺服務器上就行了。對于開放源碼項目...噢, 還是沒有問題,這要感謝因特網。CVS內建了客戶機/服務器存取方法,所以任何一個可以連到因特網上的開發 者都可以存取在一臺CVS服務器上的文件。
調整代碼
在傳統的版本控制系統中,一個開發者檢出一個文件,修改它,然后將 其登記回去。檢出文件的開發者擁有對這個文件修改的排它權。沒有其它的開發者可以檢出這個文件 -- 并且只 有檢出那個文件的開發者可以登記(check in:注2)所做的修改。(當然對于管理員有很多方法可以超越這個 限制。)
想一下排它的檢出可能會如何工作:Bob的兄弟檢出 foo.java以便加入 注釋,寫好代碼后他什么也沒做。然后他去吃午飯了。Bob吃完午飯后,發現他的老板所指給他的一個bug在 foo.java里。他試圖檢出 foo.java ... 但是版本控制系統不允許他這樣做,因為他的兄弟已經把它檢出了。Bob不 得不等著他的兄弟吃完午飯回來(在這個 "好"日子用了兩個小時),他才可以修正bug。
在一個大型的開放源碼工程中,因為開發者可能在任意的時區工作得很 晚,給予一個開發者阻止任意地方的其它開發者繼續處理任意文件的能力很明顯示無法運轉。他們最終將因為不 能夠在他們想要的時候開展項目而感到厭煩。
CVS通過它的無限制的檢出模式解決了這個問題。檢出一個文件并不給定 開發者對那個文件的排它權。其它的開發者也可以對其檢出,進行他們自己的修改,并且將其登記回去。
"等一下!"你可能會說。"但是后面的登記不是會覆蓋前面的嗎?"回答 是不會。詳細地回答就是當多個開發者對同一個文件作了修改CVS會檢測,并且自動合并那些改變。
哇噢。自動的?不用擔心 -- CVS 會很小心,并且將會自動合并那些只 要不是對代碼的同一行所作的改動。如果CVS不能安全的處理這些改動,開發者將不得不手工合并它們。 從此去往何處?
到現在為止,你已經毫不猶豫地著迷于CVS 的潛力,并且急不可待地想 開始。第一步就是去得到 適合你的平臺的CVS軟件。安裝CVS通常就是將其從你下載的壓縮包中解開這么一件 事。配置CVS 可能要小心一些,它非常依賴于你使用的平臺和你的CVS代碼倉庫的存放地。CVShome.org存放了大 量的CVS 文檔:
《Introduction to CVS》 Jim Blandy所寫的一篇很棒地在線介紹。我也推薦《 Open Source Development with CVS》 Karl Fogel寫的。你可以讀一下我寫的關 于它的評論在OpenAvenue VOX上。Karl已 經將書中關于CVS的部分置于GPL許可證之下;這篇文檔在Karl的站點上以多種文檔格式提供。
《The Cederqvist》 -- 由Per Cederqvist所編寫的CVS手冊 -- 是一個關于CVS信息的全面資料。
有大量的可用在許多平臺上CVS 附加工具,它們給 CVS增加了功能或使得CVS更容易使用。
posted on 2007-11-27 20:33
jadmin 閱讀(58)
評論(0) 編輯 收藏