1 RCS: 版本控制系統
RCS (Revision Control System) 是現存的最古老的 UNIX 應用程序之一。如果您把文件 /etc/rsyslog.conf 置於 RCS 的控制之下,那麼 RCS 會將它的各個版本保存在 /etc/rsyslog.conf,v 裏。
爲了減少混亂,RCS 在和原來文件相同的目錄下尋找一個叫做 RCS 的目錄。如果有這個目錄,RCS 就把 ,v 文件放在那個目錄裏,這樣一來,列出的目錄內容就會變得清楚多了,因爲許多文件都可以共享 RCS 目錄。這是一種很棒的功能,而且也是我們極力推薦的一種做法。您確實需要知道的 RCS 命令只有幾個: ci 用於檢入, co 用於檢出,而 rcs 執行各種維護工作。如果您使用的編輯器是 emacs, 那麼就完全不必使用命令行工具了,因爲 emacs 內置了對 RCS 的支持。
要讓一個文件開始處於 RCS 的跟蹤之下,可以像下面這樣在這個文件上運行 ci:
RCS/filename,v <-- filename enter description, terminated with single '.' or end of file: NOTE: This is NOT the log message! >> This is the orgmode file.-u 標誌讓 ci 立即以一種未上鎖(不可編輯)的狀態檢出 filename 文件。如果您省略了這個標記,那麼 ci 就會梌這個文件,然後刪除原來的副本,這或許並不是您想要的做法。
您每次想要改變一個受 RCS 控制的文件時,都必須檢出它,並用 co -l 命令對它上鎖:
如果您使用 emacs, 那麼就更方便了,只需打開受 RCS 控制的文件,然後 C-x v v
就可以實現文件檢出和上鎖。當你對所做的修改感到滿意時就可以使用
ci -u 命令將它簽入,這時 RCS 會要求你提供一條註釋,說明您剛纔做的是什麼。雖然人們傾向於路過這步,或者寫些諸如“做了一次修改”這樣的無用信息,但是應該堅持加註釋這個習慣。在兩年以後,當您要弄清楚爲什麼要做改動的時候,有幫助的註釋會救您一命。在
emacs 裏面,當您寫完註釋後就可以使用 C-c C-c
將 frame 關掉同時簽入 RCS。
RCS/filename,v <-- filename new revision: 1.2; previous revision: 1.2 enter log message, terminated with single '.' or end of file: >> Started describe what I gonna do in this week >> . done當您需要比較兩個版本之間的差別的時候, rcsdiff 是一個非常好的幫手,它是一個能懂 RCS 的 diff 版本。
您可能還需要用 rlog 命令查看一下文件的版本歷史信息:
2 CVS: 併發版本系統
CVS (Concurrent Version System, 併發版本系統) 是目前在 UNIX 和 Linux 系統上使用最爲廣泛的版本控制系統。
CVS 背後的主要思想之一是項目文件(及其歷史版本)都保存在一箇中心位置。和在 RCS 系統中一樣,您要簽出要開始在上面工作的文件,然後做完修改之後把這些文件再次簽入到代碼庫裏。CVS 的優勢在於,它沒有“上鎖”和“解鎖”檢出的概念,基於人可以同時檢出並修改文件(“併發”由此得名)。
下面從用戶的角度快速列舉一下最重要的 CVS 命令。修改一個項目的第一步是登錄到服務器,檢出想要改動的模塊。我們在這裏要修改的模塊叫做 sort:
CVS password: <password>
現在可以進行 sort 目錄在本地的副本,開始編輯文件。當您準備把文件再次簽入 CVS 庫的時候,不需要使用 -d 選項,因爲 CVS 在子目錄 sort/CVS 裏留下了一份所有必須的本地信息。
3 Subversion: 做得好的 CVS
雖然 CVS 是當前佔據主導的版本控制系統,但是我們建議系統管理員從 RCS 直接跳到 Subversion。這個軟件包的官方網址是 http://subversion.tigris.org/,不過現在已經在使用新的網址 http://subversion.apache.org/ 了。因爲 Subversion 所使用的 License 就是 Apache License。
接下來我將要在我的 ubuntu 12.04 系統上安裝並配置 subversion,雖然我所選用的發行版本是 ubuntu 但是我相信其中的絕大部分內容和操作都應該同樣適用於其他的發行版本,甚至同樣是 ubuntu 的其他時期的發行版。
首先,安裝所需要的軟件包:
$ sudo apt-get install libapache2-svn
$ cd /home/svn
$ sudo svnadmin create softplayer
$ sudo chown -R www-data:www-data softplayer
接下來,創建 /etc/subversion/passwd 文件,該文件包含了能夠使用 Subversion 文件倉庫的用戶的授權信息。
david
或者 john
等用戶.
-c 選項表示創建新的 /etc/subversion/passwd 文件,所以 user_name 所指的用戶將是文件中唯一的用戶。如果要添加其他用戶,則去掉
-c 選項即可,比如像下面的命令一樣:
mode | access |
---|---|
file:// | 直接訪問本地硬盤上文件倉庫 |
http:// | 通過 WebDAV 協議訪問支持 Subversion 的 Apache2 Web 服務器 |
https:// | 類似 http:// 支持 SSL 加密 |
svn:// | 通過自帶協議訪問 svnserve 服務器 |
svn+ssh:// | 類似 svn:// 支持通過 SSH 通道 |
要通過 WebDAV 協議訪問 SVN 文件倉庫,還必須配置一下 Apache2 Web 服務器。在 /etc/apache2/mods-available/dav_svn.conf 文件中寫入以下代碼:
<Location /svn> DAV svn SVNParentPath /home/svn AuthType Basic AuthName "subversion repository" AuthUserFile /etc/subversion/passwd #<LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user #</LimitExcept> </Location>如果需要用戶每次登錄時都進行用戶密碼驗證,請將 <LimitExcept GET PROPFIND OPTIONS REPORT> 與 </LimitExcept> 兩行註釋掉。
當您添加了上面的內容,您必須重新起動 Apache 2 Web 服務器,請輸入下面的命令:
接着就是將數據 import 到 Subversion 倉庫啦:
接下來的工作就是將 Subversion 倉庫中的文件 checkout
出來,修改或刪除,再 commit
回去:
david
用戶名 checkout softplayer 到 SoftPlayerBeta 文件夾中,此時會提示輸入密碼。如果遇到
Password for ‘(null)’ GNOME keyring: 問題的時候可以直接
這時進入 SoftPlayerBeta 文件夾中,修改其中的文件,比如說 foo.c 文件,成功修改後,直接
但是說實在話,直接通過命令來操作 svn 的情況還是比較少見的,更多時候,是通過集成到開發環境中的版本控制管理插件來對文件的版本進行操作,如果您使用
emacs 那麼在 Tools
菜單中就已經提供了 Version Control
的菜單項,方便對受版本控制器管理的文件進行操作;如果是使用
eclipse 來進行開發,那麼在 eclipse 世界裏就已經有非常方便實用的
subclipse 插件來對操作 Subverion,並且還是 GUI 界面的,非常地棒!
更多關於 Subversion 的信息可以參考以下的網址: