CVS 使用點滴記錄

1. 2004-2-19: 在當前工作目錄裏面一次性遞歸添加一個目錄,包括其子目錄及文件
    使用 cvs import 命令,一次性的將要添加的子目錄當作一個子模塊導入到CVS倉庫中,再用 cvs up 命令,將該子模塊從CVS倉庫中同步出來。
    具體方法如下:
    $ cd newdir/
    $ cvs import -m"add a new sub module" module_test/newdir hellocvs initnew
    $ cd ..
    $ cvs up -d

2. 2004-2-19: 對於Virsual SourceSafe和CVS都通用的TAG有
    $Header: /home/cvsroot/tech/cvs_card.html,v 1.5 2003/03/09 08:41:46 chedong Exp $
    $Author: chedong $
    $Date: 2003/06/28 18:36:26 $
    $Revision: 1.8 $

3. 2004-2-19: checkoutlist文件的使用
    這個文件包含一個列表,其中所涉及文件的檢出拷貝將保存到倉庫中。如果因爲某種原因文件不能從倉庫中檢出,每一行給出的文件名和錯誤信息可以由CVS輸出
        filename errormessage
    因爲CVS知道已保存了存在的管理文件的檢出拷貝,他們就不必在checkoutlist裏面列出了。
    舉例說明:
        工作拷貝目錄:
        $ vi checkoutlist
            add "admin" to the list
        $ cvs ci checkoutlist
            commit the list
        $ vi admin
            add srni to the list
        $ cvs add admin
        $ cvs ci admin
            commit admin file

        然後在倉庫目錄裏面就會有:
        .#admin
        admin
        admin,v
        這幾個文件,其中admin,v是CVS保存的記錄了歷次修改版本信息文件,而admin就是因爲其在checkoutlist中,所以自己從倉庫檢出的文件。
        管理員從客戶端編輯admin文件並且提交的時候,服務器端就可以自動檢出並且生效了。

4. 2004-2-19: 如下命令是CVSNT裏面有,但是CVS(linux)裏面沒有的
    chacl        Change the Access Control List for a directory
    chown        Change the owner of a directory
    info         Display information about supported protocols
    ls           List files in the repository
 (cvs 1.12.9已經有該命令)
    lsacl        List the directories Access Control List
    passwd       Set the user's password (Admin: Administer users)
    authserver   Authentication server mode

    但是CVS(linux)裏面多一個命令,這個命令在CVS作爲服務器啓動的時候有用:
   
pserver      Password server mode

5. 2004-2-19: 查看CVS的幫助信息
    --help-options  查看CVS的選項
    --help-commands 顯示CVS命令列表
    --help-synonyms 顯示CVS命令的別名列表
    -H command      查看某個命令的具體用法

6. 2004-2-23: 用shell腳本改變當前大的環境變量
    用 "$ . changeCVSROOT.sh" 這種方式運行shell腳本,才能夠使該腳本在當前的shell環境中執行。
    Linux is designed that way. Any variable, defined in a
    subshell (child process), is local to the subshell, and
    subshells of itself (grandchild processes).

    Use '.' (dot) operator to execute the script is different
    story. commands in the script are executed in the
    current process one after another.

    我的簡易腳本:
    #!/bin/sh
    # name:     changeCVSROOT.sh
    # usage:    $ . changeCVSROOT.sh --php
    parse_arguments() {
        for arg do
            case "$arg" in
                --php)          CVSROOT=:pserver:[email protected]:/repository ;;
                --wiscom)       CVSROOT=:pserver:[email protected]:/ACSTAR ;;
                --srni)         CVSROOT=:pserver:[email protected]:/ACSTAR4 ;;
            esac
        done
    }

    if [ ! $1 ]; then
        echo "No Params"
    else
        parse_arguments $@
    fi

7. 2004-2-25 關於版本號的定義
    1). 版本號的格式爲:a.b.c.d。
    其中 a - 主版本號(Major version), b - 副版本號(Minor version), c - 發佈號(修正版本號)(Release), d - 編譯號(擴展版本號)(build/extra)。
    主版本號和副版本號在項目計劃中便已經指定,標誌着重要的功能變動。Release版本號 c,用於體現小的功能變更或用來管理項目的分支。
    build號則在每次編譯時自動加1。
   
    2). 我們遵循一個大衆的版本定義規格,即: 主版本號.從版本號.修正版本號。
    其中,主、從版本號是由數字組成的,每次大的升級會更動主版本號,一般的升級只要更新從版本號,至於更小的修正(補丁、Beta測試等等)我們只更新修正版本號。
    一般修正版本號就是我們內部的編譯版本號,每次編譯程序就會更新。

