亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

CVS 是 Concurrent Version System(并行版本系統)談

2019-11-17 06:25:24
字體:
來源:轉載
供稿:網友

  [轉載]CVS 是 Concurrent Version System(并行版本系統)談


作者:eclipse 發表時間:2002/08/18 10:27am

作者:龔天乙
  CVS 是 Concurrent Version System(并行版本系統)的縮寫,用于版本治理。在多人團隊開發中的作用更加明顯。CVS 的基本工作思路是這樣的:在一臺服務器上建立一個倉庫,倉庫里可以存放許多不同項目的源程序。由倉庫治理員統一治理這些源程序。這樣,就好象只有一個人在修改文件一樣。避免了沖突。每個用戶在使用倉庫之前,首先要把倉庫里的項目文件下載到本地。用戶做的任何修改首先都是在本地進行,然后用 cvs 命令進行提交,由 cvs 倉庫治理員統一 修改。這樣就可以做到跟蹤文件變化,沖突控制等等。

  由于CVS是建立在在原先 Unix 體系里很成熟的 SCCS 和 RCS 的基礎上,所以CVS多是linux(UNIX)系統中所使用,本文中服務器端設置也是以Linux為例。

  一、CVS服務器的安裝

  首先確認系統中是否安裝CVS服務:
  [root@localhost /]# rpm -qagrep cvs
cvs-1.11.2-cvshome.7x.1
  假如命令輸出類似于上面的輸出則說明系統已經安裝有cvs,否則就需要從安裝光盤中安裝cvs的rpm包,或者到http://www.cvshome.org下載。

  1、建立 CVSROOT

  目錄,因為這里涉及到用戶對CVSROOT里的文件讀寫的權限問題,所以比較簡單的方法是建立一個組,然后再建立一個屬于該組的帳戶,而且以后有讀寫權限的用戶都要屬于該組。假設我們建一個組叫cvs,用戶名是cvsroot。建組和用戶的命令如下

#groupadd cvs
#adduser cvsroot

  生成的用戶宿主目錄在/home/cvsroot(根據自己的系統調整)

  2、用cvsroot 用戶登陸,修改 /home/cvsroot (CVSROOT)的權限,賦與同組人有讀寫的權限: 

  $chmod 771 . (或者770應該也可以)

  注重:這一部分工作是按照文檔說明做的,是否一定需要這樣沒有試驗,我會在做試驗后在以后版本的教程說得仔細一點。假如您有這方面的經驗請提供給我,謝謝。

  3、建立CVS倉庫,(仍然是 cvsroot 用戶),用下面命令:

  $cvs -d /home/cvsroot init

  4、以root身份登陸,修改 /etc/inetd.conf(使用 xinetd 的系統沒有此文件)和 /etc/services

  假如用的是 inetd 的系統,在 /etc/inetd.conf 里加入:
  
  cvsserver  stream tcp nowait root /usr/bin/cvs cvs -f --allow-root=/home/cvsroot pserver

  說明:上面的行是單獨一整行,/usr/bin/cvs 應該是你的cvs版本的命令路徑,請根據自己的系統調整./home/cvsroot是你建立的CVSROOT的路徑,也請根據上面建立目錄的部分的內容做調整。

  假如是使用 xinetd 的系統,需要在 /etc/xinetd.d/ 目錄下創建文件 cvspserver(此名字可以自己定義),內容如下:

  # default: on
  # description: The cvs server sessions;

  service cvsserver
  {
  socket_type = stream
  wait = no
  user = root
  server = /usr/bin/cvs
  server_args = -f --allow-root=/cvsroot pserver
  log_on_failure += USERID
  only_from = 192.168.0.0/24
  }

  其中only_from是用來限制訪問的,可以根據實際情況不要或者修改。修改該文件權限:

  # chmod 644 cvspserver

  在/etc/services里加入:

  cvsserver 2401/tcp

  說明:cvsserver 是任意的名稱,但是不能和已有的服務重名,也要和上面修改 /etc/inetd.conf 那行的第一項一致。

  5、添加可以使用 CVS 服務的用戶到 cvs 組:

  以 root 身份修改 /etc/group,把需要使用 CVS 的用戶名加到 cvs 組里,比如我想讓用戶 laser 和gumpwu 能夠使用 CVS 服務,那么修改以后的 /etc/group 應該有下面這樣一行:

  cvs:x:105:laser,gumpwu

  在你的系統上GID可能不是105,沒有關系。主要是要把laser和gumpwu用逗號分隔開寫在最后一個冒號后面。當然,象RedHat等分發版有類似linuxconf這樣的工具的話,用工具做這件事會更簡單些。

  6、重起inetd使修改生效:

  #killall -HUP inetd

  假如使用的是 xinetd 的系統:

  # /etc/rc.d/init.d/xined restart

