<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    不做浮躁的人
    正在行走的人...
    posts - 171,  comments - 51,  trackbacks - 0

    原文:http://www.ibm.com/developerworks/cn/java/j-lo-apache-subversion/index.html
    Subversion 簡介

    在開源軟件的開發(fā)過程當中,由于開發(fā)方式自由和開發(fā)人員分散這些特性,版本控制問題一直是關系到項目成敗的重要問題。沒有版本控制系統(tǒng)的支持,開源軟件的開發(fā)過程就是混亂和不可控制的。

    長期以來,CVS 作為一種普遍采用的開源版本控制工具,在很多的開源軟件項目當中充當了重要的角色。在 Eclipse 當中,更是把 CVS 作為一個默認的插件,與 Ant,JUnit 等工具并列在一起,成為 Eclipse 軟件開發(fā)的基本工具。近年來,隨著開源社區(qū)的發(fā)展,一種功能更加強大的開源版本控制工具逐漸進入了人們的視野,那就是 Subversion,憑借著更為優(yōu)秀的特性,Subversion 正在逐步取代 CVS,成為新一代的開源版本控制工具。

    相比 CVS,Subversion 中的目錄、文件以及改名等元數(shù)據(jù)都是被版本化的,例如文件的改名、拷貝等等操作;而且,在 Subversion 中,提交操作是不可分割的,修訂版本號是基于每次提交操作而非文件;另外,Subversion 可以獨立運行,有著輕量級的分支(Branching)與標簽(Tagging)操作,版本庫可以采用數(shù)據(jù)庫(Berkeley DB)或者是使用特定格式的文件進行存儲,對二進制文件進行處理更為有效;最后,Subversion 工具以及相關插件都有著很好的國際化支持,可以支持包括簡體中文在內(nèi)的多種語言版本,方便全球各地的開發(fā)人員。這些優(yōu)秀的新特性,使得 Subversion 成為開源社區(qū)目前的最佳選擇。

    對于普通用戶,即應用程序開發(fā)者而言,尤其是對 Eclipse 的用戶而言,Subversion 的使用十分的簡單。通過官方提供的 Eclipse 插件 Subclipse,用戶可以在 Eclipse 里面很方便的使用 Subversion 客戶端的各項基本功能。具體的客戶端設置和使用方法,請參考 Subversion 官方網(wǎng)站Subclipse 官方網(wǎng)站。簡單說來,在 Eclipse 中使用 Subversion 插件的基本功能,如更新、提交、同步、分支等等,基本上同使用 Eclipse 自帶的 CVS 插件一模一樣,這樣,用戶就可以從 CVS 方便的轉移到 Subversion。

    目前,Subversion 已經(jīng)升級到 1.3.2 版本,相關下載、特性說明和詳細使用手冊可以在 Subversion 主頁上找到。

    簡單的版本庫管理

    有了簡單易用的客戶端,大部分的用戶都可以輕松使用 Subversion 了,不過,作為服務器端的管理人員,還必須進一步了解服務器端的基本配置管理,才可以充分利用 Subversion 的各項優(yōu)秀特性。

    版本庫創(chuàng)建

    Subversion 的版本庫(repository),就是位于服務器端,統(tǒng)一管理和儲存數(shù)據(jù)的地方。本文中,我們以 Linux 為例,介紹在服務器端配置和管理 Subversion 版本庫的基本方法。

    要創(chuàng)建一個版本庫,首先要確定采用哪種數(shù)據(jù)存儲方式。在 Subversion 中,版本庫的數(shù)據(jù)存儲有兩種方式,一種是在 Berkeley DB 數(shù)據(jù)庫中存放數(shù)據(jù);另一種是使用普通文件,采用自定義的格式來儲存,稱為 FSFS。

    兩種存放方式各有優(yōu)缺點,讀者可以參考 http://svnbook.org/ 上面的文檔來了解兩者詳細的比較和區(qū)別,這里,我們僅引用上述文檔當中的簡單對照表,給出一個簡明的比較。


    表1 兩種版本庫數(shù)據(jù)存儲對照表
    特性 Berkeley DB FSFS
    對操作中斷的敏感 很敏感;系統(tǒng)崩潰或者權限問題會導致數(shù)據(jù)庫“塞住”,需要定期進行恢復。 不敏感
    可只讀加載 不能 可以
    存儲平臺無關 不能 可以
    可從網(wǎng)絡文件系統(tǒng)訪問 不能 可以
    版本庫大小 稍大 稍小
    擴展性:修訂版本樹數(shù)量 無限制 某些本地文件系統(tǒng)在處理單一目錄包含上千個條目時會出現(xiàn)問題。
    擴展性:文件較多的目錄 較慢 較慢
    檢出最新代碼的速度 較快 可以
    大量提交的速度 較慢,但時間被分配在整個提交操作中 較快,但最后較長的延時可能會導致客戶端操作超時
    組訪問權處理 對于用戶的 umask 設置十分敏感,最好只由一個用戶訪問。 對 umask 設置不敏感
    功能成熟時間 2001 年 2004 年

    確定了具體的數(shù)據(jù)存儲類型,只要在命令行當中執(zhí)行 svnadmin 命令就可以創(chuàng)建一個 Subversion 版本庫,命令如下

    # 創(chuàng)建文件夾
    $ mkdir /etc/svn/
    $ mkdir /etc/svn/repos
    # 運行創(chuàng)建版本庫的命令,指定數(shù)據(jù)存儲為 FSFS,如果要指定為 Berkeley DB,則將 fsfs 替換為 bdb
    $ svnadmin create --fs-type fsfs /etc/svn/repos
    			

    如果一切正常,命令執(zhí)行后不會有任何反饋信息而迅速返回,這樣,一個新的版本庫就被創(chuàng)建出來了。我們來查看一下生成的版本庫結構:

    $ ls -l /etc/svn/repos
    總用量 56
    drwxrwxr-x  2 robert robert 4096  8月 27 17:27 conf
    drwxrwxr-x  2 robert robert 4096  8月 27 17:27 dav
    drwxrwsr-x  5 robert robert 4096  8月 27 17:27 db
    -r--r--r--  1 robert robert    2  8月 27 17:27 format
    drwxrwxr-x  2 robert robert 4096  8月 27 17:27 hooks
    drwxrwxr-x  2 robert robert 4096  8月 27 17:27 locks
    -rw-rw-r--  1 robert robert  229  8月 27 17:27 README.txt
    			

    其中,conf 目錄下存放了版本庫的配置文件,包括用戶訪問控制和權限控制等內(nèi)容,文件本身的注釋說明十分詳細,讀者可以根據(jù)注釋自行配置;dav 目錄是提供給 Apache 相關模塊的目錄,目前為空;db 目錄下存放著 Subversion 所要管理的所有受版本控制的數(shù)據(jù),不同的存儲方式(Berkeley DB 或者 FSFS)下有著不同的目錄結構,不過我們一般不用直接修改和查看這個目錄下的內(nèi)容,Subversion 的命令可以安全的操作這個目錄;另外,hooks 目錄存放著鉤子腳本及其模版(一種版本庫事件觸發(fā)程序),locks 目錄存放著 Subversion 版本庫鎖定數(shù)據(jù),format 文件記錄了版本庫的布局版本號。

    項目添加

    有了新建的版本庫,就可以往里面添加項目了。不過,管理員必須考慮的問題是,應該將每一個項目分別放在不同的版本庫里面,還是應該將它們放在統(tǒng)一的版本庫里面。統(tǒng)一的版本庫可以讓管理員更加容易的升級和備份,不過,由于訪問權限控制是針對整個版本庫的,所以,統(tǒng)一的版本庫也為不同項目配置不同的訪問權限帶來了麻煩。所以,管理員應該根據(jù)實際情況權衡考慮。

    我們以統(tǒng)一的版本庫為例,添加兩個項目 project_luni 和 project_test。要做到這個,最好的辦法就是用 svn import 命令導入已有的目錄樹。

    首先,我們在一個臨時目錄下,根據(jù) Subversion 版本控制的一般布局結構,創(chuàng)建出兩個項目的主要目錄樹,如下:

    /etc/svn/tmp					
    |
    ――project_luni					
    |	|
    |	――branches
    |	|
    |	――tags
    |	|
    |	――trunk
    |					
    ――project_test
    	|
    	――branches
    	|
    	――tags
    	|
    	――trunk
    

    然后,用 svn import 命令來進行項目的導入:

    $ svn import /etc/svn/tmp/ file:///etc/svn/repos/ --message "init"
    新增           /etc/svn/tmp/project_test
    新增           /etc/svn/tmp/project_test/trunk
    新增           /etc/svn/tmp/project_test/branches
    新增           /etc/svn/tmp/project_test/tags
    新增           /etc/svn/tmp/project_luni
    新增           /etc/svn/tmp/project_luni/trunk
    新增           /etc/svn/tmp/project_luni/branches
    新增           /etc/svn/tmp/project_luni/tags
    提交后的修訂版為 1。
    

    版本庫查看

    作為版本庫管理員,我們經(jīng)常需要查看 Subversion 版本庫的狀況,這就需要一些“只讀”的查看工具。

    在上述項目導入完成以后,我們可以用 svn list 確認導入的項目是否正確:

    $ svn list --verbose file:///etc/svn/repos/
    1 robert                 8月 27 18:24 project_luni/
    1 robert                 8月 27 18:24 project_test/
    

    另外,如果要查看最新修訂版本的信息,可以使用 svnlook info 命令:

    $ svnlook info /etc/svn/repos/
    robert
    2006-08-27 18:24:27 +0800 (日, 27  8月 2006)
    0
    

    命令輸出了這個版本庫的最新修訂版本信息,包括作者、時間、日志字數(shù)和日志內(nèi)容等。除開最新修訂版以外,我們還可以在命令后面接上 “--revision 版本號” 來指定某一個修訂版的顯示。

    另外,我們還可以用如下命令來顯示版本庫的具體樹形結構,后面的 “--show-ids” 選項指定顯示每一個顯示元素的修改版本 ID。

    $ svnlook tree /etc/svn/repos/ --show-ids
    / <0.0.r1/1007>
    project_test/ <1.0.r1/333>
    trunk/ <2.0.r1/0>
    branches/ <3.0.r1/74>
    tags/ <4.0.r1/152>
    project_luni/ <5.0.r1/793>
    trunk/ <6.0.r1/454>
    branches/ <7.0.r1/530>
    tags/ <8.0.r1/609>
    

    其他

    這里有一個需要新手,尤其是習慣了 Subversion 客戶端命令 “svn” 的用戶注意的問題,那就是,“svnadmin” “svnlook” 都被認為是服務器端的管理工具,只被用于版本庫所在的機器,用來檢查和維護版本庫,不能通過網(wǎng)絡來執(zhí)行任務。所以,試圖將 URL 甚至本地 file 路徑傳遞給這兩個程序,都是錯誤的。

    Subversion 還有很多管理工具可供管理員應用,需要了解這項工具的使用方法,讀者們可以用 svn help, svnadmin help, svnlook help 等等命令查看幫助信息,另外,Subversion 參考手冊提供了更為全面和詳細的使用介紹。

    基本的服務器配置

    Subversion 設計了一個抽象的網(wǎng)絡層,版本庫建立完畢之后,可以通過各種服務器向外公布。svnserve 是 Subversion 自帶的一個小型的服務器,它使用獨立的協(xié)議與客戶端。我們可以通過

    svnserve –i
    

    作為 inetd 啟動或者

    svnserve –d
    

    作為守護進程啟動一個服務。服務器啟動后,客戶端即可以通過絕對路徑訪問。如上例可以訪問 svn://服務器IP/etc/svn/repos。同時可以指定一些選項,常用的如 -r,用來指定版本庫的根路徑,例如假設版本庫位于 /etc/svn/repos:

    svnserve –d -r /etc/svn
    

    則客戶端可以通過如下 URL 訪問服務器:svn://服務器IP/repos, 這樣可以有效的避免暴露本地路徑。另外如 --listen-port--listen-host 可以指定綁定的地址和端口,-R 可以強制設定為 Read-Only 模式。如果在 Windows 操作系統(tǒng)下,可以將版本庫設定在 C 分區(qū),如 c:\svnroot\repos 可以通過 svn://服務器IP/svnroot/repos訪問,如果在其他分區(qū),就必須要通過 -r 選項來指定 root 位置。

    svnserve 可以通過配置 svnserve.conf 來進行一些簡單的訪問權限控制。你可以在版本庫的 conf 子文件夾下發(fā)現(xiàn)這個文件。文件的初始內(nèi)容大致如下:

    [general]
    # anon-access = read
    # auth-access = write
    password-db = passwd
    # authz-db = authz
    # realm = My First Repository
    

    其中 anon-access 表示匿名用戶的權限,auth-access 表示認證用戶的權限設置,password-db 指向保存用戶帳號密碼的文件的位置,可以使用相對路徑。svnserve 只能對全局提供簡單的訪問控制,如果想要更加靈活的方式,可以使用 Apache Http Server 作為向外公布版本庫的方式。

    與 Apache Http Server 的結合

    通過 Http 協(xié)議訪問版本庫是 Subversion 的亮點之一。使用 Http 協(xié)議意味著只需要打開瀏覽器,輸入 URL 即可輕松的瀏覽整個版本庫。靈活通常帶來復雜性,Http 方式相對于 svnserve 方式來說需要更多的配置。

    由于 Subversion 需要版本化的控制,因此標準的 Http 協(xié)議不能滿足需求。要讓 Apache 與 Subversion 協(xié)同工作,需要使用 WebDAV(Web 分布式創(chuàng)作和版本控制)。WebDAV 是 HTTP 1.1 的擴展,關于 WebDAV 的規(guī)范和工作原理,可以參考 IETF RFC 2518

    為了使 Subversion 與 dav 模塊通信,需要安裝 mod_dav_svn 插件,可以在 Subversion 的安裝目錄中找到。將其拷貝到 Apache 安裝目錄的 modules 文件夾下。接下來就是配置 Apache 的 httpd.conf 文件,讓 Apache 在啟動的時候加載上述模塊。

    需要添加的內(nèi)容如下:

    LoadModule dav_module modules/mod_dav.so
    LoadModule dav_svn_module modules/mod_dav_svn.so
    <Location /repos>
      DAV svn
      SVNPath /etc/svn/repos
    </Location>
    

    首先需要啟用 dav_module,然后加載 dav_svn_module。Location 標簽指出訪問的 URL 以及在服務器上的實際位置。配置完畢后重新啟動 Apache,打開瀏覽器,輸入 http://服務器IP/repos 將會看到如下畫面:


    圖1. 一個初始版本庫
    初始版本庫

    這表示 Apache 的 dav_svn 模塊已經(jīng)可以正常工作了。用戶可以使用任何一種 Subversion 的客戶端通過 Http 協(xié)議訪問你的版本庫。

    如果想要指定多個版本庫,可以用多個 Location 標簽,也可以使用 SVNParentPath 代替 SVNPath,例如在 /etc/svn 下有多個版本庫 repos1,repos2 等等,用如下方式指定:

    <Location /repos>
      DAV svn
      SVNParentPath /etc/svn
    </Location>
    

    "SVNParentPath /etc/svn" 表示 /etc/svn 下的每個子目錄都是一個版本庫。可以通過 http://服務器IP/repos/repos1http://服務器IP/repos/repos2 來訪問。

    現(xiàn)在你的版本庫任何人都可以訪問,并且有完全的寫操作權限。也就是說任何人都可以匿名讀取,修改,提交,以及刪除版本庫中的內(nèi)容。顯然大部分場合這是不符合需求的。那么如何進行權限設置呢,Apache 提供了基本的權限設置:

    首先需要創(chuàng)建一個用戶文件。Apache 提供了一個工具 htpasswd,用于生成用戶文件,可以在 Apache 的安裝目錄下找到。具體使用方法如下:

    htpasswd etc/svn/passwordfile username
    	

    如果 passwordfile 不存在,可以加上 -c 選項讓 htpasswd 新建一個。創(chuàng)建好的文件內(nèi)容是用戶名加上密碼的 MD5 密文。

    接下來修改 httpd.conf,在 Location 標簽中加入如下內(nèi)容:

    AuthType Basic
    AuthName "svn repos"
    AuthUserFile /etc/svn/passwordfile
    Require valid-user
    

    重新啟動 Apache, 打開瀏覽器訪問版本庫。Apache 會提示你輸入用戶名和密碼來認證登陸了,現(xiàn)在只有 passwordfile 文件中設定的用戶才可以訪問版本庫。也可以配置只有特定用戶可以訪問,替換上述 "Require valid-user" 為 "Require user tony robert" 將只有 tony 和 robert 可以訪問該版本庫。

    有的時候也許不需要這樣嚴格的訪問控制,例如大多數(shù)開源項目允許匿名的讀取操作,而只有認證用戶才允許寫操作。為了實現(xiàn)更為細致的權限認證,可以使用 Limit 和 LimitExcept 標簽。例如:

    <LimitExcept GET PROPFIND OPTIONS REPORT>
    	require valid-user
    </LimitExcept>
    

    如上配置將使匿名用戶有讀取權限,而限制只有 passwordfile 中配置的用戶可以使用寫操作。如果這還不能滿足你的要求,可以使用 Apache 的 mod_authz_svn 模塊對每個目錄進行認證操作。

    用 mod_authz_svn 進行目錄訪問控制

    首先需要讓 Apache 將 mod_authz_svn 模塊加載進來。在 Subversion 的安裝目錄中找到 mod_auth_svn 模塊,將其拷貝到 Apache 安裝目錄的 modules 子目錄下。修改 httpd.conf 文件,找到

    LoadModule dav_svn_module modules/mod_dav_svn.so
    

    在其后面加上

    LoadModule authz_svn_module modules/mod_authz_svn.so
    

    現(xiàn)在可以在 Location 標簽中使用 authz 的功能了。一個基本的 authz 配置如下:

    <Location /repos>
      DAV svn 
      SVNPath /etc/svn/repos 
      AuthType Basic 
      AuthName "svn repos" 
      AuthUserFile /etc/svn/passwd 
      AuthzSVNAccessFile /etc/svn/accesspolicy
      Satisfy Any 
      Require valid-user 
    </Location>
    

    AuthzSVNAccessFile 指向的是 authz 的策略文件,詳細的權限控制可以在這個策略文件中指定,如:

    #兩個分組:committers,developers
    [groups] 
    committers = paulex richard
    developers = jimmy michel spark sean \ 
               steven tony robert
    #在根目錄下指定所有的用戶有讀權限
    [/] 
    * = r 
    #追加 committers 組用戶有讀寫權限
    @committers = rw 
    #在 branches/dev 目錄下指定 developers 組的用戶有讀寫權限
    [/branches/dev] 
    @developers = rw 
    #在 /tags 組下給予用戶 tony 讀寫權限	
    [/tags] 
    tony = rw 
    #禁止所有用戶訪問 /private 目錄
    [/private] 
    * = 
    #給 committers 組用戶讀權限
    @committers= r
    

    使用 SVNParentPath 代替 SVNPath 來指定多個版本庫的父目錄時,其中所有的版本庫都將按照這個策略文件配置。例如上例中 tony 將對所有版本庫里的 /tags 目錄具有讀寫權限。如果要對具體每個版本庫配置,用如下的語法:

    [groups] 
    project1_committers = paulex richard
    project2_committers = jimmy michel spark sean \ 
               steven tony robert
    [repos1:/] 
    * = r 
    @ project1_committer = rw 
    [repos2:/] 
    * = r 
    @ project2_committer = rw 
    

    這樣項目1的 committer 組只能對 repos1 版本庫下的文件具有寫權限而不能修改版本庫 repos2,同樣項目2的 commiter 也不能修改 repos1 版本庫的文件。

    用 MySQL 代替文件形式存放密碼

    到目前為止我們的用戶名密碼文件還是以文本文件形式存放在文件系統(tǒng)中的,出于安全性的需要或者單點登陸等可擴展性的考慮,文本文件的管理方式都不能滿足需求了。通過 Apache 的 module_auth_mysql 模塊,我們可以用 MySQL 來保存用戶信息。該模塊的主頁在 http://modauthmysql.sourceforge.net/,你也可以在 http://modules.apache.org/ 找到它的發(fā)行版本。安裝方法同上述 Apache 的模塊一樣,拷貝至 modules 目錄并在 httpd.conf 文件中添加如下語句:

    LoadModule mysql_auth_module modules/mod_auth_mysql.so
    

    相應的 Location 區(qū)域改寫為:

    <Location /repos> 
      AuthName "MySQL auth" 
      AuthType Basic 
      AuthMySQLHost localhost 
      AuthMySQLCryptedPasswords Off
      AuthMySQLUser root
      AuthMySQLDB svn 
      AuthMySQLUserTable users
      require valid-user 
    </Location>
    

    然后在 mysql 中添加名為 svn 的數(shù)據(jù)庫,并建立 users 數(shù)據(jù)表:

    create database svn;
    use svn;
    CREATE TABLE users (
    user_name CHAR(30) NOT NULL,
    user_passwd CHAR(20) NOT NULL,
    user_group CHAR(10),
    PRIMARY KEY (user_name)
    );
    

    在 users 表中插入用戶信息

    insert into users values('username','password','group');
    

    重新啟動 Apache,在訪問版本庫的時候 Apache 就會用 mysql 數(shù)據(jù)表中的用戶信息來驗證了。

    用 SSL 實現(xiàn)安全的網(wǎng)絡傳輸

    通過 Apache 的網(wǎng)絡鏈接,版本庫中的代碼和數(shù)據(jù)可以在互聯(lián)網(wǎng)上傳輸,為了避免數(shù)據(jù)的明文傳輸,實現(xiàn)安全的版本控制,需要對數(shù)據(jù)的傳輸進行加密。Apache 提供了基于 SSL 的數(shù)據(jù)傳輸加密模塊 mod_ssl,有了它,用戶就可以用 https 協(xié)議訪問版本庫,從而實現(xiàn)數(shù)據(jù)的加密傳輸了。SSL 協(xié)議及其實現(xiàn)方式,是一個非常復雜的話題,本文只是介紹 Apache 提供的最基本的SSL配置方法,更加詳細的介紹內(nèi)容,請參考 http://httpd.apache.org/docs-2.0/ssl/ 上的文檔。

    開始配置前,我們需要一個實現(xiàn) Apache 中 SSL 模塊的動態(tài)程序庫,通常名為 mod_ssl.so,及其配置文件,通常名為 ssl.conf。這個實現(xiàn)是跟 Apache 的版本相關的,不匹配的版本是不能用的;而且,并不是每一個 Apache 的版本都自帶了相關實現(xiàn)文件,很多情況下,我們需要自己去搜尋相關文件。另外,我們還需要 OpenSSL 軟件及其配置文件,來生成加密密鑰和數(shù)字證書。這里,我們可以使用一些免費網(wǎng)站,如 http://hunter.campbus.com/ 上提供的集成版本的 Apache。

    有了相關的工具和文件,我們就可以開始生成 SSL 的證書和密鑰了。首先,我們需要找到 openssl 程序及其配置文件 openssl.cnf,運行如下命令來生成 128 位的 RSA 私有密鑰文件

    my-server.key:
    openssl genrsa -des3 -out my-server.key 1024
    Loading 'screen' into random state - done
    Generating RSA private key, 1024 bit long modulus
    .....++++++
    ........++++++
    e is 65537 (0x10001)
    Enter pass phrase for server.key:********
    Verifying - Enter pass phrase for server.key:********
    

    命令運行期間需要用戶輸入并確認自己的密碼。

    現(xiàn)在,我們需要 SSL 的認證證書,證書是由 CA(certificate authority) 發(fā)放并且認證的。為此,我們可以用如下命令生成一個 CSR(Certificate Signing Request) 文件發(fā)給 CA,從而得到 CA 的認證:

    openssl req -new -key my-server.key -out my-s erver.csr -config openssl.cnf
    

    當然,一般情況下,如果 Subversion 的用戶不是太多,安全情況不是很復雜,我們也可以生成一個自簽名的認證證書,從而省去了向 CA 申請認證的麻煩。如下命令:

    openssl req -new -key my-server.key -x509 -out my-server.crt -config openssl.cnf
    

    以上兩個命令都需要用戶輸入那個 key 文件的密碼,以及一些網(wǎng)絡設置信息,如域名,郵箱等等,這里輸入的服務器域名應該與 Apache 配置文件當中的一致。現(xiàn)在,我們可以在 Apache 的 conf 目錄下新建一個 ssl 目錄,將 my-server.key 和 my-server.crt 文件都移動到 ssl 目錄里面。然后修改 ssl.conf 文件,將 SSLCertificateKeyFile 和 SSLCertificateFile 項指向這兩個文件。

    如果 Apache 的 module 目錄里面沒有 mod_ssl.so 文件,可以將事先準備好的文件拷貝過去。然后,我們可以設置 Apache 的配置文件 httpd.conf,將 ssl 模塊加入其中:

    LoadModule ssl_module modules/mod_ssl.so
    

    然后,在配置文件的最后,加上如下 SSL 相關配置項:

    SSLMutex default
    SSLRandomSeed startup builtin
    SSLSessionCache none
    
    ErrorLog logs/SSL.log
    LogLevel info
    <VirtualHost svntest.ut.cn.ibm.com:443>
      SSLEngine On
      SSLCertificateFile conf/ssl/my-server.crt
      SSLCertificateKeyFile conf/ssl/my-server.key
    </VirtualHost>
    

    這樣,基本的設置工作就完成了。重新啟動 Apache 服務器,現(xiàn)在可以用 https 協(xié)議代替 http 協(xié)議來訪問版本庫了。如果要限定版本庫只能用 https 訪問,我們可以在 Apache 配置文件當中 Subversion 部分加上 “SSLRequireSSL”。如下:

    <Location /repos>
      DAV svn 
      SVNPath /etc/svn/repos
      ………….#other items
      SSLRequireSSL 
    </Location>
    

    總結

    Subversion 以其優(yōu)良的版本控制功能,靈活的網(wǎng)絡訪問模型,以及與 Apache 服務器聯(lián)合配置所帶來的更強大的管理控制功能,逐漸在開源軟件開發(fā)的實踐當中得到廣泛的應用。本文重點介紹了 Subversion 服務器端的配置以及與 Apache 服務器聯(lián)合配置的基本步驟和簡單應用,實現(xiàn)了簡單的實例應用。讀者如果想要進一步了解相關信息,請參考文章后面列出的相關資料。

    posted on 2007-09-29 11:36 不做浮躁的人 閱讀(399) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     

    <2007年9月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    30123456

    常用鏈接

    留言簿(9)

    隨筆分類(31)

    隨筆檔案(75)

    文章分類(1)

    文章檔案(3)

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 人人爽人人爽人人片A免费| 亚洲视频一区二区三区四区| 亚洲av无码成h人动漫无遮挡| 亚洲AV成人精品网站在线播放| 久久丫精品国产亚洲av| 亚洲成人免费在线观看| 亚洲国产欧美国产综合一区 | 国产免费不卡v片在线观看| 在线免费观看色片| 亚洲国产小视频精品久久久三级| 国产偷国产偷亚洲清高动态图| 亚洲天堂中文资源| 国内精品久久久久影院亚洲| 狼色精品人妻在线视频免费| 18禁超污无遮挡无码免费网站| 69视频在线观看高清免费| 日韩免费视频播放| 亚洲老妈激情一区二区三区| 亚洲日韩国产精品无码av| 免费播放美女一级毛片| 你懂的免费在线观看网站| 在线播放高清国语自产拍免费| 自拍偷自拍亚洲精品被多人伦好爽| 亚洲高清在线mv| 美女啪啪网站又黄又免费| 亚欧免费一级毛片| 免费萌白酱国产一区二区| 亚洲成在人天堂在线| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲成A人片在线观看中文| 亚洲Aⅴ无码专区在线观看q| 亚洲国产成人久久精品大牛影视| 中文在线日本免费永久18近| 一个人看www在线高清免费看| 亚洲日本一区二区三区在线不卡| 亚洲精品国产情侣av在线| 色婷婷综合缴情综免费观看| 国产成人精品久久免费动漫| 亚洲国产高清在线一区二区三区| 亚洲福利视频网址| 精品一区二区三区免费视频|