8. 2004-3-1 關於開發控制規則
    1). 軟件開發期,我們應該保持項目的CVS主幹總是在一個穩定的狀態,也就是說從主幹上得到的最新對象集總是最新的發佈版本,也可以說主幹就是項目的發佈分支,還可以說開發活動總是離開主幹而進行的。
    2). 基於CVS系統的開發活動,我們分一下三種情況:單人單線開發、多人單線開發、多人並行開發,無論這三種情況怎樣,我們都應該創建開發分支,將開發活動限定在開發分支上。
    3). 我考慮的CVS開發控制規範:
        1. 主幹上的標籤用 "REL_" 開頭,開發分支的標籤用 "DEV_" 開頭,標籤中的分隔符號用下劃線 "_"。
        2. 在分支上進行開發活動,包括測試,待穩定的時候,合併到主幹。主幹在適當的時候,打上 "REL_" 的標籤,表明開發進入一個新階段了。
        3. 開發人員,不管是單人還是多人,檢出的工作拷貝都是從分支來的。
        4. 產品發佈,從主幹按照標籤檢出不同時期的不同版本。
        5. 我將分支分爲開發分支和功能分支。開發分支就是沿着主幹線進行的開發。功能分支是爲了特別的需要而進行的分支,如爲了某個客戶定製開發。
        6. 按我的設計,理想圖入下,* 標識從分支向主幹的合併:
                                   +---------+    +---------+    +---------+    +---------+
             DEV_Branch ->  +------| 1.2.2.1 |----| 1.2.2.2 |----| 1.2.2.3 |----| 1.2.2.4 |----.......      開發分支
                            |      +---------+    +---------+    +---------+    +---------+
                            |                          *                             *
        +---------+    +---------+                +---------+                   +---------+
        |   1.1   |----|   1.2   |----------------|   1.3   +-------------------|   1.4   |------......     主幹
        +---------+    +---------+                +---------+                   +---------+
                                                       |
                                                       |    +---------+
                                    Patch_Branch ->    +----| 1.3.2.1 |----.....                            功能分支
                                                            +---------+

        當然實際應用不應該拘泥於此,應當根據實際項目的情況而做。最關鍵的還是保持主幹的清晰,同時保證開發的軌跡完整,開發記錄能夠被完整的保留下來並且隨時可以方便的查詢和回溯。
             
9. 2004-3-2 版本號
    版本號是比較抽象的配置項。
    1). 方式一:以版本發佈日期作爲版本號
    這種版本號的標識方法比較簡單,雖然無法看出系統一共發佈的版本數量,以及各版本之間的不同性質,但可以直觀的看出版本的發佈日期。也比較容易記憶。
    如果項目組成員需要對版本的情況進行統計或者溝通,不需要依靠任何記錄就可以定位出某個版本發佈的日期。
    適用於:小型項目、版本頻繁發佈的項目。
    舉例:2003-9-7發佈了兩個版本,分別是20030907A,20030907B
    應用的項目:ctais2.0。

    2). 方式二:採用“主版本號. 從版本號. 維護版本號. 補丁版本號”的形式
    這是大部分系統版本號的基礎標識形式,每個版本號是阿拉伯數字,主版本號以1爲起始數字,其他版本號以0爲起始數字。可以進行裁減,類似“主版本號. 從版本號”的形式也是可以的。以這種方式來標識版本之後,當前版本的狀態,以及版本發佈的軌跡,都可以看得比較清楚。
    至於何謂主版本和從版本,每個項目組可以有自己的約定。比如功能的大幅度修改、正式發佈給客戶、上線等里程碑事件,都是應該反應在版本號的變化上的。
    適用於:比較正式的軟件項目
    舉例:第一個版本爲 1.0.0.0,上線使用的版本爲5. 11.18

    3). 可選方式三:給版本加上前綴以區分
    方式三、四並不是一種新的軟件版本標識方法,它們通常增加在方式二的基礎之上,以更好的標識版本。
    我們通常在軟件前面看到alpha、beta、demo、release等前綴,這些標識有它們公認的含義,主要以區別版本的性質和用途。以下是參考資料。
    Alpha版(內部測試版):一般只在軟件開發公司內部運行,不對外公開。主要是開發者自己對產品進行測試,檢查產品是否存在缺陷、錯誤,驗證產品功能與說明書、用戶手冊是否一致。
    Beta版(外部測試版):軟件開發公司爲對外宣傳,將非正式產品免費發送給具有典型性的用戶,讓用戶測試該軟件的不足之處及存在問題,以便在正式發行前進一步改進和完善 。一般可通過Internet免費下載,也可以向軟件公司索取。
    Demo版(演示版):主要是演示正式軟件的部分功能,用戶可以從中得知軟件的基本操作,爲正式產品的發售擴大影響。如果是遊戲的話,則只有一兩個關卡可以玩。該版本也可以從Internet上免費下載。
    Release版(發行版):不是正式版,帶有時間限制,也是爲擴大影響所做的宣傳策略之一。比如Windows Me的發行版就限制了只能使用幾個月,可從Internet上免費下載或由公司免費奉送。
    Full Version版(完全版):也就是正式版,是最終正式發售的版本。
    舉例:beta2.0,release1.02
    適用於:較正式的軟件、商用軟件、遊戲軟件等

    4). 可選方式四:使用外部版本、內部版本兩套機制
    當我們點擊word幫助菜單的“關於”時,在擡頭部分看到的是“word2002 (10.2627.2675)”。這裏的2002、10.2627.2675分別是外部、內部版本號。因爲讓客戶記住繁瑣的內部版本號是困難的,另一方面,出於宣傳等商業原因,很多商業軟件不但有外部版本號,還把功能有大幅度改善的版本以不同的名稱命名。比如windows98- windows Me- windows2000- windowsXP; RealPlayer8.0- RealOne Player V2.0等。
    適用於:商業軟件

