5. 創(chuàng)建文件庫
Subversion 所提供的 svnadmin 工具, 有個(gè)專門處理這件事的子命令. 要建立一個(gè)新的檔案庫, 只要執(zhí)行:
$ svnadmin create /usr/svn/repos/test
這樣就在“/usr/svn/repos”目錄下創(chuàng)建了一個(gè)test檔案庫,其中檔案庫的路徑為“/usr/svn/repos/test”
注意:svnadmin工具的默認(rèn)路徑為“/usr/local/bin/svnadmin”
在你執(zhí)行 svnadmin create 命令之后, 這個(gè)目錄中就會有全新的 Subversion 檔案庫. 讓我們看一下在這個(gè)目錄里產(chǎn)生了什么東西.
$ ls /usr/svn/repos/test
dav/ db/ format hooks/ locks/ README.txt
除了 README.txt 與 format 檔以外, 檔案庫是由一群子目錄組成. 就像 Subversion 其它部份的設(shè)計(jì)一樣, 模塊化是很重要的原則, 而且階層式組織要比雜亂無章好. 以下是新的檔案庫目錄中, 各個(gè)項(xiàng)目的簡單敘述:
dav
提供給 Apache 與 mod_dav_svn 使用的目錄, 讓它們儲存內(nèi)部數(shù)據(jù).
db
主要的 Berkeley DB 環(huán)境, 里面都是儲存 Subversion 檔案系統(tǒng) (就是你置于版本控制的全部數(shù)據(jù)所在) 的數(shù)據(jù)庫表格.
format
一個(gè)內(nèi)容為一個(gè)整數(shù)的檔案, 表示檔案庫配置的版本號碼.
hooks
一個(gè)放置 hook 腳本文件模板的目錄 (如果你有安裝的話, 還有腳本檔本身的檔案).
locks
用來放置 Subversion 檔案庫鎖定數(shù)據(jù)的目錄, 用來追蹤存取檔案庫的客戶端.
README.txt
這個(gè)檔案只是用來告知使用者, 他們在看的是 Subversion 的檔案庫.
6. Apache配置
SVN可以同過兩種方式提供客戶端對檔案庫的訪問。
采用Apache HTTP 服務(wù)器 (httpd)。使用WebDAV/deltaV 通訊協(xié)議與客戶端交互, 這個(gè)通訊協(xié)議 (它是 HTTP 1.1 的擴(kuò)充; 請參照 http://www.webdav.org/) 采用廣為使用的 HTTP 通訊協(xié)議。
采用SVN自帶的svnserve服務(wù)器。這個(gè)程序要比 Apache 更輕便, 而且更容易設(shè)定,它會與 Subversion 客戶端透過 TCP/IP 聯(lián)機(jī)以自訂的通訊協(xié)議溝通。
我們采用了Apache服務(wù)器的方式,配置的具體步驟如下:
1).Apache需要加載模塊
為了使客戶端能夠通過Apache來訪問SVN檔案庫,Apache需要加載一個(gè)特殊的模塊mod_dav_svn。如果您的Apache是按照與預(yù)設(shè)目錄安裝的,mod_dav_svn 模塊應(yīng)該會安裝在 Apache 安裝位置 (默認(rèn)路徑是 /usr/local/apache2) 的 modules 子目錄內(nèi)。同時(shí)在Apache的配置文件httpd.conf(默認(rèn)路徑為/usr/local/apache2/conf)中已經(jīng)使用LoadModule指令加載了該模塊(這是安裝過程中自動添加)。LoadModule 指令的語法很簡單, 就是將一個(gè)具名模塊對映到共享鏈接庫在磁盤上的位置:
LoadModule dav_svn_module modules/mod_dav_svn.so
注意這個(gè)指令必須出現(xiàn)在其它的 Subversion 相關(guān)指令之前。
2).配置匿名訪問
使客戶端能夠通過Apache訪問資源庫還需要告訴Apache資源庫的位置,這需要我們在htppd.conf中加入Location指令來配置。
<Location /test>
DAV svn
SVNPath /usr/svn/repos/test
</Location>=
其中DAV表示處理方式,SVNPath是SVN檔案庫的位置。
這樣你就可以使用http://servername/test來訪問檔案庫。
如果你計(jì)劃支持多個(gè) Subversion 檔案庫, 而它們都有著共同的本地磁盤路徑, 你可以使用另一種指令 SVNParentPath, 指示它們共同的父路徑。如果我們在路徑 /usr/svn 之下建立多個(gè) Subversion 檔案庫, 并以http://servername/svn/repos1,http://servername/svn/repos2 等等的 URL 供人存取, 你可以使用下面中的 httpd.conf 設(shè)定語法:
<Location /svn>
DAV svn
SVNParentPath /usr/svn/repos
</Location>
使用前述的語法, Apache 會將所有路徑以 /svn/ 開始的 URL 都交給 Subversion DAV 供應(yīng)模塊處理, 它會假設(shè)任何以 SVNParentPath 指令指定的目錄都是 Subversion 檔案庫。 不像SVNPath, 這個(gè)相當(dāng)便利的語法可以讓你在建立新的檔案庫時(shí), 仍舊不必重跑 Apache。 這時(shí)我們可以同過http://servername/svn/test來訪問我們剛才的檔案庫,同樣如果/usr/snv/repos/目錄中還有檔案庫cvsrepos,我們可以通過http://servername/svn/cvsrepos來訪問,并不需要重新配置。
3).配置用戶驗(yàn)證
我們使用最簡單的是基本驗(yàn)證機(jī)制,它只會使用使用者名稱與密碼, 用以確認(rèn)使用者是他所聲稱的身份。Apache 提供了htpasswd 工具程序,來管理接受的使用者名稱與密碼,也就是你想要授與存取 Subversion 檔案庫權(quán)限的使用者。 讓我們授與 Sally 與 Harry 送交存取的權(quán)限。 首先, 我們必須把它們加入到密碼檔案。
$ ### 第一次: 以 -c 建立檔案
$ htpasswd -c /etc/svn-auth-file harry
New password: *****
Re-type new password: *****
Adding password for user harry
$ htpasswd /etc/svn-auth-file sally
New password: *******
Re-type new password: *******
Adding password for user sally
$
接著, 你需要在 httpd.conf 的 Location 區(qū)塊中新增幾個(gè)指令, 告訴 Apache 如何處理你的新密碼文件。
AuthType 指令指定應(yīng)使用何種認(rèn)證系統(tǒng)。 在目前的狀況中, 我們想要指定 Basic 認(rèn)證系統(tǒng)。
AuthName 是一個(gè)任意的名稱, 讓你用來指定認(rèn)證領(lǐng)域 (authentication domain)。 大多數(shù)的瀏覽器在向使用者詢問使用者代號與密碼時(shí), 會將這個(gè)名稱顯示在彈出的對話框中。
AuthUserFile 指令指定你以 htpasswd 產(chǎn)生的密碼文件
Require 指令指定只有通過驗(yàn)證的用戶才能訪問。
在新增這四個(gè)指令后, 你的 <Location> 區(qū)塊看起來應(yīng)該像這樣:
<Location /svn>
DAV svn
SVNParentPath /usr/local/svn
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /etc/svn-auth-file
Require valid-user
</Location>
現(xiàn)在如果你重新啟動 Apache, 任何需要認(rèn)證的 Subversion 動作都會從 Subversion 客戶端取得使用者代號與密碼, 這可能是使用先前置于快取的值, 或是向使用者詢問。
7. 把CVS檔案庫轉(zhuǎn)換為SVN檔案庫