<ruby id="h6500"><table id="h6500"></table></ruby>
    1. <ruby id="h6500"><video id="h6500"></video></ruby>
          1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>
            • 軟件測試技術(shù)
            • 軟件測試博客
            • 軟件測試視頻
            • 開(kāi)源軟件測試技術(shù)
            • 軟件測試論壇
            • 軟件測試沙龍
            • 軟件測試資料下載
            • 軟件測試雜志
            • 軟件測試人才招聘
              暫時(shí)沒(méi)有公告

            字號: | 推薦給好友 上一篇 | 下一篇

            配置管理工具cvs的使用方法

            發(fā)布: 2009-8-25 15:53 | 作者: webmaster | 來(lái)源: 本站原創(chuàng ) | 查看: 322次 | 進(jìn)入軟件測試論壇討論

            領(lǐng)測軟件測試網(wǎng)

            配置管理工具cvs的使用方法   配置管理

                    cvs是一種版本控制系統,它不同于一般的版本控制系統,它可以實(shí)現版本的并發(fā)管理,即可已有多個(gè)用戶(hù)同時(shí)改動(dòng)同一個(gè)文件而不會(huì )互相影響,然后不同的用戶(hù)將它們各自修改的文件提交到cvs服務(wù)器上,有cvs來(lái)進(jìn)行文件之間的比較,進(jìn)而把這些不同的部分按照某種算法進(jìn)行合并形成一個(gè)新的版本。

                    cvs服務(wù)器一般架設在unix系統上,雖然也有可以在Windows上運行的服務(wù)器版本,但是其性能表現遠不如在unix上面表現的好, 但是cvs的客戶(hù)端在Windows下卻可以工作的很好。我在這里講簡(jiǎn)單地介紹一下在Linux下配制cvs服務(wù),以及在Windows下客戶(hù)端的設置情況。

                    首先我們先說(shuō)一下如何在Linux上設置cvs服務(wù),絕大多數的Linux發(fā)行拌種都包含了cvs,如果你的發(fā)行版本中沒(méi)有或者你向是用最新的cvs版本,你可以到http://www.cvshome.org去取得最新的服務(wù)器版本,這里講述的是以1.10版為基礎的, 它應該適合更新的版本.

                    如果你是從http://www.cvshome.org上的到的.tar.gz形式的源代碼版本,參照源代碼中的相關(guān)的說(shuō)明文件,安裝指導來(lái)編譯程序,然后進(jìn)行安裝,如果你是用Linux發(fā)行版中的cvs包進(jìn)行安裝,執行相應的包管理工具。比如在Redhat中你可以是用下面的命令來(lái)安裝cvs.rpm -ivh cvs-1.10.8-3.i386.rpm

                    在安裝完成后,我們就可以進(jìn)行相應的配置。一般cvs是用pserver的認證方式作為一種服務(wù)在Linux上運行,先要確定系統里/etc/services文件有cvs服務(wù)的入口,一般得有以下兩行:
            cvspserver 2401/tcp # cvs client/server operations
            cvspserver 2401/udp # cvs client/server operations

                    cvs服務(wù)是通過(guò)inetd或者是xinetd來(lái)啟動(dòng)的。對于inetd,修改/etc/inetd.conf,添加以下的句子:
                cvspserver stream tcp nowait root /usr/bin/cvs cvs --allow-root=/cvsroot pserver

                    由于在較新的Linux發(fā)行版(如:RedHat7.x)中都是用新xinetd代替了inetd,要用xinetd來(lái)啟動(dòng)cvs服務(wù)
                    你需要進(jìn)入到/etc/xinetd.d/目錄,然后編輯一個(gè)文本文件(名字隨意),這里是用cvspserver作為文件名,這個(gè)文件的內容如下所示:
            service cvspserver
            {
            socket_type = stream
            wait = no
            user = root
            env = HOME=
            server = /usr/bin/cvs
            server_args = --allow-root=/cvsroot pserver
            }
                    注意上面的service后面的名稱(chēng)一定要和你在/etc/service文件中的cvs服務(wù)名稱(chēng)一樣,在server_args行我們指定了cvs使用pserver認證方式,可能容易產(chǎn)生誤解的是env = HOME=這一行,添加這一行的目的就是為了解決在執行一些cvs操作時(shí)產(chǎn)生的讀取/root/.cvsignore文件的錯誤,上面env那行的意思就是在運行cvs服務(wù)的時(shí)候將環(huán)境變量HOME置空,這樣雖然執行cvs的用戶(hù)是root,但是由于沒(méi)有了HOME這個(gè)環(huán)境變量,所以cvs就不會(huì )在去讀取/root/.cvsignore文件了。

                    到這里我們就配置完了cvs的啟動(dòng)所需要的文件,但是要使cvs正常運行還需要對需要使用cvs的用戶(hù)進(jìn)行設置,下面是我在配置cvs是使用的方法。首先建立一個(gè)用戶(hù)組cvs,可以使用groupadd或者addgroup命名,也可以直接編輯/etc/group文件添加這個(gè)組,然后添加一個(gè)用戶(hù)cvsroot, 然后修改/etc/passwd文件使cvsroot用戶(hù)的缺省組是cvs組,而不是cvsroot組。建立/cvsroot目錄,然后修改/cvsroot的屬主及屬
            性:
            #chown cvsroot.cvs /cvsroot
            #chmod 755 /cvsroot
                (原文這里是771,但是我們要配置cvsweb.cgi,下面再談)。
                對cvs進(jìn)行初始化:cvs -d /cvsroot init
                    這樣cvs服務(wù)器就可以使用了,用cvs -d :pserver:cvsroot@host:/cvsroot login登陸,輸入cvsroot用戶(hù)在服務(wù)器上的口令,沒(méi)有出現錯誤提示就表示成功了。

                    下面講述Windows下客戶(hù)端的配置,我只會(huì )用wincvs,覺(jué)得很不錯,不用記那些繁瑣對命令:)可以從http://www.cvshome.org找到相應的下載地址,在linuxforum也有下載,3M多一點(diǎn)。啟動(dòng)wincvs在A(yíng)dmin菜單中選擇preferences然后在global頁(yè)中設置CVSROOT,就是:pserver:cvsroot@host:/cvsroot。在認證方式中選擇passwd file on the cvs server, 在下面的版本號中選擇合適的版本,執行Admin菜單中的login,在提示框輸入口令,如果Output窗口出現以下提示:
            *****CVS exited normally with code 0*****
                    就表示我們現在可以在Windows下使用cvs服務(wù)了。我開(kāi)始不知道成功了,還滿(mǎn)大街的問(wèn)wincvs怎么了:(
                    英文好就看wincvs自帶的幫助文擋,我也推薦兩個(gè)文檔:)
                wincvs.pdf winhtml.zip

                特別是這個(gè)pdf文檔確實(shí)不錯,還是中文的:)


                如果你想在網(wǎng)頁(yè)里給大家顯示你的項目,那么cvsweb是一個(gè)不錯的選擇。這是一個(gè)perl程序,可以到以下地址找到最新版:
            http://stud.fh-heilbronn.de/~zeller/cgi/cvsweb.cgi
                    現在的版本是1.93,記得要用新版,1.8以下有一個(gè)小小的漏洞,可以到綠盟查一查。
                    由于是cgi程序,是以nobody用戶(hù)執行的,所以/cvsroot的屬性要設成775。開(kāi)始我按章照搬,把屬性改成771,結果項目的目錄就是不出來(lái),埋葬了半天的青春:(還有記得把/cvsroot/CVSROOT/history的屬性改成666。cvsweb.conf里%CVSROOT數組的Configuration設成/cvsroot,就是cvs倉庫的路徑不要那個(gè)長(cháng)長(cháng)CVSROOT變量。這些其實(shí)在它的說(shuō)明文檔和程序注釋里都講到了,只是這個(gè)世界是懶人的世界:)


                    一切都陽(yáng)春白雪,可以埋頭寫(xiě)程序了?只是cvs還有一個(gè)小小的DoS漏洞要跟大家說(shuō)一下:(每個(gè)cvs的操作過(guò)程會(huì )以操作用戶(hù)的身份在/tmp下臨時(shí)建一個(gè)鎖定了的目錄cvs_servPID,這時(shí)如果有人建了大量的同類(lèi)文件就會(huì )使cvs的操作出錯,會(huì )提示:
            cannot change permissions on temporary directory
            Operation not permitted
                下面是測試的perl程序:
            #!/usr/bin/perl
            #$min和$max的值根據實(shí)際情況修改
            $min=400;
            $max=4000;
            for ($x=$min;$x<=$max;$x++) {
            open CVSTMP, ">>/tmp/cvs-serv$x" or die "/tmp/cvs-serv$x: $!";
            chmod 0600, "/tmp/cvs-serv$x";
            close CVSTMP;
            }

                解決方法:
                    使用server.c中的mktemp(3)函數或者其它任何可以產(chǎn)生唯一文件名的方法。在/tmp/目錄所在的分區使用空間配額也能解決部分問(wèn)題。 主要還是扎緊籬笆,莫讓別人闖進(jìn)來(lái),這畢竟是一個(gè)local的問(wèn)題。

            延伸閱讀

            文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/

            TAG: CVS cvs 工具 管理


            關(guān)于領(lǐng)測軟件測試網(wǎng) | 領(lǐng)測軟件測試網(wǎng)合作伙伴 | 廣告服務(wù) | 投稿指南 | 聯(lián)系我們 | 網(wǎng)站地圖 | 友情鏈接
            版權所有(C) 2003-2010 TestAge(領(lǐng)測軟件測試網(wǎng))|領(lǐng)測國際科技(北京)有限公司|軟件測試工程師培訓網(wǎng) All Rights Reserved
            北京市海淀區中關(guān)村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
            技術(shù)支持和業(yè)務(wù)聯(lián)系:info@testage.com.cn 電話(huà):010-51297073

            軟件測試 | 領(lǐng)測國際ISTQBISTQB官網(wǎng)TMMiTMMi認證國際軟件測試工程師認證領(lǐng)測軟件測試網(wǎng)

            老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
              <ruby id="h6500"><table id="h6500"></table></ruby>
              1. <ruby id="h6500"><video id="h6500"></video></ruby>
                    1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>