然后察看cvs服務器是否已經運行:
[root@localhost /]# netstat -lnpgrep 2401
  tcp 0 0 0.0.0.0:2401 0.0.0.0:* LISTEN 1041/xinetd
則說明cvs服務器已經運行。


  二、治理CVS服務器

  服務器可以用了,現在大家最關心的就是如何治理服務器,比如,我想讓一些人有讀和/或寫 CVS 倉庫的權限,但是不想給它系統權限怎么辦呢?

  不難,在 cvs 治理員用戶(在我這里是 cvsroot 用戶)的家目錄里有一個 CVSROOT 目錄,這個目錄里有三個配置文件,passwd, readers, writers,我們可以通過設置這三個文件來配置 CVS 服務器,下面分別介紹這幾個文件的作用:

  passwd:cvs 用戶的用戶列表文件,它的格式很象 shadow 文件:

  {cvs 用戶名}:[加密的口令]:[等效系統用戶名]

  假如你希望一個用戶只是 cvs 用戶,而不是系統用戶,那么你就要設置這個文件,剛剛安裝完之后這個文件可能不存在,你需要以 cvs 治理員用戶手工創建,當然要按照上面格式,第二個字段是該用戶的加密口令,就是用 crypt (3)加密的,你可以自己寫一個程序來做加密,也可以用我介紹的偷懶的方法:先創建一個系統用戶,名字和 cvs 用戶一樣,口令就是預備給它的 cvs 用戶口令,創建完之后從 /etc/shadow 把該用戶第二個字段拷貝過來,然后再把這個用戶刪除。這個方法對付數量少的用戶比較方便,人一多就不合適了,而且還有沖突條件(race condition)的安全隱患,還要 root 權限,實在不怎么樣。不過權益之計而已。寫一個小程序并不難,可以到 linuxforum 的編程版搜索一下,有個朋友已經寫了一個貼在上面了。

第三個字段就是等效系統用戶名,實際上就是賦與一個 cvs 用戶一個等效的系統用戶的權限,看下面的例子你就明白它的功能了。

readers:有 cvs 讀權限的用戶列表文件。就是一個一維列表。在這個文件中的用戶對 cvs只有讀權限。

writers:有 cvs 寫權限的用戶的列表文件。和 readers 一樣,是一個一維列表。在這個文件中的用戶對 cvs 有寫權限。

上面三個文件在缺省安裝的時候可能都不存在,需要我們自己創建,好吧,現在還是讓我們用一個例子來教學吧。假設我們有下面幾個用戶需要使用 cvs:

laser, gumpwu, henry, betty, anonymous。

其中 laser 和 gumpwu 是系統用戶,而 henry, betty, anonymous 我們都不想給系統用戶權限,并且 betty 和 anonymous 都是只讀用戶,而且 anonymous 更是連口令都沒有。那么好,我們先做一些預備工作,先創建一個 cvspub 用戶,這個用戶的責任是代表所有非系統用戶的 cvs 用戶讀寫 cvs 倉庫。

#adduser
...

然后編輯 /etc/group,令 cvspub 用戶在 cvs 組里,同時把其它有系統用戶權限的用戶加到 cvs 組里。(見上文)

然后編輯 cvs 治理員家目錄里 CVSROOT/passwd 文件,加入下面幾行:

laser:$xxefajfka;faffa33:cvspub
gumpwu:$ajfaal;323r0ofeeanv:cvspub
henry:$fajkdpaieje:cvspub
betty:fjkal;ffjieinfn/:cvspub
anonymous::cvspub

注重:上面的第二個字段(分隔符為 :)是密文口令,你要用程序或者用我的土辦法生成。

編輯 readers 文件,加入下面幾行:

anonymous
betty

編輯 writers 文件,加入下面幾行:

laser
gumpwu
henry

注重:writers中的用戶不能在readers中,要不然不能上傳更新文件。


對于使用CVS的用戶要修改它的環境變量,例如laser用戶的環境變量,打開/home/laser(laser的宿主目錄)下的.bash_PRofile文件,加入

CVSROOT=/home/cvsroot
eXPort CVSROOT

用laser登陸就可以建立CVS項目,假如要root使用,可以修改/etc/profile文件。


現在我們各項都設置好了,那么怎么用呢,我在這里寫一個最簡單的(估計也是最常用的)命令介紹:

首先,建立一個新的CVS項目,一般我們都已經有一些項目文件了,這樣我們可以用下面步驟生成一個新的CVS項目:

