CVS是并發(fā)版本系統(Concurrent Versions System)的意思,主流的開 放源碼網絡透明的版本控制系統。
CVS對于從個人開發(fā)者到大型,分布團隊都是有用的:
它的客戶機/服務器存取方法使得開發(fā)者可以從任何因特網的接入點存取新的代碼。
它的無限制的版本管理檢出(check out:注1)的模式避免了通常的因為排它 檢出模式而引起的人工沖突。
它的客戶端工具可以在絕大多數的平臺上使用。
CVS被應用于流行的開放源碼工程中,象Mozilla,GIMP,XEmacs,KDE,和GNOME等。
那么它到底怎么樣?
你可能會說,它非常棒,但是對于"我"來說它能做什么?首先,基本的:
一個版本控制系統保持了對一系列文件所作改變的歷史記錄。
對于一個開發(fā)者來說,那意味著在你對一個程序所進行開發(fā)的整個期間,能夠跟蹤對其所作的所有改動的痕跡。對你來說,有沒有出現過由于在命令行上 按錯鍵而導致的工作都白費的情況呢?版本控制系統給了你一個安全的網絡。
版本控制系統對任何人都有用,真的。(畢竟,誰不愿意使用一個安全的 網絡呢?)但是它們經常被軟件開發(fā)團隊使用。在團隊中工作的開發(fā)者需要能夠調整他們的各自的修改;一個集 中式版本控制系統允許那樣做。
代碼集中的配置
個人開發(fā)者希望一個版本控制系統的安全網絡能夠運行在他們的本地的 一臺機器上。然而,開發(fā)團隊需要一個集中的服務器,所有的成員可以將服務器作為倉庫來訪問他們的代碼。在 一個辦公室中,沒有問題 -- 只是將倉庫連到本地網絡上的一臺服務器上行了。對于開放源碼項目...噢, 還是沒有問題,這要感謝因特網。CVS內建了客戶機/服務器存取方法,所以任何一個可以連到因特網上的開發(fā) 者都可以存取在一臺CVS服務器上的文件。
調整代碼
在傳統的版本控制系統中,一個開發(fā)者檢出一個文件,修改它,然后將其登記回去。檢出文件的開發(fā)者擁有對這個文件修改的排它權。沒有其它的開發(fā)者可以檢出這個文件 -- 并且只 有檢出那個文件的開發(fā)者可以登記(check in:注2)所做的修改。(當然對于管理員有很多方法可以超越這個限制。)
想一下排它的檢出可能會如何工作:Bob的兄弟檢出foo.java以便加入注釋,寫好代碼后他什么也沒做。然后他去吃午飯了。Bob吃完午飯后,發(fā)現他的老板所指給他的一個bug在 foo.java里。他試圖檢出 foo.java... 但是版本控制系統不允許他這樣做,因為他的兄弟已經把它檢出了。Bob不 得不等著他的兄弟吃完午飯回來(在這個"好"日子用了兩個小時),他才可以修正bug。
在一個大型的開放源碼工程中,因為開發(fā)者可能在任意的時區(qū)工作得很 晚,給予一個開發(fā)者阻止任意地方的其它開發(fā)者繼續(xù)處理任意文件的能力很明顯示無法運轉。他們終將因為不能夠在他們想要的時候開展項目而感到厭煩。
CVS通過它的無限制的檢出模式解決了這個問題。檢出一個文件并不給定 開發(fā)者對那個文件的排它權。其它的開發(fā)者也可以對其檢出,進行他們自已的修改,并且將其登記回去。
"等一下!"你可能會說。"但是后面的登記不是會覆蓋前面的嗎?"回答 是不會。詳細地回答是當多個開發(fā)者對同一個文件作了修改CVS會檢測,并且自動合并那些改變。
哇噢。自動的?不用擔心 -- CVS 會很小心,并且將會自動合并那些只 要不是對代碼的同一行所作的改動。如果CVS不能安全的處理這些改動,開發(fā)者將不得不手工合并它們。
從此去往何處?
到現在為止,你已經毫不猶豫地著迷于CVS 的潛力,并且急不可待地想 開始。第一步是去得到適合你的平臺的CVS軟件。安裝CVS通常是將其從你下載的壓縮包中解開這么一件 事。配置CVS 可能要小心一些,它非常依賴于你使用的平臺和你的CVS代碼倉庫的存放地。