10. 2004-3-2 輔助標識
    CVS有以下兩種方式來標識配置項:
    1). revisions
    和VSS的version一樣,revision也是CVS自動分配的,通常操作人員不需要過於關心它變化的細節,只需要知道一個配置項的每個revision都是唯一,並且對應配置項的某個版本就可以了。之所以配置項的版本稱作revision,是爲了和軟件項目的版本release區別。
    配置項的初始revision是1.1,通常情況下,CVS是以1.1?1.2?1.3這樣的趨勢去變化配置項的revision的。
    增加一個新文件的時候,第二個數字將爲“1”, 第一個數字等於該目錄中所有文件版本號第一個值的最大值。例如,當前目錄包含版本號爲1.7, 3.1和4.12的文件,則一個新文件的版本號應爲4.1。
    2). tag
    和VSS的label有一些類似,tag也是用戶給CVS裏的某個或某些配置項創建的標識。但CVS對tag的名稱控制的比較嚴格,一個tag必須以字母開頭,後續多個字母,數字,減號和下劃線,不能包括點號和空格。比如“release1-3-2”,“approvdBy Sqa”等。
    Tag的作用和VSS的label一致,也是給配置項標明一些我們想保留的信息的。

11. 2004-3-2 CVS的內部分支號
    一般的,分支號碼將由奇數個"."分隔的十進制整數組成。請看4.1節[版本號碼]。
    然而那並非完全是這樣的,由於效率的原因,CVS有時插入一個額外的“0”在右末的第二個位置(1.2.4變爲1.2.0.4,8.9.10.11.12變爲8.9.10.11.0.12等)。 

12. 2004-3-15 粘滯性標籤(Sticky Tag)
    按字面翻譯是粘性標籤。
    在CVS中,如果檢出時指定版本樹上的一個版本,對它進行的修改是無法直接提交的,這種情況下就叫sticky tag。
    要提交必須先在檢出版本的地方創建分支,更新到分支,再修改提交到分支上。

13. 2004-3-15 SSH鏈接CVS服務
    $ CVS_RSH=ssh; export CVS_RSH
    $ cvs -d :ext:[email protected]:/bak3/cvs co CVSROOT
    不需要像pserver訪問那樣需要login/logout了。

14. 2004-3-23 WINDOWS下使用SSH連接服務器
    有兩種選擇兩種方式:
    兩種選擇:
        1. 使用putty的ssh
        2. 使用OpenSSH的windows版本(
http://lexa.mckenna.edu/sshwindows/)
    兩種方法:(詳細設置請參看兩個文檔:WinCVS_SSH_Guide.pdf cvssshwin.pdf)
        1. 使用命令行
            添加環境變量:CVS_RSH=C:/PROGRA~1/OpenSSH/bin/ssh.exe
            C:/cvs -d :ext:[email protected]:/bak3/cvs co CVSROOT
        2. 使用WinCVS
    ( 下一個目標:研究如何在win下使用cvsnt開啓ssh登陸方式:) )