進入到你的已有項目的目錄,比如叫 cvstest:
$cd cvstest
運行命令:
$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 標識文件的輸入層次的標記,沒啥用。
這樣我們就建立了一個CVS倉庫了。

建立CVS倉庫的文件夾應該是“干凈”的文件夾,即只包括源碼文件和描述的文件加,而不應該包括編譯過的文件代碼等!

三、使用CVS

winCVS是一個很好的CVS客戶端軟件,在http://cnpack.cosoft.org.cn/down/wincvsdailyguide.pdf可以下載到這個軟件的使用手冊。這里不在贅述了。

四、用CVS治理項目

本人正在一加公司從事該公司ERP項目的開發,在沒有使用CVS的時候,多次出現了由于不同的開發人員修改同一程序,而導致程序錯誤,解決版本控制問題迫在眉睫。

由于這個項目采用Linux平臺下java開發,使用的開發工具Jbulider是支持CVS進行項目治理的,作為主程序員,我決定采用CVS進行版本控制,首先參照上文在Linux服務器上建立了CVS服務,然后我把我本地的工程文件傳至服務器。

例如:我的工程文件在F:ERP下,我把ERP下的erp.jpx文件、defaultroot文件夾和src文件夾上傳至服務器/usr/local/erp下,然后登陸Linux服務器,登陸的用戶是CVS的用戶,其環境變量要正確(我的用戶名為admin)
#cd /usr/local/erp
#cvs import -m "this is a ERP project" erp v_0_0_1 start

這樣名為erp的CVS倉庫就建立了。

之后開發小組的成員可以用winCVS把該項目下載到本地:

打開winCVS
點擊工具欄Create -> Create a new repository... 彈出窗口
在Grenral中
Enter the CVSROOT填寫admin@192.168.1.9:/home/cvsroot 其中admin是cvs的用戶,在本例中admin也是linux的系統用戶,192.168.1.9是服務器的地址,/home/cvsroot是CVS的主目錄,參考上文。
Authentication中選擇"passwd file on the cvs server"
Use version中選擇cvs 1.10 (Standard)

其它項默認即可。

確認后,點工具欄Admin --> Login... 會提示輸入密碼,輸入密碼后,看看winCvs的狀態欄。假如提示

*****CVS exited normally with code 0*****

表示登錄正常。

點擊工具欄Create --> Checkout module...彈出對話框,其中的Checkout settings項中
Enter the module name and path on the server 填寫erp,即我們建立的名為erp的CVS倉庫
Local folder to checkout to 選擇要下載到本地的目錄,我選了F:myerp

其它項目可以默認,確定后就可以下載到本地了,在F:myerp下會有一個erp文件夾,其文件結構和F:erp下的文件結構是一樣的。

用Jbulider打開F:myerperp下的erp.jpx文件,這個工程文件就可以使用了。

在Jbuilder的工具欄Team --> Select Project VCS 彈出對話框,選擇CVS

對于你要進行修改的文件,在Project View中點中該文件,然后點右鍵,探出快捷菜單,選擇CVS --> CVS Edit "xxxx.java(文件名)"

第一次使用可能會提示CVS服務器的密碼。

在修改之前還要選擇CVS --> Update "xxxx.java(文件名)"

修改之后選擇CVS --> Commit "xxxx.java(文件名)"

這樣,修改的文件就保存到CVS服務器了,Update的目的是下載、比較文件。每次在修改之前都Update,保持最新版本。

CVS在項目治理使用中確實起到了良好的效果,仔細研究CVS的命令,可以更好的發揮CVS在版本控制上的能力。


我的QQ是20896,歡迎大家來交流,也可以到我的論壇上討論 http://www.laoer.com

