概念:
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