天天看點

版本控制CVS

概念:

 1. CVS 是一種版本跟蹤系統,它可以在軟體開發過程中保持檔案的各種記錄以及取

出檔案的任何已存儲的版本。同時它也可以生成兩個版本的差别檔案。

 2. CVS 可以讓多名開發人員同時編譯一個檔案而不遺失任何資料。同時它将記錄

誰在何事因何而改變了什麼。通常情況下 CVS 可以自動解決沖突問題,但有時也需

要使用者的幹預。

 3. CVS 可以按不同的用途應用在不同的環境之中,例如管理配置檔案、郵件别名

(mailalias)、FAQ 檔案、音樂作品、論文、書籍等等。甚至可以将整個/etc

目錄放入其中,檢測系統配置的更改

  版本控制(version control)就是在項目中記錄和讀取變更的過程。版本控制系

統可以讓你取回原有舊的版本也可以比較任意兩個版本檔案的差異。

***基 于 pserver 方式的 CVS 服務***

一/建立 cvs 使用者組,便于管理 cvs 使用者

  #groupadd cvs 

二/建立 cvs 組的 cvsroot 使用者和所屬的目錄

  #useradd  g cvs  G cvs  d /home/cvsroot cvsroot 

三/為 cvsroot 使用者添加密碼

  #passwd cvsroot 

四/改變/home/cvsroot 的目錄屬性

  #chmod 775 /home/cvsroot 

五/初始化 cvs 源代碼庫,此操作生成目錄/home/cvsroot/CVSROOT,其下為一些初始化檔案

  #cvs  -d /home/cvsroot init

  #chown cvsroot.cvs /home/cvsroot/CVSROOT 

六/建立使用者

  #htpasswd -c /home/cvsroot/CVSROOT/passwd qq

七/把剛建立的使用者映射為系統使用者

  #vi /home/cvsroot/CVSROOT/passwd

  qq:qqpasswd:cvsroot     <#添加  :cvsroot  >

八/預設允許系統使用者登入 CVS, 關閉系統使用者的登入

  #vi /home/cvsroot/CVSROOT/config

  将第二行的

  #SystemAuth = no 去掉注釋,即改為SystemAuth = no 

九/使用 xinetd 監聽 cvspserver 服務方式,在 xinetd.d 目錄下添加需要啟動的服務 cvspserver

  #vi /etc/xinetd.d/cvspserver   添加如下:

   service cvspserver

   {

        disable = no

        socket_type = stream

        wait = no

        user = root

        server = /usr/bin/cvs

        server_args = -f --allow-root=/home/cvsroot pserver

        #log_on_suceess += HOST

        #log_on_failure += HOST

   }

十/重新啟動 xinetd: 

  #service xinetd restart

十一/測試登入 cvspserver 伺服器

  #cvs  -d :pserver:qq@$IP:/home/cvsroot login

  ---$ip 換為 cvspserver 伺服器的真實 ip 位址,比如 127.0.0.1 或是192.168.0.x 

十二/登入成功後導入首個項目,文法如下<現切換到項目源碼的路徑下>

  #cvs -d :pserver:qq@$IP:/home/cvsroot import -m "随便寫什麼,說明一下" <項目名稱> <開發商标記> <版本号>

如:#cvs -d :pserver:qq@$IP:/home/cvsroot import -m "new project" httpd qq http1

     執行後:會将所有源檔案及目錄導入到/home/cvsroot/httpd 目錄下

十三/這樣每次執行cvs指令時都要指定“-d :pserver:qq@$IP:/home/cvsroot”,麻煩。可以這樣:

  #export CVSROOT=":pserver:qq@$IP:/home/cvsroot"

  把這個添加進/root/.bashrc和/root/.bash_profile使重新開機生效

十四/現在建立一個工作目錄/tmp/work

  #mkdir /tmp/work

十五/再從剛建立在cvs中央庫/home/cvsroot中把httpd檢索下來

  #cd /tmp/work

  #cvs -d /home/cvsroot/ checkout httpd

十六/現在測試:

  #cd /tmp/work         切換到工作目錄

  #touch file001        建立檔案file001

  #cvs add file001      cvs添加

  #cvs commit file001   傳達到cvs中央庫  <需要切換到cvsroot普通使用者,也可以補全指令#cvs -d :pserver:qq@$IP:/home/cvsroot>

  現在在/home/cvsroot/httpd中應該多了一個file001,v

  注意:

  1.對于圖檔,Word 文檔等非純文字的項目,需要使用 cvs add -kb 選項按 2 進制檔案方式導入(k 表示擴充選項,b 表示binary),否則有可能出現檔案被破壞的情況

  比如:

  #cvs add  -kb new_file.gif 

  #cvs add  -kb readme.doc 

  2.很多 cvs 指令都有縮寫形式:commit=>ci; update=>up; checkout=>co; remove=>rm;

  3.即使工作目錄删除了檔案,中央庫也不會

檢視目前檔案不同版本的差別

#cvs diff  r1.3  r1.5 file_name 

檢視目前檔案(可能已經修改了)和庫中相應檔案的差別

#cvs diff file_name 

  正确的通過 CVS 恢複舊版本的方法:

  如果用

  #cvs update  r1.2 file.name 

  這個指令是給 file.name 加一個 STICK TAG: "1.2" ,雖然你的本意隻是想将

它恢複到 1.2 版本

  正确的恢複版本的方法是:

  #cvs update  -p  r1.2 file_name >file_name 

  如果不小心已經加成 STICK TAG 的話:用如下方法解決

  #cvs update  A 

  移動檔案/檔案重命名

  cvs 裡沒有 cvs move 或 cvs rename,因為這兩個操作是可以由先

  #cvs remove old_file_name

  然後

  #cvs add new_file_name 

  删除/移動目錄

  最友善的方法是讓管理者直接移動,删除 CVSROOT 裡相應目錄(因為 CVS 一個項目

下的子目錄都是獨立的,移動到$CVSROOT 目錄下都可以作為新的獨立項目:好比一顆樹,

其實砍下任意一枝都能獨立存活),對目錄進行了修改後,要求其開發人員重新導出項目。

  #cvs checkout project_name 

或者

#cvs update  dP

繼續閱讀