參考資料:《CVS 簡單教程》 作者:何偉平
《CVS服務器快速指南》 作者:何偉平

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品国产亚洲一区二区| 日韩美女视频在线观看| 国产精品视频专区| 国产一区二区三区三区在线观看| 国产精品视频一区二区三区四| 久久精品亚洲国产| 日本久久久久久久久久久| 欧美成aaa人片免费看| 精品久久久视频| 97在线视频免费| 国产精品美乳在线观看| 欧美精品成人91久久久久久久| 一区二区欧美在线| 中文字幕精品av| 这里只有精品在线观看| 日韩在线观看免费av| 亚洲人成网7777777国产| 久久成人av网站| 欧美性黄网官网| 亚洲黄色成人网| 欧美精品videosex性欧美| 国产精品第8页| 2019中文字幕全在线观看| 欧美大片网站在线观看| 久久久久久久久中文字幕| 亚洲成人网久久久| 在线观看免费高清视频97| 国产一区二区三区丝袜| 最近2019年中文视频免费在线观看| 中文字幕在线观看亚洲| 国内外成人免费激情在线视频网站| 亚洲天堂av女优| 性欧美xxxx交| 欧美在线欧美在线| 精品久久在线播放| 欧美俄罗斯乱妇| 国产丝袜精品视频| 久久久久久久久中文字幕| 国外成人在线直播| 欧美成人激情视频免费观看| 欧美亚洲国产日本| 欧美极品美女电影一区| 欧美福利视频网站| 海角国产乱辈乱精品视频| 亚洲欧美日韩天堂一区二区| 欧美精品精品精品精品免费| 日韩欧美中文字幕在线播放| 97视频在线观看视频免费视频| 欧美不卡视频一区发布| 91亚洲精品在线观看| 不卡av在线网站| 欧美日韩精品在线视频| 国产精品偷伦免费视频观看的| 久久久精品在线| 在线精品高清中文字幕| 久久精品国产亚洲精品2020| 国产精品久久电影观看| 日韩av大片在线| 日韩电影第一页| 成人av资源在线播放| 精品久久中文字幕久久av| 日韩高清av一区二区三区| 久久97精品久久久久久久不卡| 国产精品网站大全| 亚洲精品国产精品乱码不99按摩| 国产97人人超碰caoprom| 日韩专区在线播放| 欧美激情xxxx性bbbb| 欧美激情性做爰免费视频| 亚洲天堂av在线播放| 午夜精品一区二区三区在线视频| 深夜福利国产精品| 狠狠综合久久av一区二区小说| 日韩国产精品视频| 日韩精品在线观看网站| 日韩成人网免费视频| 精品国产一区二区三区久久| 亚洲香蕉伊综合在人在线视看| 91久久精品国产91久久性色| 国产精品96久久久久久| 国产精品久久久久久超碰| 亚洲欧美国产日韩天堂区| 91精品国产乱码久久久久久久久| 亚洲欧美一区二区三区情侣bbw| 91av在线看| 国产精品美女久久| 久久中文字幕视频| 国产精品一区二区三区成人| 欧美激情中文网| 欧美野外猛男的大粗鳮| www.久久草.com| 日韩高清人体午夜| 欧美丰满少妇xxxxx| 欧美黑人巨大精品一区二区| 国产精品久久久久久久久久久久久| 亚洲最大的av网站| 亚洲欧美另类人妖| 欧美精品第一页在线播放| 国产精品久久久久久久久久久新郎| 在线视频一区二区| 日韩一区二区在线视频| 色噜噜狠狠狠综合曰曰曰88av| 亚洲免费视频在线观看| 日韩av在线网| 国产亚洲精品成人av久久ww| 国产丝袜一区二区| 日韩电影大全免费观看2023年上| 51精品国产黑色丝袜高跟鞋| 欧美一级在线亚洲天堂| 午夜精品福利电影| 中文字幕最新精品| 国产精品第100页| 欧美激情欧美激情在线五月| 亚洲男人天堂2023| 欧美性猛交xxx| 国产精品久久久久久久久久久久| 久久夜精品香蕉| 国产精品免费小视频| 91久久精品国产| 亚洲女性裸体视频| 欧美小视频在线观看| 亚洲欧美自拍一区| 日韩免费精品视频| 日韩av综合网站| 日韩在线观看网址| 中文字幕亚洲综合久久| 成人观看高清在线观看免费| 日韩欧美亚洲一二三区| 怡红院精品视频| 色综合视频网站| 国产精品久久久久久影视| 亚洲欧洲激情在线| 日韩中文字幕在线精品| 国产精品三级美女白浆呻吟| 91精品视频播放| 欧美日韩视频在线| 国产不卡在线观看| 国产日韩欧美91| 国产亚洲精品va在线观看| 国产欧美日韩精品在线观看| 久久综合久久八八| 亚洲欧美日韩一区二区三区在线| 亚洲欧洲在线视频| 国产精品丝袜久久久久久高清| 亚洲аv电影天堂网| 国产精品一区二区三区久久| 欧美日韩中文字幕在线| 国产小视频91| 麻豆国产精品va在线观看不卡| 欧美激情a∨在线视频播放| 亚洲色图第一页| 91精品国产91久久久久| 国产精品国产福利国产秒拍| 中文字幕精品一区二区精品| 亚洲经典中文字幕| 91牛牛免费视频| 国模吧一区二区三区| 精品国产一区二区三区久久狼5月| 亚洲色图18p| 久久久久久久香蕉网| 久久精品成人欧美大片古装| 国产精品自在线| 97国产成人精品视频| 亚洲免费视频观看|