歡迎您光臨本站 註冊首頁

CVS伺服器與WinCVS的配置與使用

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  第一部分 CVS伺服器的配置(以1.10版)
作者:吳炎溪 Email:Yanxi-Wu@21cn.com
1、 CVS簡述與CVS伺服器的安裝:
CVS是目前比較流行與優秀的版本管理與控制工具,它深受大多數開發人員與系統管理的喜愛,同時也是用來管理其它日常文檔(如word工作文檔之類)的一個強有力的工具。這一部分將對CVS伺服器的安裝、配置與使用方法進行簡單、扼要的介紹,以幫助大家儘快的使用CVS來進行一些版本的管理與控制工作。
2、 CVS伺服器的安裝
CVS伺服器版可以從網上的很多地方下載到,也可以到CVS的官方網站進行下載。根據你所使用的系統,下載相應的版本,然後進行安裝。因為當前大部分人是在Linux下使用CVS伺服器進行版本管理,並且Redhat Linux是目前最流行的一個Linux發行版之一,所以本文將主要基於Redhat Linux進行介紹。首先下載CVS伺服器的rpm包,當然也可以下載其它方式的包如源程序包,這也就是Linux的一個優點之一。然後採用以下命令進行安裝:
rpm -ivh cvs-1.10.8-3.i386.rpm
3、配置/etc/services文件:
安裝完之後的第一件事就是要配置CVS伺服器的配置文件,使其能正常的工作。首先在services文件中添加cvspserver,使其成為Linux的一種服務也就是cvs伺服器常式的入口,配置如下:
cvspserver 2401/tcp # cvs client/server operations
cvspserver 2401/udp # cvs client/server operations
4、配置xinetd,用xinetd來啟動CVS伺服器:
進入到/etc/xinetd.d/目錄,然後編輯一個文本文件,名字一定要與/etc/services中的入口名字cvspserver一致,所以這裡用cvspserver作為文件名,文件的內容如下所示:
service cvspserver
{
disable = no
socket_type = stream
wait = no
user = root
env = HOME=
server = /usr/bin/cvs
server_args = -f --allow -root=/home/cvsroot pserver //指定認證方式為pserver,注意:-f
}
注意:a、service後面的名稱一定要和你在/etc/service文件中的cvs服務名稱一樣;
b、env = HOME=這一行的目的就是為了解決在執行一些cvs操作時產生的讀取/root/.cvsignore文件的錯誤,上面env那行的意思就是在運行cvs服務的時候將環境變數HOME置空,這樣雖然執行cvs的用戶是root,但是由於沒有了HOME這個環境變數,所以cvs就不會在去讀取/root/.cvsignore文件了。
5、配置CVS用戶與cvsroot的屬主與屬組:
首先建立一個用戶組cvs,可以使用groupadd或者addgroup命名,也可以直接編輯/etc/group文件添加這個組,然後添加一個用戶cvsroot, 然後修改/etc/passwd文件使cvsroot用戶的預設組是cvs組,而不是cvsroot組(也就是修改)。在/home目錄下建立cvsroot目錄(也可以在其它你喜歡的目錄下建),然後修改/home/cvsroot的屬主及屬性:
#chown cvsroot.cvs /home/cvsroot
#chmod 771 /home/cvsroot
6、 vs進行初始化:
安裝完CVS伺服器之後的另一件重要的事情就是要初始化CVS伺服器的根目錄,以後創建的CVS項目都將建立在這個目錄下,採用的命令如下:
#cvs -d /home/cvsroot init
這樣目錄/home/cvsroot就成為CVS伺服器的根目錄,以後創建的目錄都將默認的存放在這個目錄下。
7、登錄cvs伺服器(在Linux或其它Unix系統下進行登錄的情況):
a、如果是遠程登錄,採用以下語法:
#cvs -d :pserver:cvsroot@host:/home/cvsroot login
CVS password://輸入用戶cvsroot的口令;
如果沒有出現其它的任何提示就表示登錄成功了,否則要根據提示進行相應的修改。 下面對登錄命令的語法進行說明:
其中,:pserver表示採用pserver方式進行用戶登錄認證,一般的CVS伺服器都採用這
種方式,當然也可以採用其它方式,具體參考相應的資料;
:cvsroot表示要登錄的用戶名,只要是cvs組的成員都可以,如:cather;
@host表示要登錄的伺服器,可以是DNS名,也可以是IP地址,如:10.104.1.204;
:/home/cvsroot表示CVS在伺服器上的目錄,也可以是其它目錄(由第6中你所
指定的用來做init初始化的目錄決定);
提示:也可以把export CVSROOT=:pserver:jchuang@192.168.0.8:/home/cvsroot這一句直
接寫在用戶的初始化文件中(如:.bash_profile),這樣用戶每次登錄時,只需輸入:
#cvs login
然後輸入相應的口令就可以登錄到cvs伺服器上。
b、如果是本地登錄,可以直接把export CVSROOT=/home/cvsroot這一句寫在用戶的初
始化文件如:.bash_profile中;然後直接
8、向CVS添加新的項目模塊
一般我們都已經有一個或多個項目了,這樣我們可以用下面步驟生成一個新的CVS項目。將一個工程文件置於CVs中進行版本控制,在CVS 術語中稱作導入(import)。從名字上就可以看出,在導入前需要為此作些準備工作。
輸入操作的基本要求是有個"乾淨"的目錄結構。"乾淨"的意思是不需要版本控制的文件都被移走了(如編譯生成的文件,備份文件等等)。如果工程已經開始一段時間了,這就顯得很重要。在目錄中也許有些是不打算將其置於版本控制下的文件,但是又想將他們放在這裡,這種情況下,你要在輸入之前將它們移走,然後再移回來。
  注意的是CVS 認為空目錄是不存在的。如果想增加一個既不包含文件又不包含子目錄的目錄,需要在其下創建一個啞文件。建議你創建一個名為 README.txt 的文件,其內容為對目錄的簡要說明。
  進入到已有項目的目錄,比如叫 cvstest:
  $cd cvstest
  運行命令將項目文件導入到cvs倉庫中:
  $cvs import -m "this is a cvstest project" cvstest v_0_0_1 start
  說明:import 是cvs的命令之一,表示向cvs倉庫輸入項目文件.
  -m參數後面的字串是描述文本,對項目進行描述,如果不加 -m 參數,那麼cvs會自動運行一個編輯器(一般是vi,但是可以通過修改環境變數EDITOR來改成你喜歡用的編輯器)讓你輸入信息,cvstest 是項目名稱(實際上是倉庫名,在CVS伺服器上會存儲在以這個名字命名的倉庫里)
  v_0_0_1是這個分支的總標記.沒啥用(或曰不常用)
  start 是每次 import 標識文件的輸入層次的標記,沒啥用。
  這樣我們就在用戶指定進行初始化的目錄/home/cvsroot下建立了一個名字叫cvstest的CVS模塊了,然後,我們可以把這個測試項目的文件刪除,試驗如何從倉庫獲取文件這會在後面的客戶端文章進行說明。
