歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux與Windows CVS服務器配置與使用

Linux與Windows CVS服務器配置與使用

日期:2017/3/3 16:40:38   编辑:關於Linux

第一部分 CVS服務器的配置(以1.10版)

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:[email protected]:/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:

第一、 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:[email protected]:/home/cvsroot login
  Logging in to :pserver:[email protected]: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進行系統開發或其它文檔的版本管理與控制。

Copyright © Linux教程網 All Rights Reserved