• <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-7-01 23:30 | 作者: admin | 來源: | 查看: 14次 | 進入軟件測試論壇討論

    領測軟件測試網


    本文出自:http://www.linuxforum.net 作者: lhl (enthusiast)

    假設:
    cvsroot user:cvsroot home=/home2/cvsroot/cvsroot
    cvs group:cvs

    1:安全

    #groupadd cvs
    #mkdir /home2/cvsroot#注意:/home2/cvsroot為root所有
    #useradd -g cvs -G cvs -d /home2/cvsroot/cvsroot cvsroot

    /***未經實驗**/
    #mv /usr/bin/cvs /usr/bin/cvs.real
    #cat > /usr/bin/cvs
    #!/bin/sh
    umask 2# Or whatever your site standard is.
    exec /usr/bin/cvs.real ${1+"$@"}
    ^D
    /*************/

    2:多倉庫

    注意,我們用cvsroot僅僅是用來管理,所以,不要在它$HOME下面創建任何倉庫
    另外,cvsroot用戶的初始環境不應該包含非空的$CVSROOT.
    使用cvsroot來進行的任何管理工作都指明CVSROOT是一個好的習慣.

    OK,開始給單個項目建倉庫

    假設有兩個項目,project1,project2,希望單獨存放,便于管理

    #mkdir /home2/cvsroot/pro1
    #mkdir /home2/cvsroot/pro2
    #chown cvsroot.cvs /home2/cvsroot/pro1
    #chown cvsroot.cvs /home2/cvsroot/pro2
    #chmod 2775 /home2/cvsroot/pro1
    #chmod 2775 /home2/cvsroot/pro2
    (更高的安全要求則$chmod 2770 /home2/cvsroot/cvsroot/pro1)

    OK,開始建立倉庫

    #su - cvsroot
    $cvs -d /home2/cvsroot/pro1 init
    $cvs -d /home2/cvsroot/pro2 init
    $chmod 2775 /home2/cvsroot/pro1
    $chmod 2775 /home2/cvsroot/pro2

    修改啟動文件

    service cvspserver
    {
    disable = no
    flags= REUSE
    socket_type= stream
    wait= no
    user= root
    bind= 192.168.0.1
    only_from= 192.168.0.0/24
    server= /usr/bin/cvs
    server_args= -f --allow-root=/home2/cvsroot/pro1 --allow-root=/home2/cvsroot/pro2 pserver
    log_on_failure += USERID
    }

    /********技巧*************/

    由于xinetd的server_args長度限制,當你想運行很多的單個倉庫的時候,可以這么做,

    #vi /etc/xinetd.d/cvspserver
    service cvspserver
    {
    disable= no
    flags= REUSE
    socket_type= stream
    wait= no
    user= root
    bind= 192.168.0.1
    only_from= 192.168.0.1.0/24
    server= /home2/cvsroot/cvs.run
    log_on_failure += USERID
    }

    :wq

    然后寫腳本/home2/cvsroot/cvs.run

    #vi /home2/cvsroot/cvs.run
    #!/bin/bash
    /usr/bin/cvs -f \
    --allow-root=/home2/cvsroot/pro1 \
    --allow-root=/home2/cvsroot/pro2 \
    --allow-root=/home2/cvsroot/pro3 \
    --allow-root=/home2/cvsroot/pro4 \
    --allow-root=/home2/cvsroot/pro5 \
    --allow-root=/home2/cvsroot/pro6 \
    pserver

    :wq

    #chmod +x /home2/cvsroot/cvs.run

    #service xinetd restart

    OK!

    /*************************/

    修改不同倉庫的策略

    #su - cvsroot

    $export CVSROOT=/home2/cvsroot/pro1
    $cvs co CVSROOT
    $cd CVSROOT
    $vi config
    # Set this to "no" if pserver shouldn@#t check system users/passwords
    SystemAuth=no

    # Put CVS lock files in this directory rather than directly in the repository.
    LockDir=/var/cache/cvs/pro1

    # Set `TopLevelAdmin@# to `yes@# to create a CVS directory at the top
    # level of the new working directory when using the `cvs checkout@#
    # command.
    #TopLevelAdmin=no

    # Set `LogHistory@# to `all@# or `TOFEWGCMAR@# to log all transactions to the
    # history file, or a subset as needed (ie `TMAR@# logs all write operations)
    LogHistory=TOFEWGCMAR

    :wq

    $vi loginfo
    ALL (echo %{sVv}; cat) | /usr/local/viewcvs-0.9.2/loginfo-handler#SQL checkin

    :wq

    $cvs commit -m "auth change,log change"


    OK,既然不使用系統用戶驗證,那么我們來創建用戶
    /************/

    不使用系統帳號的原因是充分保證安全,避免系統帳號直接刪除倉庫里的文件.
    雖然麻煩,但是很有必要,因為無法保證每一個程序員都對cvs操作很有經驗.


    在這種情況下,為每一個工程各建一個等效系統用戶,此用戶應該是cvs組的成員.
    不必有shell.
    (也可以為所有的項目建一個等效用戶,私有的cvs Server完全可以這么做,甚至可以
    直接使用cvsroot,呵呵,就是比較危險而已)

    #adduser -g cvs -G cvs -s /bin/false -d /home2/cvsroot/pro1 -M cvspro1

    /************/

    創建一個LockDir(選擇/var/cache是因為某些系統放在/var/lock下面有問題)
    #mkdir /var/cache/cvs
    #chown cvsroot.cvs /var/cache/cvs
    #chmod 2775 /var/cache/cvs

    #mkdir /var/cache/cvs/pro1
    #chown cvspro1.cvs /var/cache/cvs/pro1
    #chmod 2775 /var/cache/cvs/pro1

    創建用戶

    先清除環境
    $export CVSROOT=
    $cd ~cvsroot
    $rm -rf CVSROOT

    直接切換到pro1的倉庫下

    $cd /home2/cvsroot/pro1
    $cd CVSROOT


    創建用戶hleil

    $htpasswd -c passwd hleil

    修改passwd成cvs的格式

    $vi passwd
    hleil:svcsdasdcvjn:cvspro1

    :wq

    加入writers組

    $echo hleil >>writers

    /*****這里有一個問題**********/

    如果用戶hleil需要writers權限,那么,他絕對不可以出現在readers組中.
    writers,readers,passwd的文件尾空行是必要的.
    等效系統帳號如果不存在,將導致access failed.
    cvs帳號盡量沒有對應的系統帳號,如果有,確保它們的passwd不同.

    /******************************/

    OK了!

    項目pro2同理.


    3:夠建模塊化的工程

    關于模塊化,大家掛在口邊也不是一天兩天了,這里指的是項目的模塊化,不是指具體的程序.


    正常的項目開始具體實施之前,必定做好了系統分析和結構設計,當然,像打印"Hello World!"
    這樣的"項目"或許不用進行系統分析吧:P,所以也不用麻煩我們辛苦構建的cvs.

    軟件設計完成之后,各個模塊應該也就出來了,在實施之前,我們需要考慮用cvs貫徹設計結果.

    cvs的模塊不必細化到瘋狂的程度,大致按照功能劃分并且兼顧工作組就可以了.同一模塊必需
    僅有單一工作組負責.

    確定模塊之后,我們來建立模塊.

    #su - hleil
    $export CVSROOT=:pserver:hleil@192.168.0.1:/home2/cvsroot/pro1
    $cvs login
    $cvs co CVSROOT

    假設有這樣的目錄結構,
    pro01
    libs
    libs/01
    libs/02
    每個目錄下面都有一個初始化文件init(方便import)

    我們可以這樣定義modules,

    $vi CVSROOT/modules
    pro01pro01 & libs
    libs-01-d 01libs/01
    libs-02 -d 02libs/02
    libs-a libs-01 libs-02

    :wq

    $cvs commit -m "init modules"

    倒入目錄結構,

    $cvs import -m "init checkin" pro01 init start


    現在,你的三個小組可以分別工作于pro01,libs-01,libs-02,全部程序只要co pro01就行了.


    簡單吧:P

    4:克隆

    構建模塊

    $export CVSROOT=remote
    $cvs login
    $cvs co CVSROOT/modules
    $cvs logout
    $mv CVSROOT/modules .
    $rm -rf CVSROOT
    $export CVSROOT=local
    $cvs login
    $cvs co CVSROOT/modules
    $cp modules CVSROOT/modules
    $cvs commit -m "clone init modules"

    研究目錄結構
    所有的 -a 定義的模塊不需要checkout
    $sed "/#/d" modules > modules.tmp
    $sed "/^$/d" modules.tmp > modules.tmp2
    $sed s/" "*/" "/g modules.tmp2 > modules.tmp
    $cat modules.tmp|sed /-a/d >mymodules

    仔細研究目錄結構,以便co不含有垃圾的代碼

    $cp mymodules co-list

    編輯co-list,不需要的注釋,OK

    $sed "/#/d" co-list > co-list.tmp
    $cut -d " " -f 1 co-list.tmp >co-list

    OK,此時的co-list就是我們所需要得所有模塊

    $export CVSROOT=remote
    $cvs login
    $for mm in $(cat co-list)
    do
    cvs co $mm
    done

    $cvs logout
    $export CVSROOT=local
    $cvs login

    作合適的目錄調整

    如果modules 里面有
    xxx yyy
    那么,co xxx將產生xxx目錄,實際應該是yyy
    保留co-list.tmp以便于查證
    比如:
    gobj-lib -d gobj libs/gobj
    co gobj 則將在本地產生(- d) gobj的目錄,實際倉庫中的位置是libs/gobj

    可以根據co-list.tmp的內容編輯一個腳本,

    $cvs import -m "cvs checkin init" modulesname init start

    OK!

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


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