(註:本小節主要引用自http://linuxaid.com.cn何偉平的「CVS伺服器快速指南」)
9、從cvs本地伺服器上checkout相應的模塊:
a、如果是在CVS伺服器所在計算機上,可以直接採用如下命令:
#cvs checkout stw
這樣將把stw項目模塊checkout到當前目錄下。
b、如果是在遠程運行Linux或其它Unix系統上,在第7中登錄之後也可以用上邊的命
令把相應的項目模塊checkout到當前目錄下。
另外,如果是在windows端進行checkout,可以採用WinCVS,那麼還要對WinCVS進行其它的一些配置,下一部分將具體介紹它的配置方法。

第二部分 WinCVS的配置與使用方法
1、 WinCVS簡介:
WinCVS是CVS的一個客戶端軟體,它運行在Windows上,用來在Windows上登錄CVS伺服器,然後進行一些CVS相關的操作與管理。由於當前很多的企業內部都採用Linux/Unix做伺服器,而用Windows做客戶端,所以,WinCVS與CVS伺服器配合使用將組成最強有力的版本控制與管理的系統之一。
2、 WinCVS的下載與安裝;
最新的WinCVS可以從http://sourceforge.net/project/showfiles.php?group_id=10072地址下載到,也可以在http://sourceforge.net/project 上下載到最新的或其它版本的WinCVS。
下載到相應的版本后根據嚮導進行安裝,已經要使用CVS的用戶,安裝這個WinCVS應該沒什麼問題吧!
3、 配置WinCVS:
a、 一般選項的設置,選擇Admin->Preferences…,出現如下界面:

第一、 Authentication:用來配置cvs伺服器的認證方式,可以從下拉框中選擇其它的認證方式,不過一般只要選擇默認的pserver方式就可以,要注意的是必須與cvs伺服器配置時所指定的認證方式一致;
第二、 Path:用來配置cvs在伺服器上的主目錄路徑,也就是伺服器上用進行cvs初始化的目錄,如:/home/cvsroot;
第三、 Host Address:用來配置cvs伺服器所在伺服器的地址,可以是IP地址,也可以是DNS名,如:10.104.1.204;
第四、 User name:用來配置要使用些WinCVS來登錄CVS伺服器的用戶名,如:cvsyxwu,用戶的登錄必須由管理員把其添加cvs用戶組中;
第五、 CVSROOT:此項一般都不需要用戶進行修改,用戶在輸入上邊的幾個選項時,系統將自動根據用戶的輸入生成此項的相應內容。
b、 全局選項的設置,在上一個界面上選擇「Globals」:

此項的配置主要是要注意這幾選項:
第一,Checkout read-only不要選上,否則,checkout出來的源代碼將不允許用戶進行
修改,並且此選項默認是選中的;
第二,Prune (remove) empty directories也不要選上,否則,會自動刪除空目錄;
第三,對一般配置沒有特殊要求的,把Dirty files support、Supply control when adding
與TCP/IP compression選項選中;
4、 登錄伺服器:
選擇Admin->login,將出現如下對話框要求用戶輸入登錄口令

輸入口令后,選擇「OK」按鈕,如果CVS伺服器與WinCVS的配置都沒出錯的話,將在CVS的狀態欄中提示:
cvs -z9 -d :pserver:cvsyxwu@10.104.1.204:/home/cvsroot login
Logging in to :pserver:cvsyxwu@10.104.1.204:2401/home/cvsroot
***** CVS exited normally with code 0 *****
code 0表示正確的登錄;而如果出錯的話,將是code 1,那麼要根據錯誤的提示進行相應的修改。
5、 從CVS伺服器上check out相應的模塊:
第一, 在workspace中的Modules選中要存放checkout模塊的目錄;
第二, 選擇Create->Checkout Modeles,將出現如下對話框:

其中,Module name and path on the server就是要存放checkout 內容的目錄,由用戶輸入;而Local folder to checkout to就是第一中用戶所選擇的目錄。
6、 修改之後把文件提交到CVS伺服器
a)、只有一個用戶對文件進行修改的情況
用自己喜歡的編輯器對checkout出來的文件進行修改,修改之後的文件在沒有提交之前會是紅色的,如下圖example.h文件:
選中紅色的文件example.h后右擊選擇「Commit Selection」選項,如果沒有其它用戶也對其進行修改並已經提交到CVS伺服器上,一切正常的話將把example.h文件提交到CVS伺服器並把圖標恢復成原來的顏色。
b)、兩個或兩個以上的用戶對同一文件的不同部分進行修改的情況
這種情況就是如用戶A與用戶B都checkout了文件example.h,內容如下:
int callby (int count)
{
printf("ExcelStor!\n");
}
void main(int argv,char *argc)
{
//added by my cvs
printf("I am Cather\n");
}
int mainexample()
{
printf("OK\n");
}
然後用戶A修改成如下,並提交到CVS伺服器(一般將正常提交):
int callby (int count)
{//add
printf("ExcelStor!\n");
}
void main(int argv,char *argc)
{
//added by my cvs
printf("I am Cather\n");
}
int mainexample()
{//add
printf("OK\n");
}
接著用戶B修改成如下:
int callby (int count)
{//add
printf("ExcelStor!\n");
}
void main(int argv,char *argc)
{
//modified
printf("I am Cather\n");
}
int mainexample()
{//add
printf("OK\n");
}
當用戶B選擇「Commit Selection」時將提示:
cvs server: Up-to-date check failed for `example.h'
cvs [server aborted]: correct above errors first!
此時表明已經有用戶對同一個文件example.h進行修改並提交到CVS伺服器,這時
要先選擇「Update Selection」對本地example.h與CVS伺服器上的example.h文件進行
同步與合併,不用選中出現的任何選項,直接選擇「OK」,這時將顯示如下:
cvs -z9 update example.h (in directory C:\my cvs\STW\src\)
RCS file: /home/cvsroot/STW/src/example.h,v
retrieving revision 1.5
retrieving revision 1.6
Merging differences between 1.5 and 1.6 into example.h
M example.h

***** CVS exited normally with code 0 *****
表明用戶B與用戶A的修改已經合併成功,同時文件example.h的圖標也將變成紅色,合併后的文件是存放在用戶B的本地機上,為了更新到CVS伺服器還必須選中example.h並右擊選擇「Commit Selection」才能把用戶A與用戶B的修改合併后的結果提交到CVS伺服器上。註:M表示此文件已經被修改過。
c)、兩個或兩個以上的用戶對同一個文件的相同部分進行修改的情況
這種情況就是如用戶A與用戶B都下載了文件example.h,內容如下:
void main(int argv,char *argc)
{
printf("I am Cather\n");
}
然後用戶A把文件修改成如下,並提交到CVS伺服器(一般將正常提交):
void main(int argv,char *argc)
{
printf("I am Cather\n");
printf("I am Pat\n");
}
接著用戶B又把文件修改成如下:
void main(int argv,char *argc)
{
printf("I am Cather\n");
printf("I love you Cather\n");
}
如果用戶B這時選擇「Commit Selection」準備把修改結果提交到CVS伺服器,此
時將顯示如下的錯誤提示:
cvs -z9 commit -m "update in 11:20" example.h (in directory C:\my cvs\STW\src\)
cvs server: Up-to-date check failed for `example.h'
cvs [server aborted]: correct above errors first!