15. 2004-3-23 CVS自帶的工具
    從源碼以默認方式安裝的話,會在/usr/local/share/cvs/contrib裏面找到有用的幾個小工具。

16. 2004-3-24 里程碑
    (
http://www.chedong.com/tech/cvs_card.html)
    確認版本里程碑:多個文件各自版本號不一樣,項目到一定階段,可以給所有文件統一指定一個階段里程碑版本號,方便以後按照這個階段里程碑版本號導出項目,同時也是項目的多個分支開發的基礎。
    cvs tag release_1_0

    開始一個新的里程碑:
    cvs commit -r 2 標記所有文件開始進入2.x的開發

    注意:CVS裏的revsion和軟件包的發佈版本可以沒有直接的關係。但所有文件使用和發佈版本一致的版本號比較有助於維護。

17. 2004-3-24 CVS 刪除的文件的恢復
    (
http://www.heynew.com/scmchina/topic.asp?topic_id=2218&forum_id=49&cat_id=9&CurPage=3)
    1.
    $ cvs  -r  x.x(刪除時的版本號)  filename > filename
    $ cvs  add filename
    $ cvs  ci  -m " revived filename "  filename
    (filename是要恢復的文件名)

    2.
    如果你只執行了remove命令的話,你就直接 cvs add 文件名,這樣就可以直接恢復還未提交的刪除文件。
    如果執行了commit命令的話,要先輸入cvs add 文件名,這時會得到一個空文件,然後選中這個空文件,執行update,得到這個文件的實體,在執行commit操作

18. 2004-3-24 sudo
    使用一個不可登陸的帳號cvs和組cvs作CVS倉庫的屬組。使用pserver服務模式。使用passwd文件管理帳號。
    # sudo -u cvs cvs -d /home/cvs init
    # sudo -u cvs touch /home/cvs/CVSROOT/passwd
    # sudo -u cvs touch /home/cvs/CVSROOT/readers

    Linux下的CVS pserver用戶管理工具:cvspwd
         ************************************************************************
         * File:       cvspwd.c                                                 *
         * Author:     Peter Ajamian                                            *
         * Date:       February 10, 2001                                        *
         * Version:    2.0.5                                                    *
         * Copyright 2001 Peter Ajamian                                         *
         *                                                                      *
         * You _must_ read and agree to the terms set forth in the included     *
         * file license.txt before using, modifying, distributing, or           *
         * redistributing this software or any portion of this software.        *
         *                                                                      *
         * This program, based on the badly written cvspwd program distributed  *
         * by GlassFish Networking Interactive is designed to allow for easy    *
         * password management for the CVS pserver.  It uses no code whatsoever *
         * from the original GlassFish program.  It is designed to act very     *
         * much like the standard Unix passwd program.  This program should be  *
         * installed as root for systemwide access.  If that is not an option   *
         * it can be installed as the user who owns the Repository it will be   *
         * used on.  root and repository owners can use cvspwd to change        *
         * anyone's password.  Users can only change passwords if they can      *
         * first supply the original password for the account.  Unlike passwd   *
         * checking is not done on the passwords to insure integrity.  This     *
         * Program must be compiled with -lcrypt.                               *
         *                                                                      *
         * This program works on $CVSROOT/CVSROOT/passwd directly.  If someone  *
         * wants to try to modify it so it goes through the whole mess of       *
         * checking out the file, modifying it, and checking it back in then be *
         * my guest.                                                            *
         *                                                                      *
         * Usage:     cvspwd [-l|-u|-d|-s ]                  *
         *                                                                      *
         * Options:                                                             *
         *      -h              Display this help screen.                       *
         *      --help                                                          *
         *                                                                      *
         *      +r              Set user to read only mode.  This option is     *
         *                      available to root and repository owners only.   *
         *                                                                      *
         *      -r              Remove user from read only mode.  This option   *
         *                      is available to root and repository owners      *
         *                      only.                                           *
         *                                                                      *
         *      -l              Lock user.  This option will effectively lock   *
         *                      out the user by appending an `!' to the         *
         *                      beginning of his password.  This option is      *
         *         


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章