tangbao

          導航

          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          url

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          cvs完全手冊

          來自:Linux知識寶庫
          現(xiàn)載:
          http://www.douzhe.com/linuxtips/1493.html
          地址:無名

          最近項目使用cvs管理,研究了一段時間,參考了幾個文檔,總結(jié)如下


          CVS完全手冊
          ==========================================================================
          He Wehzhu, kerlion@netease.com, created at 2003-11-5
          updated at 2003-11-12
          版權(quán)聲明:可以任意轉(zhuǎn)載,轉(zhuǎn)載時請務必標明原始出處和作者信息
          ==========================================================================

          內(nèi)容
          概述
          CVS環(huán)境設置
          登錄CVS服務器: 
          cvs命令格式
          CVS的日常使用
          其他常用命令
          CVS宏/keyword
          CVS分支管理
          CVS服務器的安裝和配置
          Watchers
          WinCVS的安裝和配置
          CVSWEB的安裝


          概述
          ==================================

          CVS是一個并行版本控制系統(tǒng),它采用C/S模式,它的復雜度和功能性屬于中等,是當今最流行的版本控制系統(tǒng)。它有兩個基本的特點:
          *保存修改記錄:保存了所有文件的修改歷史,并可以建立分支
          *協(xié)作與并行:cvs不推薦使用lock-modify-unlock的串行的工作模式,而采用多人可以并行地修改同一個文件,而在提交時merge conflict;它更適合于大型的工作團體。
          使用CVS的好處:
          *文件集中管理,大家都可以方便的看到所有人員的最新文件,規(guī)范化了文件的管理
          *可以查看以前任何的一個版本或修改歷史
          *可以同時維護多個版本和分支


          CVS環(huán)境設置
          ==================================

          先不要管CVS服務器的配置,我們先假設已經(jīng)有一臺配置好的服務器,要訪問CVS,必需先設置環(huán)境變量CVSROOT
          CVSROOT=:pserver:user@server#port:/path/to/cvsroot

          *pserver是訪問方式,口令認證的意思,這是最常用的方式,其他還有g(shù)server,kserver,ext
          *user是CVS服務器的用戶名,
          *server是CVS服務器的名稱或者IP地址
          */path/to/cvsroot是你的CVS服務器的CVSROOT目錄,根據(jù)你的CVS服務器設置做修改或者詢問管理員
          你可以把設置放到你的shell的profile里(.bash_profile,.profile等)這樣就不用每次敲一長串命令了

          高級功能:現(xiàn)在比較流行是使用ssh來加密口令和數(shù)據(jù)流
          CVSROOT=:ext:user@server#port:/path/to/cvsroot
          CVS_RSH=ssh
          hints:
          實際上沒有CVSROOT也可以,你可以每次用cvs -d :pserver:user@server#port:/path/to/cvsroot來訪問,而且它將忽略CVSROOT環(huán)境變量,也許你會笑我只有瘋子才這么用,不過,cvs可以把每次使用的命令參數(shù)放到一個文件中,所以在~/.cvsrc中加入
          cvs -d :pserver:user@server#port:/path/to/cvsroot
          即可,它最大的好處是修改了立刻生效,而且它的優(yōu)先級高于CVSROOT環(huán)境變量,到時候不要傻乎乎地來問我,我的環(huán)境變量真么不起作用了。


          登錄CVS服務器: 
          ==================================
          $cvs login,這時候cvs會問你口令,請把你在CVS服務器上的口令敲進去
          如果沒有任何錯誤信息,恭喜你,成功了!
          成功登錄后將建立一個~/.cvspass文件,保存你的口令,以后就不用輸入口令了.

          cvs命令格式
          ==================================
          cvs [global_opts] command [command_opts] [command_args]
          Global options 屬于左邊cvs的,是全局的
          command_opts 屬于左邊command的,是局部的
          cvs --help-commands查看命令列表
          cvs -H command/cvs -help command 查看該命令的選項
          hints:如果你每次使用一些命令都帶同樣的參數(shù)的話,可以把它們放到~/.cvsrc文件中去
          update -c
          diff -c
          add -kb
          cvs -Q


          cvs global-option comand comand-option arguments

          CVS的日常使用
          ==================================
          CVS使用流程
          a checkout 盡當本地沒有working copy時使用
          b staus 檢查服務器上是否有新版本
          c update 如果有,則用update同步文件
          d 做你自己的修改,并保證正確
          e update 看是否有人修改了你的文件
          f 如果有沖突,合并沖突
          g commit 提交你的修改,如果因為又有人提交修改而失敗,回到e步
          h 回到b步

          1 cvs checkout module_name
          -------------------------------------
          module_name可以暫時理解為目錄名,它會在本地但前目錄下建立module_name目錄,在把服務器上說有module_name目錄下的文件copy到本地module_name目錄下。
          注意:第一次checkout后,就不是通過cvs checkout來同步文件了,而是要進入該目錄下進行具體文件的版本同步(添加,修改,刪除)操作。

          2 cvs update filename
          -------------------------------------
          將文件同步到最新的版本:不指定文件名,cvs將同步所有子目錄下的文件。
          最好每天開始工作前或?qū)⒆约旱墓ぷ鲗氲紺VS庫里前都要做一次,并養(yǎng)成"先同步 后修改"的習慣,和Virvual SourceSafe不同,CVS里沒有文件鎖定的概念,所有的沖突是在commit之前解決,如果你修改過程中,有其他人修改并commit到了CVS 庫中,CVS會通知你文件沖突
          <<<<<<< filename
          你文件上的內(nèi)容
          =======
          服務器上文件的內(nèi)容
          >>>>>>> latest revision number in the repository

          由你確認沖突內(nèi)容的取舍。也可以多人協(xié)商解決,修改完成后去掉文件中的沖突標志

          conflict:多人修改同一文件的同一區(qū)域這就叫沖突,它必須由人來解決,CVS不處理沖突,它只是告訴你存才沖突


          3 cvs commit -m "write some comments here" file_name
          ------------------------------------
          確認修改寫入到CVS庫里。
          注意:CVS的很多動作都是通過cvs commit進行最后確認并修改的,最好每次只修改一個文件。在確認的前,還需要用戶填寫修改注釋,以幫助其他開發(fā)人員了解修改的原因。如果不用寫-m "comments"而直接確認`cvs commit file_name` 的話,cvs會自動調(diào)用系統(tǒng)缺省的文字編輯器(一般是vi)要求你寫入注釋。
          注釋的質(zhì)量很重要:所以不僅必須要寫,而且必須寫一些比較有意義的內(nèi)容:以方便其他開發(fā)人員能夠很好的理解
          不好的注釋,很難讓其他的開發(fā)人員快速的理解:比如: -m "bug fixed" 甚至 -m ""
          好的注釋,甚至可以用中文: -m "在用戶注冊過程中加入了Email地址校驗"

          修改某個版本注釋:每次只確認一個文件到CVS庫里是一個很好的習慣,但難免有時候忘了指定文件名,把多個文件以同樣注釋commit到CVS庫里了,以下命令可以允許你修改某個文件某個版本的注釋:
          cvs admin -m 1.3:"write some comments here" file_name

          4 查看狀態(tài)
          ------------------------------------
          cvs status filename
          狀態(tài)報告,類似這樣: 
          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欄,這里總共可能有四種狀態(tài): 
          Up-to-date: 表明你要到的文件是最新的. 
          Locally Modified: 表明你曾經(jīng)修改過該文件,但還沒有提交,你的版本比倉庫里的新. 
          Needing Patch: 表明有個哥們已經(jīng)修改過該文件并且已經(jīng)提交了!你的版本比倉庫里的舊. 
          Needs Merge: 表明你曾經(jīng)修改該文件,但是偏偏有個不識相的也修改了這個文件,而且還提交了!

          5 查看修改歷史和注釋信息
          ------------------------------------
          cvs log file_name


          其他常用命令
          ==================================
          1 添加文件和目錄
          ------------------------------------
          cvs add new_file_name
          cvs add -kb new_file_name
          cvs add dir_name

          CVS一般只處理文本文件,它會擴展keyword(宏)并轉(zhuǎn)換行結(jié)束符
          對于圖片,Word文檔等非純文本的項目,需要使用cvs add -kb選項,否則有可能出現(xiàn)文件被破壞的情況
          然后確認修改并注釋
          cvs ci -m "write some comments here" new_file_name

          2 刪除文件
          ------------------------------------
          將某個源文件物理刪除后
          cvs remove file_name
          然后確認修改并注釋
          cvs ci -m "write some comments here" file_name

          注意:很多cvs命令都有縮寫形式:commit=>ci; update=>up; checkout=>co; remove=>rm;

          3.修改文件名
          ------------------------------------
          移動文件:文件重命名
          cvs里沒有cvs move或cvs rename,因為這兩個操作是先cvs remove old_file_name,然后cvs add new_file_name實現(xiàn)的。

          4 目錄結(jié)構(gòu)同步
          ------------------------------------
          如果在你checkout后,有人添加了新的文件或目錄,你需要把他們?nèi)〕鰜?BR>cvs update -d

          5 放棄本地的修改(undo)
          ------------------------------------
          如果修改來了本地文件,不想提交,想重新取新文件
          cvs update -C filename
          它會先把你的本地文件改名

          建議:建議大家把checkout的文件缺省為readonly,把"cvs -r"添加到~/.cvsrc文件中
          這樣,你每次修改一個文件前,先cvs edit filename,提交后文件又變成readonly,
          如果你想放棄本地的修改,則cvs unedit filename,它會undo,而且文件又變成readonly


          6 恢復到舊版本
          ------------------------------------
          cvs update -j1.20 -j1.15 filenames
          1.20時當前版本號,注意順序不要反了,記住要commit,為了保證是但前版本號,最好先lock
          注意:cvs update -r1.15 file.name,這里的-r不是版本號的意思,是給文件加了一個叫1.15的sticky tag
          如果不小心已經(jīng)加成STICK TAG的話:用cvs update -A 解決

          7 文件比較
          ------------------------------------
          cvs diff -c filename
          cvs diff -c -r1.8 -r 1.5 filename

          8 鎖定與解鎖文件
          ------------------------------------
          為保證串行的修改文件,或修改二
          cvs admin -l files
          cvs admin -u files


          ==========================================================================
          如果你只是一般性的使用cvs,到此為止就足夠了。一個系統(tǒng)20%的功能往往能夠滿足80%的需求,CVS也不例外,以下是CVS最常用的功能,可能用到的還不到它全部命令選項的10%,更多的功能請在實際應用過程中體會,學習過程中應該是用多少,學多少,用到了再學也不遲。
          ==========================================================================

          CVS宏/keyword
          ==================================
          CVS缺省會對文件進行keyword(宏)替換,在文件中加入這些關(guān)鍵字是個良好的工作習慣
          $Id$ 關(guān)鍵字是用文件名、版本、時間、作者 及代碼性質(zhì)替換,如果使用-l選項取出,在Exp后
          面會加上登錄用戶的名稱。除了$Id$關(guān)鍵字,RCS還支持下面常用的關(guān)鍵字:
          $Log$ : 你所提供的修改日志信息。
          $Author$ :存入該版本的作者。
          $Locker$ : 該版本的加鎖者
          $State$ : 該版本的狀態(tài) Exp(試驗版), Stabe(穩(wěn)定版), Rel(發(fā)行版).缺省是Exp
          $Date$ : 該版本存入的時間,使用UTC時間格式。
          $Revision$ : 該版本的版本號
          $RCSfile$ : RCS文件名
          $Source$ : RCS全路徑名
          $Name$ : 取回該版本的符號名
          $Header$ : 相當于$ Source $$ Revision$$Date$$Author $$State$$Locker$的組合


          Sticky Tag
          ==================================
          tag的作用是對多個連續(xù)變化的文件做一個快照來表示某一時刻的所有不停內(nèi)部版本的文件,一般是項目到一定階段,可以給所有文件統(tǒng)一指定一個階段里程碑版本號,需要的時候可以一次導出這些版本不一的文件.標記的另外一個非常重要的作用是生成分支和合并分支.
          1 cvs tag release_name module_name
          ------------------------------------
          release_name要簡潔而含義豐富,由字母開頭,加字母,數(shù)字,下劃線和連字號組成,特別是不能含“.”
          2 cvs checkout -r release_name module_name
          ------------------------------------
          取出tag_name標志的文件
          3 cvs update -A
          ------------------------------------
          tag標識的文件是歷史文件,不能修改,這樣可在本地去除這個限制,讓它和當前版本合并




          CVS分支管理
          =============================
          CVS可以將歷史劃分成多個獨立,并行和互不影響的分支,并去修改歷史
          1 標定里程碑
          ------------------------------------
          cvs tag release_1_0 prj_dir_name

          2 開始一個新的里程碑:
          ------------------------------------
          cvs commit -r 2
          標記所有文件開始進入2.x的開發(fā)
          注意:CVS里的revsion和軟件包的發(fā)布版本可以沒有直接的關(guān)系。但所有文件使用和發(fā)布版本一致的版本號比較有助于維護。

          3 建立分支
          ------------------------------------
          在開發(fā)項目的2.x版本的時候發(fā)現(xiàn)1.x有問題,但2.x又不敢用,則從先前標記的里程碑:release_1_0導出一個分支release_1_0_b2
          cvs rtag -b -r release_1_0 release_1_0_bugfixes prj_dir_name
          -r修飾的是release_1_0,-b 修飾的是release_1_0_bugfixes,cvs的版本號將變?yōu)?位,以后每分一次支,版本號增加2位

          4 分支并行開發(fā)
          ------------------------------------
          一些人先在另外一個目錄下導出release_1_0_bugfixes這個分支:解決1.0中的緊急問題,
          cvs checkout -r release_1_0_bugfixes
          分支是可以修改的,并自動提交到分支上去
          而其他人員仍舊在項目的主干分支2.x上開發(fā)

          5 tag分支
          ------------------------------------
          在release_1_0_bugfixes上修正錯誤后,標記一個1.0的錯誤修正版本號
          cvs tag release_1_0_bugfixes_p1

          6 合并分支
          ------------------------------------
          如果2.0認為這些錯誤修改在2.0里也需要,也可以在2.0的開發(fā)目錄下合并release_1_0_patch_1中的修改到當前代碼中:
          cvs update -j release_1_0_bugfixes

          7 再次合并分支
          ------------------------------------
          如果又發(fā)現(xiàn)1.x新的bug,我在分支已經(jīng)修改了,并標定了release_1_0_patch_2,我們同樣希望把它合并到主干上來
          cvs update -j release_1_0_bugfixes_p1 -j release_1_0_bugfixes
          它的意思是把release_1_0_bugfixes_p1(tag)到release_1_0_bugfixes(分支)變化了的部分合并到當前文件(主干)
          否則用6步的方法,則以前合并的內(nèi)容會重新合并
          注意:此時我們使用第5步的結(jié)果
          教訓:盡早頻繁的tag,但同時不能導致tag泛濫,tag在不同的分支里可以同名

          8 鎖定分支
          ------------------------------------
          cvs admin -l r_0_2 鎖定r_0_2分支
          cvs admin -l 鎖定主分支

          9 設置缺省分支
          ------------------------------------
          cvs admin -b r_0_2 設定r_0_2為缺省分支
          cvs admin -b 設定主分支

          10 刪除歷史記錄
          如果歷史文件過多,或確定有幾個階段的穩(wěn)定版本,我們可以刪除一些歷史文件,以保證cvs的性能
          cvs admin -o rev1:rev2 filename 刪除rev1到rev2的版本,含這兩個版本
          cvs admin -o rev1::rev2 filename 刪除rev1到rev2的版本,不含這兩個版本
          如果省略rev1,表示刪除本分支rev2之前的所有版本
          如果省略rev2,表示刪除本分支rev1之后的所有版本
          cvs admin -o rev filename 刪除rev這個版本的文件
          注意:有tag的版本不能被刪除,所以tag很重要,而且只能刪單個文件


          CVS服務器的安裝和配置
          =============================
          1 下載源碼
          ------------------------------------
          可從很多地方下載cvs,也可從官方ftp://ftp.gnu.org/gnu/cvs/下載

          2 安裝,同很多源碼安裝一樣
          ------------------------------------
          gunzip cvs-1.10.6.tar.gz
          tar xvf cvs-1.10.6.tar
          cd cvs-1.10.6
          ./configure
          make
          make install

          3 包的安裝,如果找到具體操作系統(tǒng)的安裝包,則見此操作系統(tǒng)的使用說明,比如linux為
          ------------------------------------
          rpm -ivh cvs-1.10.8-3.i386.rpm即可

          4 建立Repository
          ------------------------------------
          groupadd cvs(要訪問cvs的用戶加入此組)
          useradd cvsroot
          mkdir /home/cvsroot
          cvs -d /home/cvsroot init
          chown -R cvsroot.cvs /home/cvsroot
          chmod -R ug+rwx /homecvsroot

          5 配置/etc/services文件
          ------------------------------------
          添加cvspserver,如果有就不要加了
          cvspserver 2401/tcp # cvs client/server operations
          cvspserver 2401/udp # cvs client/server operations

          6 配置inetd
          ------------------------------------
          編輯/etc/inetd.conf,加入
          cvspserver stream tcp nowait root /usr/bin/cvs cvs --allow-root=/home/cvsroot pserver
          如果使用tcpwrappers
          cvspserver stream tcp nowait root /usr/sbin/tcpd /usr/bin/cvs --allow-root=/usr/local/newrepos pserver
          如果使用xinetd,編輯/etc/xinetd.d/cvspserver
          service cvspserver
          {
          disable = no
          socket_type = stream
          wait = no
          user = root
          env = HOME=
          server = /usr/bin/cvs
          server_args = -f --allow-root=/home/cvsroot pserver
          }
          pserver表示是口令認證,如果要用ssh方式則應該是server
          --allow-root是Repository的目錄,可以有多個此選項來建立多個Repository

          7 驗證配置成功
          cvs login看時候能成功登錄,有幾個可能失敗的地方
          用戶是否屬于cvs組和目錄權(quán)限
          inetd是否正常配置和啟動,--allow-root是否寫對
          8 導入項目
          把你的所有項目文件放入prj_dir
          cd prj_dir
           cvs import -m "this is a cvstest project" prj_dir v_0_0_1 start
          v_0_0_1是這個分支的總標記.沒啥用(或曰不常用)
           start 是每次 import 標識文件的輸入層次的標記,沒啥用。


          Watchers
          =============================
          cvs提供了watch的功能,來幫助大家了解誰在干什么,誰在對文件做什么操作,它發(fā)email通知,以協(xié)調(diào)大家的工作。
          1 開啟watch功能
          在CVSROOT/notify文件中加入下面行
          ALL mail %s -s "CVS notification"
          2 設定外部email地址
          缺省是把通知信息發(fā)給本機的email,要發(fā)給別的地址,在CVSROOT/users加入如下內(nèi)容
          hwz:kerlion@netease.com
          3 watch文件的修改
          cvs watch add filename
          cvs watch remove filename
          4 watch文件的修改
          watch功能是個大家協(xié)調(diào)的功能,大家必須按一個統(tǒng)一的工作流程來做,如果不cvs edit,cvs沒有辦法通知修改情況
          cvs edit filename
          修改文件
          cvs unedit filename
          5 提醒大家使用watch功能
          cvs沒有強制使用watch的功能,只有這個功能在用戶提交完后自動把文件變?yōu)橹蛔x的,再使用cvs edit filename就可以修改它了
          cvs watch on
          6 查看那人人再watch
          cvs watchers


          WinCVS的安裝和配置
          =============================
          1、WinCVS簡介:
          WinCVS是CVS的一個客戶端軟件,它運行在Windows上,用來在Windows上登錄CVS服務器,然后進行一些CVS相關(guān)的操作與管理。由于當前很多的企業(yè)內(nèi)部都采用Linux/Unix做服務器,而用Windows做客戶端,所以,WinCVS與CVS服務器配合使用將組成最強有力的版本控制與管理的系統(tǒng)之一。
          2、WinCVS的下載與安裝;
          最新的WinCVS可以從http://sourceforge.net/project/showfiles.php?group_id=10072地址下載到,也可以在http://sourceforge.net/project 上下載到最新的或其它版本的WinCVS。
          下載到相應的版本后根據(jù)向?qū)нM行安裝,已經(jīng)要使用CVS的用戶,安裝這個WinCVS應該沒什么問題吧!
          3、配置WinCVS:
          a、Admin->Preferences…/general
          CVSROOT 按cvsroot格式填寫
          Authentication:用來配置cvs服務器的認證方式一般只要選擇默認的pserver方式就可以
          要注意的是必須與cvs服務器配置時所指定的認證方式一致
          如果要用ssh server,確認在windows中安裝了openssl,openssh
          a、Admin->Preferences…/Globals
          此項的配置主要是要注意這幾選項:
          Checkout read-only:默認是選中的,建議不要修改,只是修改文件前需要先edit selection,提交后又自動變?yōu)橹蛔x
          這樣有兩個好處:
          一個是可以通過unedit selection來undo你做的修改
          二是可以符合watch功能的使用規(guī)范
          Prune empty directories: 不要選上,否則,會自動刪除空目錄;
          4、登錄服務器:
          選擇Admin->login,將出現(xiàn)如下對話框要求用戶輸入登錄口令
          wincvs中命令的exit code 0表示正確執(zhí)行,否則是失敗,一般成功顯示為
          *****CVS exited normally with code 0*****
          5、winCVS的使用都有菜單,大家熟悉cvs的使用的話,用起來是很容易的,我就不多說了


          CVSWEB的安裝
          =============================
          CVSWEB就是CVS的WEB界面,可以大大提高程序員定位修改的效率:
          使用的樣例可以看:http://www.freebsd.org/cgi/cvsweb.cgi

          CVSWEB的下載:CVSWEB從最初的版本已經(jīng)演化出很多功能界面更豐富的版本,這個是個人感覺覺得安裝設置比較方便的:
          http://www.spaghetti-code.de/software/linux/cvsweb/

          1 下載解包:
          tar zxf cvsweb.tgz

          2 把配置文件cvsweb.conf復制到apache的配置目錄下
          cp cvsweb.conf /path/to/apache/conf
          轉(zhuǎn)到/path/to/apache/conf下并修改cvsweb.conf:
          修改CVSROOT路徑設置:
          %CVSROOT = (
          'Development' => '/path/to/cvsroot/dev', #<==修改指向本地的CVSROOT
          'test' => '/path/to/cvsroot/test', #<==修改指向本地的CVSROOT
          );
          如果有多個cvsroot,這定缺省的cvsroot
          $cvstreedefault = 'test';

          3 其它個性化設置
          cvsweb.conf還有許多其它個性化設置,常見的有這些變量:
          $logo 圖標設置
          $defaulttitle 標題設施
          $address 管理員email地址設置
          $long_intro 介紹文字
          $short_instruction 說明文字

          4 把文件cvsweb.cgi復制到apache的cgi目錄
          cp cvsweb.cgi /path/to/apache/cgi-bin
          轉(zhuǎn)到/path/to/apache/cgi-bin修改cvsweb.cgi
          修改cvsweb.cgi讓CGI找到配置文件:
          $config = $ENV{'CVSWEB_CONFIG'} || '/path/to/apache/conf/cvsweb.conf';

          5 中文支持
          讓cvsweb正確顯示中文,找到sub html_header($)函數(shù),
          然后在<html>和<title>之間插入一行,修改如下
          <html>
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
          <title>$title</title>
          6 復制所有的gif,png文件到apache的icons目錄
          7 增加訪問控制
          CVSWEB可不能隨便開放給所有用戶,因此需要使用WEB用戶認證:
          先生成 passwd:
          /path/to/apache/bin/htpasswd -c cvsweb.passwd user

          修改httpd.conf: 增加
          <Directory "/path/to/apache/cgi-bin/cvsweb/">
          AuthName "CVS Authorization"
          AuthType Basic
          AuthUserFile /path/to/cvsweb.passwd
          require valid-user
          </Directory>


          ==========================================================================
          CVS支持的的特殊變量:

                $Id$

                $Header$

                $Author$

                $Date$

                $Revision$
          提交之后,cvs會自動改變這些變量的取值.
          ==========================================================================


          ==========================================================================
          參考文檔:
          CVS的常用命令速查手冊,車東,chedong@bigfoot.com
          CVS服務器與WinCVS的配置與使用,吳炎溪,Yanxi-Wu@21cn.com
          CVS速成班,作者不祥
          cvs book,Karl Fogel,kfogel@red-bean.com
          ==========================================================================


          全文結(jié)束


          posted on 2006-02-23 16:57 糖包 閱讀(224) 評論(0)  編輯  收藏 所屬分類: java

          主站蜘蛛池模板: 徐州市| 独山县| 昭苏县| 江城| 南溪县| 通海县| 和平区| 临西县| 浦东新区| 大名县| 嘉祥县| 弥渡县| 开封县| 汾西县| 青河县| 平果县| 盘山县| 措勤县| 京山县| 海门市| 白水县| 射阳县| 开远市| 绥化市| 大荔县| 东丽区| 赞皇县| 象山县| 莲花县| 全南县| 霞浦县| 枝江市| 正安县| 新田县| 贺州市| 襄樊市| 邢台市| 丽江市| 梁山县| 中宁县| 获嘉县|