A. cvs伺服器怎麼搭建
2、安裝版本: 2.1、伺服器端(CVSNT) 1. 本文使用的是CVSNT-2.0.4,這是一個比較穩定的版本,不要使用最新的CVSNT-2.1.1,本人在使用中發現有比較嚴重的Bug。 2. 下載連接 http://www.cvsnt.org 目前,它提供2.0.6和2.1.1版本的下載。 3. 上面連接還提供源代碼,有興趣的朋友還可以下載下來仔細研究:)。 4. 有心的朋友,仔細觀察就會發現 http://www.cvsnt.org 並沒有提供任何客戶端的下載,那是因為CVS.exe既可以用於伺服器端又可以用於客戶端,WinCVS是為了客戶端使用的方便而定製的外殼。2.2、客戶端(WinCVS) 1. 本文使用的是WinCVS-1.3b13,這應該是一個最新版本:),本人在使用過程中並沒有發現有任何嚴重的Bug。 2. 下載連接 http://sourceforge.net/projects/cvsgui/ 3. 此網站還提供豐富的CVS文檔和相關源代碼,以及多個OS下面的相關文檔和代碼;有收藏癖的朋友有福了:)。 4. WinCVS-1.3b13 使用的CVSNT的版本是CVSNT-2.0.2,在與伺服器端的CVSNT-2.0.4 版本配合使用時,未發現任何不兼容或沖突現象。 5. 在本人的系統中用cvs version命令顯示的結果如下: Client: Concurrent Versions System (CVSNT) 2.0.2 (client/server) Server: Concurrent Versions System (CVSNT) 2.0.4 (client/server) 3、伺服器端(CVSNT)的安裝與配置: 3.1、伺服器端機器和環境配置: 1. 操作系統:Windows 2000 Professional SP2中文版 2. 機器名稱:Server 3. 機器地址:192.168.0.6 (內部IP) 4. 網路環境:100兆交換區域網 5. 硬碟分區格式:FAT32與NTFS都可以。 6. 准備2個CVSNT的工作目錄: F:\KHRoot (存放自己源代碼的根目錄) F:\KHTemp (存放CVS出錯信息的目錄) 7. 本機上存在有的用戶列表:(由NT或本機的使用者創建) Administrator (系統管理員) Jackey (普通用戶) Goury (普通用戶) Riolee (普通用戶)
B. linux下CVS的安裝配置與操作命令全解析
在介紹CVS命令之前,先說點別的
如以前說,倉庫內除樂源文件外,還包括一系列的管理文件.位於$CVSROOT/CVSROOT
修改管理文件的方法等同於源代碼文件,利用CVS命令提取和修改.
下面描述每個文件的用途:
checkoutlist 支持CVSROOT目錄的其它管理文件,允許為各種CVS命令定置信息
commitinfo 在cvs commit命令執行時,這個文件指定樂文件提交時執行的命令
cvswrappers 定義樂一個包裝程序當文件登記或檢取時就會執行.
editinfo 允許你在commit命令啟動前在日誌信息被記錄後執行的腳本
history 跟蹤所有影響倉庫的命令
loginfo 類似coimmitinfo, 只是在文件提交後執行
moles 允許為一組文件定義一個符號,否則必須為每一個要引用的文件
指定部分路徑名(相對於$CVSROOT)
nitify 控制從/"watch/"來的通知./"watch/"由/"cvs watch add/"和/"cvs edit/"
設置
rcsinfo 為commit log回話指定一個模板.
taginfo 定義樂在任意/"tag/"操作後執行的程序.
CVS伺服器的安裝
默認情況下,CVS在Redhat Linux中已經安裝,這一點可以通過在Linux命令行的情況下運行:
代碼如下:
rpm –q cvs
如果出現CVS的版本信息就證明已經安裝成功了。
CVS伺服器安裝包可以從網上的很多地方下載,也可以到CVS的官方網站進行下載。根據你所使用的系統,下載相應的版本,然後進行安裝。因為我們的項目是在Redhat Linux下使用CVS伺服器進行版本管理,所以本文將主要基於Redhat Linux進行介紹。首先下載CVS伺服器的rpm包,當然也可以下載其它方式的包如源程序包,然後採用以下命令進行安裝:
代碼如下:
rpm -ivh cvs-1.11.7-1.i386.rpm
CVS伺服器的配置
安裝完之後的第一件事就是要配置CVS伺服器的配置文件,使其能正常的工作。首先在/etc/services文件中添加cvspserver,使其成為Linux的一種服務也就是cvs伺服器常式的入口,配置如下:
cvspserver 2401/tcp # cvs client/server operations
cvspserver 2401/udp # cvs client/server operations
如果文件中已經存在上面的兩行文字,就不用添加了。
配置xinetd,用xinetd來啟動CVS驗證伺服器:
進入到/etc/xinetd.d/目錄,然後編輯一個文本文件,名字一定要與/etc/services中的入口名字cvspserver一致,所以這里用cvspserver作為文件名,文件的內容如下所示:
代碼如下:
service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/usr/cvsroot pserver
log_on_failure += USERID
}
編輯文件之後測試cvspserver服務是否配置成功。
執行
代碼如下:
/etc/init.d/xinetd restart
重新啟動服務,啟動成功之後,執行下面的語句,驗證服務是否啟動正常:
代碼如下:
telnet localhost 2401
如果出現如下字樣:
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
輸入hi,會繼續輸出如下字樣
cvs [pserver aborted]: bad auth protocol start: hi
Connection closed by foreign host.
出現以上的現象表示CVS用戶驗證伺服器已經配置成功。
如果出現如下字樣,表示配置不成功,請重新檢查以上的配置:
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
CVS的環境變數
CVS使用樂幾個環境變數
CVSROOT 倉庫根目錄的完整路徑名
CVSREAD 如果設置,表明在checkout操作時所有的文件都置成只讀
CVSBIN CVS利用樂很多RCS的命令,指定樂RCS工具的路徑
CVSEDITOR 指定用戶書寫日誌信息所使用的編輯器
CVS_RSH 啟動一個遠程CVS伺服器時,所使用的shell的名稱
CVS_SERVER 決定/"cvs server/"的名字,預設是CVS
CVSWRAPPERS cvswrapper腳本, 用來指定包裝文件名.
關鍵字
管理源文件的一種技術叫/"關鍵字替換/".在每次執行/"cvs commit/"操作後
源文件的某些關鍵字會被替換為可用的詞
$AUTHOR$ 用戶名
$Data$ 登記時的時間
$Header$ 標準的首部,包含RCS的完整路徑名,日期,作者
$Id$ 除RCS文件名不完整外與$Header$同.
$Log$ 包含RCS的完整路徑名,版本號,日期,作者和在提交時提供的日誌信息.
$RCSfile$ 包含RCS的文件名,不包括路徑名
$Revision$ 分配的版本號
$Source$ RCS文件的完整名
$State$ 分配的版本的狀態,由 cvs admin -s 分配.
例:
在cvs commit之前,main.c里有
static char *rcsid=/"$Id$/";
執行cvs commit後
main.c的改行變為:
static char *rcsid=/"$Id: main.c,v 1.2 1999/04/29 15:10:14 trimblef Exp$/";
下面開始說說CVS的命令
我們已下面倉庫的數據為例
$CVSROOT
--CVSROOT
--project
--src
--main
--main.c
--main.h
--print
--print.c
--print.h
--term
--term.c
--term.h
CVS checkout 命令
從倉庫提取指定的文件到當前目錄,並建立同樣的結構,並創建CVS目錄
例
代碼如下:
bash$ cvs checkout project
bash$ cvs checkout project/src/main
為使用便利,我們可以對一個目錄建一個縮寫,方法是修改$CVSROOT/CVSROOT/下的
moles文件.(當然是用cvs 命令完成)
代碼如下:
cvs checkout CVSROOT/moles
cd CVSROOT
vi moles
我們在文件尾加上
代碼如下:
src project/src
print project/src/print
cvs commit
以後我們就可以用cvs checkout print來代替
cvs checkout project/src/print
cvs checkout命令預設是得到最新版本.我們也可以得到某一個老版本
代碼如下:
cvs checkout -r 1.1 print
將print的1.1版的代碼取出.
cvs checkout的詳細用法見cvs -H checkout的輸出.
CVS commit 命令
在對文件的修改完成後,用cvs commit提交到倉庫.
代碼如下:
cvs commit -m /"Update by xxxxx/" project
cvs commit -m /"Update main.c/" main.c
提交完成後,當前的版本號會更新,如原來為1.1,現為1.2. 這兩個版本都在
倉庫的主幹(maintrunk)上.
-m選項可以記錄有關提交的注釋.如果沒有指定-m選項,在環境變數CVSEDITOR
中指定的編輯器被調用(vi是預設的),提示鍵入文本,修改記錄注釋.
CVS update
CVS允許多人同時對一個文件進行修改.
假設泥正在修改文件的一部分,現想合並更新自己的本地拷貝(checkout)和
另一個人所做的修改(已經放在倉庫里),可用cvs update
代碼如下:
cvs update
CVS tag , CVS rtag
創建分支可以使用戶對一些文件進行修改而不會影響主幹(當commit時).
創建分支首先為擬修改的某些文件創建一個標簽(tag),標簽是賦於一個文件或一組文件的符號.在源代碼的生命周期里,組成一組模塊的文件被賦於相同的標簽.
創建標簽:在工作目錄里執行cvs tag
例: 為src創建標簽:
代碼如下:
cvs checkout src
cvs tag release-1-0
標簽創建後, 就可以為其創建一個分支:
代碼如下:
cvs rtag -b -r release-1-0 release-1-0-path print
-b :創建分支
-r release-1-0 :指定存在的標簽
releas-1-0-patch:分支
print: 模塊名
合並
使用cvs update -j 選項可以將分支上的改變與本地文件拷貝合並.
代碼如下:
cvs update -j release-1-0 print.c
cvs release
對源文件作必要修改後, 可以用cvs release 刪除本地工作拷貝
並通知其他開發者這個模塊不再使用.
代碼如下:
cvs release -d print
-d : 刪除
print: 目錄
沖突
由於CVS允許多人同時修改同一文件,沖突是不可避免的.例如當兩人
同時修改同一文件的同一行時.
這時,如用cvs update 更新,CVS檢測到沖突的存在,它會將沖突的代碼
用/"/"標識.這時需手工處理這段代碼.與引起
沖突的開發者協商,並對文件修改後即可用cvs commit提交.
C. CVS如何建立伺服器
CVS使用速成配置
一 CVS伺服器的安裝:
1。查看你的操作系統上是否安裝了CVS:
#> rpm -qa|grep cvs
如果沒有安裝你可以在Redhat 第2張光碟上找到,另外你也可以在網上下載到最新的rpm包。很容易找,其實不存在什麼linux版本。
2。建立cvs用戶組:
#> groupadd cvs
3。建立cvs組的cvsroot用戶和所屬的目錄:
#> useradd -g cvs -G cvs –d /cvsroot cvsroot
4。為cvsroot用戶添加密碼:
#> passwd cvsroot
5。改變 /cvsroot/ 的目錄屬性:
#> chmod –R 770 /cvsroot
6。改變用戶登陸身份:
#> su cvsroot
7。開始創建單個項目:
#> cd /cvsroot
#> mkdir project1
#>mkdir project2
8。開始建立倉庫:
#> cvs –d /cvsroot/project1 init
#> cvs –d /cvsroot/project2 init
#> chmod –R 770 ./project1/ ./project2/
9。建立CVS服務啟動文件,我們使用xinetd方式:
#> [Crtl]+[d] 切換到root用戶身份
#> cd /etc/xinetd.d
#> vi cvspserver
service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server= /usr/bin/cvs
server_args= -f --allow-root=/home2/cvsroot/project1 --allow-root=/home2/cvsroot/project2 pserver log_on_failure += USERID
}
註:由於xinetd的server_args長度限制,當你想運行很多的單個倉庫的時候,可以這么做:
#> vi cvspserver
service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /cvsroot/cvs.run
log_on_failure += USERID
}
編寫cvs.run腳本
#> vi /cvsroot/cvs.run
#!/bin/bash
/usr/bin/cvs -f
--allow-root=/cvsroot/project1
--allow-root=/cvsroot/project2
pserver
#>chmod +x /cvsroot/cvs.run
10。加入cvs服務:
#>vi /etc/services
cvspserver 2401/tcp #pserver cvs service
cvspserver 2401/udp #pserver cvs service
11。啟動cvs服務:
#> /etc/init.d/xinetd restart
12。檢查cvspserver服務是否已經啟動:
#> netstat -l |grep cvspserver
應該有如下結果:
tcp 0 0 *:cvspserver *:* LISTEN
二。CVS服務的用戶管理:
上面我們已經建立了project1和project2兩個CVS倉庫,下面我們分別給兩個倉庫建立cvs用戶。
13。創建可以登陸cvs伺服器的用戶名和密碼:
#> su cvsroot
#> vi /cvsroot/project1/CVSROOT/passwd
trotter:*****:cvsroot
mimi:*****:cvsroot
#>vi /cvsroot/project2/CVSROOT/passwd
trotter:*****:cvsroot
gary:*****:cvsroot
這兩個文件的意思是有trotter,mimi,gary三個cvs用戶,mimi擁有project1的使用許可權,gary擁有project2的使用許可權,trotter擁有project1和project2的使用許可權。登陸後的許可權是cvsroot許可權。
注意:這里的cvs用戶和系統用戶是不同的。
14。*****為密碼,由以下文件生成:
#> vi /cvsroot/passwd.pl
#!/usr/bin/perl
srand (time());
my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";
my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
my $plaintext = shift;
my $crypttext = crypt ($plaintext, $salt);
print "${crypttext}
";
#>chmod a+x /cvsroot/passwd.pl
15。如果你想生成一個密碼是「123456」,則:
#> /cvsroot/passwd.pl 「123456」
回車即可得到加密密碼,用其替換passwd文件中的*****
16。Ok,cvs現在已經全部安裝完成了,如果你想讓一個用戶擁有project1的許可權,你就在 /cvsroot/project1/CVSROOT/passwd中給他加入一個用戶;如果你想讓一個用戶同時具有project1和project2 的許可權,你就給/cvsroot/project1/CVSROOT/passwd和/cvsroot/project2/CVSROOT/passwd 里給他加一個用戶名和密碼相同的用戶即可。最後,我們試用一下:
#> cvs -d :pserver:[email protected]:/cvsroot/project1 login
敲入命令回車後提示輸入trotter的密碼,你按照自己設置的密碼輸入,如果沒有什麼錯誤信息出現就是成功了(我的機器IP地址是192.168.1.200)
***CVS伺服器建立和許可權配置
建立一個源代碼庫主要有以下幾步:
(1)初始化cvs伺服器環境。
#cvs -d/usr/local/source init
之後進入/usr/local/source,可以看到有一個目錄CVSROOT, 下面是初始化後的CVS伺服器配置文件。暫且保持不動。
(2)把cvs服務放到xinetd系統服務中。
首先在/etc/xinetd.d目錄下生成任務配置文件cvspserver,文件名稱可以隨便用。
其中內容大致如下:
service cvspserver
{
flags = REUSE
socket_type = stream
wait = no
user = root
protocol = tcp
server = /usr/bin/cvs
server_args = -f --allow-root=/usr/local/source pserver
disable = no
}
其中server_args一個參數指定了源代碼庫路徑,一個指定了伺服器使用密碼認證方式。
第二,要確認/etc/services文件中,有cvspserver關鍵詞,並分配了埠,如:cvspserver 2401/tcp。
第三,重新啟動xinetd服務,cvs服務就可以用了。
(3)測試。假定cvs伺服器在192.168.0.205上,系統上有一個用戶cvs。登陸另一台linxu機器,執行下列命令可以完成測試:
$export CVSROOT=:pserver:[email protected]:2401/usr/local/source
$cvs login
輸入密碼,沒有出錯提示表示登陸成功。
如果想在一個linux系統上建多個源代碼庫,分別提供cvs服務。重復上面步驟就可以了。
第一步時候要注意使用一個不同路徑。
第二步放到xinetd系統服務中稍微麻煩點。/etc/xinetd.d目錄下要生成一個新的任務配置文件,例如cvspserver1,文件中service名稱一定要區分第一個,例如service cvspserver1,server_args做相應變動。還要在/etc/services文件中,加入新的服務埠號,例如: cvspserver1 2402/tcp。重新啟動xinetd服務.
第三步測試時候,可以這樣設定:
$export CVSROOT=:pserver:[email protected]:2402/usr/local/source1
cvs作為並行版本控制系統,多用戶讀寫是需要的。但有時候希望有些用戶只能check out,不能提交新代碼。有時希望cvs上的某些用戶不能check out一些代碼,例如和另一個開發組共用一個CVS,希望另一個組的成員不能check out自己組代碼。
cvs伺服器有一套自己的用戶認證機制,我使用時候沒採用,而是使用了系統上用戶直接作為cvs伺服器用戶,採用linux組、用戶許可權實現了這樣的功能。
舉例說明,在linxu系統上模擬實際兩個開發組a、b,分別有用戶a-user1,a-user2,b-user1,b-user2。
模塊a-source,希望a組成員都可以讀寫,b組成員沒有任何許可權。可以使用以下系列命令:
#chown -R a-user1 a-source
#chgrp -R a a-source
#chmod -R 770 a-source
如果希望模塊a-source,只有a-user1可以寫,同組其它用戶可以讀,b組成員沒有任何許可權,把chmod命令改成-R 750就行了。
必須說明的,cvs中默認一個用戶checkout代碼時候,會在當前模塊下生成一個鎖文件,如果這個用戶對當前模塊沒有寫許可權,讀是不可能的。配合上面的許可權設置,必須改一下cvs伺服器配置。改成不在當前模塊目錄下生成鎖文件,把鎖文件集中到一個所有用戶都有讀寫許可權的目錄。修改配置文件CVSROOT/config:
# Put CVS lock files in this directory rather than directly in the repository.
#LockDir=/var/lock/cvs
把LockDir設上就可以了。
D. 什麼是CVS伺服器
CVS(Concurrent Version System)版本控制系統是一種GNU軟體包,主要用於在多人開發環境下的源碼的維護。實際上CVS可以維護任意文檔的開發和使用,例如共享文件的編輯修改,而不僅僅局限於程序設計。CVS維護的文件類型可以是文本類型也可以是二進制類型。CVS用Copy-Modify-Merge(拷貝、修改、合並)變化表支持對文件的同時訪問和修改。它明確地將源文件的存儲和用戶的工作空間獨立開來,並使其並行操作。CVS基於客戶端/伺服器的行為使其可容納多個用戶,構成網路也很方便。這一特性使得CVS成為位於不同地點的人同時處理數據文件(特別是程序的源代碼)時的首選。
所有重要的免費軟體項目都使用CVS作為其程序員之間的中心點,以便能夠綜合各程序員的改進和更改。這些項目包括GNOME、KDE、THE GIMP和Wine等。
CVS的基本工作思路是這樣的:在一台伺服器上建立一個源代碼庫,庫里可以存放許多不同項目的源程序。由源代碼庫管理員統一管理這些源程序。每個用戶在使用源代碼庫之前,首先要把源代碼庫里的項目文件下載到本地,然後用戶可以在本地任意修改,最後用CVS命令進行提交,由CVS源代碼庫統一管理修改。這樣,就好象只有一個人在修改文件一樣,既避免了沖突,又可以做到跟蹤文件變化等。(
E. 製作csv文件的原理
cvs是一個不錯的軟體版本管理工具。
cvs分為客戶端和伺服器端管理,分別為wincvs和cvsnt。
CVS(Concurrent Version System)和Subversion都是非常優秀的版本控制系統,它可以在軟體開發過程中記錄文件的變更細節以及存儲軟體開發過程中的各種版本。版本控制系統允許多名開發人員同時編輯同一文件而不會丟失數據。每名開發人員都擁有該文件的副本,最後將所有的修改合並到一起成為最終的結果。CVS和Subversion都基於C/S,可以運行在UNIX、Linux以及Windows平台之上。CVS(Subversion)的伺服器端存有一個源代碼庫,源代碼庫中保存眾多不同的項目。客戶端通過和伺服器端建立連接,將源代碼 下載到本地計算機上,開發人員就可以在本地計算機上進行添加、修改、刪除等操作,最後提交到伺服器。