• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

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

    CVS 速成班

    發布: 2007-6-21 12:06 | 作者:   | 來源:   | 查看: 25次 | 進入軟件測試論壇討論

    領測軟件測試網

       
      結合文檔和一些網上資源,折騰了半天終于搞定了CVS,我寫一點非常簡單的"速成"
    的教材.希望對大家有用. 

    下面是我的步驟和做法. 

    1,要求: 

    root 權限; 

    CVS軟件,請找到相關的rpm,tgz,deb 等包裝上,或者到

    http://www.cvshome.org/CVS/Dev/code 
    下載原程序編譯安裝,這里我不準備介紹它的安裝,請參考CVS自身的文檔安裝.
    我使用Slackware的tgz包,安裝的命令是 
    #installpkg cvs*.tgz 
    其他包請參考對應包管理工具的命令. 
    一定的系統資源,要有一定內存(32M就能工作得很好),要一定的磁盤空間,看
    你的項目的大小和多少而定. 
    2,架設CVS服務器: 
    建立CVSROOT目錄,因為這里涉及到用戶對CVSROOT里的文件讀寫的權限問題,
    所以比較簡單的方法是建立一個組,然后再建立一個屬于該組的帳戶,而且以后有
    讀寫權限的用戶都要屬于該組.假設我們建一個組cvs,用戶名cvsroot.建組和用
    戶的命令如下 
    #groupadd cvs 
    #adduser cvsroot
    生成的用戶家目錄在/home/cvsroot(根據自己的系統調整) 
    用cvsroot用戶登陸,修改 /home/cvsroot。–VSROOT)的權限,賦與同組人有讀寫
    的權限: 
    $chmod 771 .。ɑ蛘770應該也可以) 
    注意:這一部分工作是按照文檔說明做的,是否一定需要這樣沒有試驗,我
    會在做試驗后在以后版本的教程說得仔細一點.如果您有這方面的經驗請提
    供給我,謝謝. 
    建立CVS倉庫,(仍然是cvsroot用戶),用下面命令: 
    $cvs    -d /home/cvsroot init
    以root身份登陸,修改/etc/.netd.conf 和 /etc/services,分別加入下面一行: 
    在 /etc/inetd.conf 里加入: 
    cvsserver    stream    tcp    nowait    root    /usr/bin/cvs    cvs --allow-root=/home/cvsroot pserver 
    說明:上面的行是單獨一整行,/usr/bin/cvs 應該是你的cvs版本的命令路徑,
    請根據自己的系統調整./home/cvsroot 是你建立的CVSROOT的路徑,也請
    根據上面建立目錄的部分的內容做調整. 

    在/etc/services里加入: 
    cvsserver    2401/tcp 

    說明:cvsserver是任意的名稱,但是不能和已有的服務重名,也要和上面修
    改/etc/inetd.conf那行的第一項一致.這里我用的是CVS的口令認證方式,
    CVS還有其他認證方式,我沒有做試驗,如果您有經驗,請補充,謝謝. 
     

    添加可以使用CVS服務的用戶到cvs組: 
    以root身份修改/etc/group,把需要使用CVS的用戶名加到cvs組里,比如我想
    讓用戶laser和gumpwu能夠使用CVS服務,那么修改以后的/etc/group應該有下
    面這樣一行: 
    cvs:x:105:laser,gumpwu 
    在你的系統上GID可能不是105,沒有關系.主要是要把laser和gumpwu用逗號
    分隔開寫在最后一個冒號后面.當然,象RedHat等分發版有類似linuxconf這樣
    的工具的話,用工具做這件事會更簡單些.
    重起inetd使修改生效: 
    #killall -HUP inetd
    這樣服務器就設置完成了.我們接著搞客戶端. 
    3,設置客戶端,如果是Linux(或者其他*nix),客戶端和服務器端的軟件是一樣的,如果是
    Win,MAC等平臺,請到http://www.loria.fr/cgi-bin/molli/wilma.cgi/rel 找相應的客戶端軟件,
    這里我先說一下在Linux(*nix)里怎么做: 

    設置環境變量CVSROOT: 
    $export CVSROOT=:pserver:laser@the_server_name:

    /home/cvsroot 
    注意:這里的pserver是訪問方式,我在上面設置的是口令認證,所以這里是
    pserver,如果你的CVS服務器設置成別的訪問模式,那么需要相應修改.
    laser是可以使用 CVS服務器的用戶名,這里可以根據你的設置修改,我在這
    個版本設置的是直接使用系統用戶的口令文件,也就是說laser必須是CVS服
    務器上的合法用戶,這里當然有安全問題,CVS可以設置成為擁有自己的用戶,
    我將在以后的版本里面增加這些內容,或者您也可以提供一些補充,或者直接
    讀CVS的文檔.the_server_name是CVS服務器的名稱或者IP地址,根據你的情
    況填寫,/home/cvsroot是你的CVS服務器的CVSROOT目錄,根據你的CVS服務
    器設置做修改或者詢問管理員.你可以把這行放到你的shell的profile里
    (.bash_profile,.profile等)這樣就不用每次敲一長串命令了. 
     

    登陸CVS服務器: 
    $cvs login,這時候cvs會問你口令,請把你在CVS服務器上的口令敲進去,這里
    是laser在CVS服務器上的系統用戶的口令: 
     Passwd:xxxxxxxx 
    成功登陸后將在你的家目錄建立一個.cvspass文件,以后就不用輸入口令了.
    好,客戶端設置完成,簡單吧. 
    現在服務器和客戶端都設置好了,那么怎么用呢,我在這里寫一個最簡單的(估計也是最常用
    的)命令介紹: 
    首先,建立一個新的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 checkout cvstest
    從倉庫中檢索出cvstest項目的源文件. 
    如果你已經做過一次checkout了,那么不需要重新checkout,只需要進入cvstest項目的目錄,更新
    一把就行了: 
    $cd cvstest 
    $cvs update
    一下即可.又或者你不想直接更新,只是想看看有沒有更新的東西,那么: 
    $cvs status
    這時后會打印出一長串狀態報告(你可能需要用類似less這樣的命令分頁顯示,或者定向到一個輸
    出文件里慢慢看.),對項目中的每個文件有一份狀態報告,類似這樣:

    ================================================ 
    File: foo.c             Status: Up-to-date 
       Working revision:    1.1.1.1 'Some Date' 
       Repository revision: 1.2     /home/cvsroot/cvstest/foo.c,v 
       Sticky Tag:          (none) 
       Sticky Date:         (none) 
       Sticky Options:      (none) 

    這里最重要的就是 Status 欄,這里總共可能有四種狀態: 
    Up-to-date:表明你要到的文件是最新的. 
    Locally Modified:表明你曾經修改過該文件,但還沒有提交,你的版本比倉庫里的新. 
    Needing Patch:表明有個哥們已經修改過該文件并且已經提交了!你的版本比倉庫里的舊. 
    Needs Merge:表明你曾經修改國該文件,但是偏偏有個不識相的也修改了這個文件,而且還提交
    給倉庫了! 

    如果你只是想保持軟件的同步的話(象我),那么上面的東西就足夠用了.可是如果多人協作開發
    項目的話,可就不是了這么簡單了.當你參加項目,維護文件時,就需要更多命令,比如說你我都
    是某nasdaq項目的開發人員: 

    1,你對某個文件做了修改,比如說改了ceo.c,加了一行程序:printf("where can I find VC to cheat!"); 
    改完之后你要把修改提交給倉庫,用命令: 
    $cvs commit -m "add a complain" ceo.c 
    或者就是: 
    $cvs commit -m "worry about money" 
    讓cvs幫你檢查哪個文件需要提交. 

    2,當我開始干活的時候,可能我先: 
    $cvs status 
    一把,這時候我會看到: 

    =============================================== 
    File: ceo.c             Status: Needing Patch 

       Working revision:    1.1.1.1 'Some Date' 
       Repository revision: 1.2     /home/cvsroot/nastaq/ceo.c,v 
       Sticky Tag:          (none) 
       Sticky Date:         (none) 
       Sticky Options:      (none) 

    于是我知道有人改了ceo.c,于是我就: 
    $cvs update ceo.c 
    或者干脆: 
    $cvs update 
    把ceo.c這個文件更新為最新版本,然后再干活.然后提交. 

    如果這天你修改了coo.c,加了一行 puts("how about another kind of bragging?"); 
    并且提交了,但是這時候我已經 $cvs status 過了,就是說我不知道你的修改. 
    而我加了一行printf("You must shamelessly and seems knowingness to act as a coo"); 
    并且傻乎乎地提交: 
    $cvs commit coo.c 
    這時候,CVS會告訴我 
    cvs commit: Examing . 
    cvs server: Up-to-date check failed for 'coo.c' 
    cvs [server aborted]: correct above error first! 

    于是我知道有個狗屎在我修改文件的當口做了提交,于是我 
    $cvs update 
    這時cvs會報告: 
    RCS file: /home/cvsroot/nasdaq/coo.c,v 
    retrieving revision 1.1.1.1 
    retrieving revision 1.2 
    Merging differences between 1.1.1.1 and 1.2 into coo.c 
    rcsmerge: warning: conflicts during merge 
    cvs update: conflicts found in coo.c 
    C coo.c 
    告訴你coo.c有版本沖突,于是我編輯coo.c,這時一般文件里看起來象這樣: 
      ... 
    printf("You must shamelessly and seems knowingness to act as a coo"); 
    <<<<<<< foo.c 
    ======= 
    ... 
      puts("how about another kind of bragging?"); 
    >>>>>>> 1.2 
    ... 

    于是我把上面改成: 
    printf("You must shamelessly and seems knowingness to act as a coo"); 
    puts("how about another kind of bragging?"); 
    然后 
    $cvs commit -m "merged" coo.c 
    于是下回你再更新的時候就有新的補釘要打...如此往復,直到完成所有修改. 
    不過這里有一些要注意的地方就是刪除程序,如果你刪掉一行對你可能沒有用的程序 
    puts("to be honest"); 而我不想刪除(因為我有用),而我不知情地直接: 
    $cvs update 
    了,那么我的這行程序也完蛋了,所以這里我們要注意所有開發人員的協調,千萬不要 
    亂刪東西,大不了用 
    #if    0 
    #endif 
    宏定義對括起來.實在要刪東西,那最好先標記一個版本: 
    $cvs tag v_0_0_1 

    然后你可以發布并刪除你自己的工作目錄里這個版本的文件(注意:不是刪除倉庫里的.): 

    $cvs release -d nasdaq 

    然后你再生成一個新分支: 

    $cvs rtag -b -r v_0_0_1 v_0_0_1_1 nasdaq 

    然后再建立v_0_0_1_1的分支 

    $cvs checkout -r v_0_0_1_1 nasdaq 

    編輯并修改這個分支的文件,這樣的做法比較好. 

    還有一些命令,比如要增加一個文件 garbage_china_concept_stocks_list: 

    $cvs add garbage_china_concept_stocks_list 

    然后還要: 

    $cvs commit  garbage_china_concert_stocks_list 

    看起來有點象數據庫里的事務?的確是這樣.CVS維護著一個本地的參考文件(在CVS/Entries里),
    這樣提交的時候就可以一次地把所有改變放到服務器端,這樣也更安全. 
    同樣,如果想刪除文件 bankrupted_web_site: 

    $rm bankrupted_web_site 
    $cvs remove bankrupted_web_site 
    $cvs commit bankrupted_web_site 
      

    好了,上面所有的東西,估計就是我們用cvs時80%情況下用的命令和內容,包括文件的更新,提
    交,沖突的解決,分支的派生,增刪文件等.實際上cvs的功能之強大,遠遠超出我在這里描述的
    內容,我這個"速成"也就管不了太多了,希望隨著時間的推移,我們能夠更加有效地使用CVS.
    也希望大家能夠不斷補充這篇文章,最后能夠成為手冊,而不僅僅是速成.當然,還要更多地參考
    別的文檔. 

    參考資料: 
    http://www.loria.fr/cgi-bin/molli/wilma.cgi/doc.865331095.html 
    http://www.loria.fr/~molli/cvs/doc/cvs_toc.html

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


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

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>