***** CVS exited normally with code 1 *****
表明用戶B的修改與其它用戶的修改衝突,這時要先選擇「Update Selection」,將顯示如下提示:
cvs -z9 update example.h (in directory C:\my cvs\STW\src\)
RCS file: /home/cvsroot/STW/src/example.h,v
retrieving revision 1.9
retrieving revision 1.10
Merging differences between 1.9 and 1.10 into example.h
rcsmerge: warning: conflicts during merge
cvs server: conflicts found in example.h
C example.h

***** CVS exited normally with code 0 *****
example.h前面的C表示與其它用戶的修改有衝突,並且文件的圖標會加顯示一個「C」,如下所示:

雙擊example.h將顯示example.h的內容,如下:
void main(int argv,char *argc)
{
printf("I am Yanxi\n");
printf("I am Cather\n");
<<<<<<< example.h
printf("I love you Yanxi,too!\n"); //這部分為你的修改
=======
printf("I love you Cather!\n"); //這部分為其它用戶的修改
>>>>>>> 1.10
}
這時你應該與用戶A進行協商以決定最終要怎樣修改。比如,可以修改成:
void main(int argv,char *argc)
{
printf("I am Yanxi\n");
printf("I am Cather\n");
printf("I love you Yanxi,too!\n"); //這部分為你的修改
printf("I love you Cather!\n"); //這部分為其它用戶的修改
}
然後選擇「Commit Selection」進行提交,將顯示如下的提示信息:
cvs -z9 commit -m "update in 11:20" example.h (in directory C:\my cvs\STW\src\)
Checking in example.h;
/home/cvsroot/STW/src/example.h,v <-- example.h
new revision: 1.11; previous revision: 1.10
done

***** CVS exited normally with code 0 *****
表明用戶A與用戶的修改已經合併成功。

這樣,向CVS伺服器提交文件所會遇到的問題也基本上就是這些,用戶要根據所遇到的實際問題進行修改。
7、 向CVS伺服器添加新文件
在本地添加文件后,要提交到服務端。先選中文件,然後點擊「添加按鈕」,添加文件后,再在右鍵菜單中選擇提交命令「Commit Selection」即可。

如圖,選中文件example.h.bak,因為example.h.bak當前不是CVS的文件,此時「添加按鈕」將由不可選狀態變成可選狀態,所以Status中顯示為「NonCvs file」,選擇「添加按鈕」之後example.h.bak圖標將變成紅色並增加了一個A字母,如下:

然後選中example.h.bak,右擊,選擇「Commit Selection」把文件example.h.bak提交到CVS伺服器上而成為CVS的一個文件。
8、 結束語
來到這裡,你基本上已經能為自己或公司配置一個實用的CVS伺服器與WinCVS客戶端,配合使用CVS進行系統開發或其它文檔的版本管理與控制。





[火星人 ] CVS伺服器與WinCVS的配置與使用已經有976次圍觀

http://coctec.com/docs/linux/show-post-67756.html