cvs是一個(gè)版本控制系統(tǒng),用于記錄原文件的版本信息,適合于多人共同開(kāi)發(fā)同一個(gè)項(xiàng)目。目前源代碼是開(kāi)放的。本文介紹WinCVS使用中的一些體會(huì)。
一、基本概念
(1) repository倉(cāng)庫(kù):用于存放版本控制下的所有目錄和所有各種版本的文件;CVS會(huì)完成對(duì)repository的查詢和更新。
(2)數(shù)據(jù)如何存放在repository中:隨著CVS版本的不同,存放結(jié)構(gòu)會(huì)發(fā)生變化,一般情況下用戶無(wú)需了解數(shù)據(jù)到底是如何存放的。
(3)revision :每一個(gè)file的各個(gè)revision都不相同,形如1.1, 1.2.1,一般1.1是該文件的第一個(gè)rivision,后面的一個(gè)將自動(dòng)增加右面的一個(gè)整數(shù),比如1.2, 1.3, 1.4...有時(shí)候會(huì)出現(xiàn)1.3.2.2,原因見(jiàn)后。revision總是偶數(shù)個(gè)數(shù)字。一般情況下將revision看作時(shí)CVS自己內(nèi)部的一個(gè)編號(hào),而tag則可以標(biāo)志用戶的特定信息。
(4)tag: 用符號(hào)化的表示方法標(biāo)志文件特定revision的信息。通常不需要對(duì)某一個(gè)孤立的文件作tag,而是對(duì)所有文件同時(shí)作一個(gè)tag,以后用戶可以僅向特定tag的文件提交或者checkout。另外一個(gè)作用是在發(fā)布軟件的時(shí)候表示哪些文件及其哪個(gè)版本是可用的;各文件不同revision可以包括在一個(gè)tag中。如果命名一個(gè)已存在的tag默認(rèn)將不會(huì)覆蓋原來(lái)的;
(5) branch :當(dāng)用戶修改一個(gè)branch時(shí)不會(huì)對(duì)另外的branch產(chǎn)生任何影響?梢栽谶m當(dāng)?shù)臅r(shí)候通過(guò)合并的方法將兩個(gè)版本合起來(lái);branch總是在當(dāng)前revision后面加上一個(gè)偶數(shù)整數(shù)(從2開(kāi)始,到0結(jié)束),所以branch總是奇數(shù)個(gè)數(shù)字,比如1.2后面branch為1.2.2,該分支下revision可能為1.2.2.1,1.2.2.2,...
(6)conflct:完全是純文本的沖突,不包含邏輯上的矛盾,比如CVS不能解決如下問(wèn)題:某人修改了函數(shù)f的參數(shù),而另外一個(gè)人在另外一個(gè)地方用老的參數(shù)調(diào)用該函數(shù)。文本沖突需要用戶自己參與解決,CVS無(wú)法自動(dòng)解決。
(7) checkout:將代碼目錄checkout到指定目錄下,所有文件都是read-write
二、設(shè)置示例和使用問(wèn)題
(1) 如何提交自己所作的改動(dòng)
使用commit的向服務(wù)器提交改動(dòng)的源文件。
commit到服務(wù)器的方法是:
選中文件,右鍵選commit
沖突:多人同時(shí)修改同一內(nèi)容。沖突的情況下,通過(guò)文件兩個(gè)版本的比較消除沖突的地方后再次提交。比較兩個(gè)版本不同的方法是:
可以利用CVS自帶的比較工具,CVS會(huì)把不同部分通過(guò)
<<<<<<<<<<<
...
==========
...
>>>>>>>>>>>
列出來(lái);
也可以利用其它文本比較工具比較(Preference setting中選定,Query-diff setting中選定);
(2) 如何update
選中改動(dòng)的文件,右鍵選update
(3) 添加文件到模塊中
分為添加文本文件和添加二進(jìn)制文件兩種,千萬(wàn)不要搞錯(cuò)。
以上為個(gè)人使用總結(jié),不當(dāng)之處請(qǐng)指正。