SVN初相識

最近boss給我分了個師弟,終於結束了孤軍奮戰的日子,雖然師弟也不怎麼會,但有總比沒有好,現在兩個人也算個小團隊了,代碼拷來拷去很麻煩,我就試着自己搭建個SVN服務器,搭建過程中遇到了一些問題,記錄在這裏備忘。

SVN(即Subversion)服務器端軟件原始版本就叫Subversion,最新版本爲Subversion1.6.9,如果採用原始版本,則網絡應用層協議使用的是SNV獨有的snv協議,在客戶端軟件中(例如:TortoiseSVN)就可以使用類似svn://localhost/project這樣的地址來訪問服務器。SVN也有很多衍生版本,這些版本集成了web服務器,這樣使得安裝和配置比較容易,並且可以在瀏覽器中訪問SVN服務器,有代表性的兩個是:VisualSVN和CollabNet Subversion,前者服務器端是免費的,客戶端可以集成在Visual Studio中,是收費的(當然你也可以採用免費的TortoiseSVN)。後者是開源軟件,理所當然是免費的。它們均集成了Apache Web服務器。下面主要講述CollabNet Subversion的安裝與配置。

1.CollabNet Subversion的安裝

1、安裝

  * Subversion1.5版本的安裝包自帶了Apache2.2.8,所以無需額外安裝Apache服務器
  * 一路默認安裝,如果需要修改倉庫根目錄或者Apache2.2.8端口可以自行修改爲自己的信息,Apache默認端口爲80,Subversion默認倉庫存儲路徑爲C:/svn_repository。
    安裝的過程中會自動將Subversion和Apache註冊成服務,安裝完成後重啓一下電腦,運行services.msc查看服務,可以看到 “Apache2.2”和“Subversion Server”兩個服務已經自動啓動,如果不想讓他們自動啓動,可以修改爲手動啓動。

    注:安裝結束時沒有提示重啓系統,但重啓之前Apache服務無法啓動。

  * 安裝好後進入安裝目錄C:/Program Files/CollabNet Subversion Server,裏面有一個httpd目錄,這裏面就是Apache服務器。
    進入httpd下的bin目錄,可以看到Apache服務器的各個程序
    雙擊“ApacheMonitor.exe”打開Apache控制檯,可以看到控制檯的狀態欄有如下內容:
    Apache/2.2.8 (Win32) DAV/2 SVN/1.5.0
    這說明Apache與Subversion在安裝的過程中已經整合成功。

2、配置用戶和權限

  注:下面用的用戶配置文件passwords.auth和權限配置文件access.auth的生成、配置及使用方式,在我的另一篇文章 “Apache2.2.9+Subversion1.4.6(for Apache2.2.X)在windows下的配置與權限設置”中有詳細的介紹,這裏就不再贅述。

   * 進入安裝目錄下的httpd目錄中的conf目錄,如:
C:/Program Files/CollabNet Subversion Server/httpd/conf
    打開httpd.conf文件,先看看文件最後面,已經自動爲我們配置好了倉庫的信息如下:
<Location /svn>
DAV svn
SVNParentPath C:/svn_repository
</Location>
    在這裏我們先加入,用戶配置,代碼如下:

<Location /svn>
DAV svn
SVNParentPath C:/svn_repository
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile "C:/svn_repository/passwords.auth"
Require valid-user
</Location>

    加入那四行新的信息後,重新啓動Apache服務器,一切正常,這是可通過瀏覽器輸入http://localhost/svn測試,會提示輸入用戶名、密碼,用SVN客戶端軟件同樣可以測試得到相同的結果。

    下面是本文的主要內容,及權限配置的注意事項。

    我們再在代碼中加入權限配置的代碼AuthzSVNAccessFile "C:/svn_repository/access.auth"
    修改後的代碼如下:

<Location /svn>
DAV svn
SVNParentPath C:/svn_repository
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile "C:/svn_repository/passwords.auth"
AuthzSVNAccessFile "C:/svn_repository/access.auth"
Require valid-user
</Location>


     此時重啓Apache服務器,發現無法啓動,提示“The requested operation has failed!”

     這是我們需要再次修改httpd.conf配置文件,加入mod_authz_svn.so的加載項。

     找到配置文件的116行(推薦使用UtralEdit或EditPlus編輯工具,不要一行一行的數哦),115和116行的代碼如下:

115 LoadModule dav_module         modules/mod_dav.so
116 LoadModule dav_svn_module     modules/mod_dav_svn.so

     其中116行中的mod_dav_svn.so文件就是以前我們安裝Subversion1.4.6和Apache時,由Subversion
     的lib目錄拷貝到Apache的modules目錄的,並在Apache的httpd.conf下新加入的那行代碼。   

     再找到84行的代碼,會發現和115行的代碼一樣,只是多了一個#號,表示這一行被註釋了,115行的作用就是使這行代碼重新生效,這就是以前取消註釋的那行代碼。

84  #LoadModule dav_module modules/mod_dav.so
   
     如果裝過Subversion以前的版本,應該記得當時需要拷貝兩個文件到Apache的modules目錄下,一個
     是上面說過的mod_dav_svn.so,另一個就是mod_authz_svn.so。在Subversion1.5的安裝目錄下的 Apache目錄httpd的modules中已經包含了mod_authz_svn.so文件,所以無需拷貝,只需要加入一行加載代碼即可。

     再次回到116行的位置,在他的下面加入如下一行代碼,這行代碼就成爲了117行:

     LoadModule authz_svn_module  modules/mod_authz_svn.so

     此時我們再保存配置文件,重啓Apache服務器,發現又可以正常的啓動了。

     到此,我們完成了Subversion1.5的安裝與默認配置工作,可以在實際的開發中使用Subversion1.5了。

2.CollabNet Subversion的配置

1、建立版本庫(本文以在D:/盤下操作爲例)

  * 在Windows開始菜單的運行中執行cmd打開命令窗口,然後轉到D:/根目錄
  * 在D:/根目錄下執行D:/mkdir svnroot建立子目錄svnroot,再轉入svnroot目錄下
  * 在D:/svnroot目錄下首先執行D:/svnroot/mkdir svn1建立子目錄svn1,在進入svn1中,在建立三個子文件夾aaa,bbb和ccc,建好的目錄結構如下:
     C:/svnroot/svn1/aaa
                    /bbb
                    /ccc
  * 然後執行svnserve create D:/svnroot/svn1建立倉庫svn1

2、配置單倉庫的用戶權限

  * 再次打開Apache安裝目錄下conf目錄中的httpd.conf文件,將光標移到問文件的最末端加入如下代碼:

<Location /svn>
#這裏指定了倉庫的訪問路徑,即http://localhost/svn
DAV svn
#指定倉庫在硬盤上的實際位置
SVNPath D:/svnroot/svn1
#認真方式爲基本方式
AuthType Basic
#認證窗口的標題
AuthName "Subversion Repository"
#認證用戶配置文件實際位置
AuthUserFile "D:/svnroot/passwords.auth"
#認證權限配置文件實際位置
AuthzSVNAccessFile "D:/svnroot/access.auth"
#設定爲需要進行認證
Require valid-user

</Location>

  * 接下來我們創建認證所需的兩個文件:用戶文件和權限文件
    到D:/svnroot下建立文件passwords.auth和access.auth(可以用記事本創建後修改文件名)

  * 配置認證用戶文件passwords.auth,內容如下:
  
    tom:tom
    cat:cat
    hello:world
  
    在這裏密碼都沒有加密,如果需要設置密碼加密,可以用Apache安裝目錄下bin目錄中的htpasswd.exe程序生成,具體生成方法如下:
  
    首先要將這個目錄配置到環境變量的path中,我的路徑是
    C:/Program Files/Apache Software Foundation/Apache2.2/bin
    然後打開命令窗口,在命令行中使用如下命令
    C:/htpasswd -c D:/svnroot/passwords.auth tom
    回車後會提示輸入密碼,輸入tom,再回車會提示輸入確認密碼,再次輸入tom就可以了
    命令行中的參數-c表示創建一個文件,第一次運行創建好了,再添加別的用戶的時候就
    不要再使用這個參數了,如我再添加cat和hello用戶
    C:/htpasswd D:/svnroot/passwords.auth cat
    C:/htpasswd D:/svnroot/passwords.auth hello
    這樣建立的用戶密碼默認使用的MD5加密,你打開文件以後看到的可能就是如下格式:
    tom:7Z/80Al6$WTqVrBgshc/Bxi6YYkUga1$apr1$
    cat:kNrG459T$qfAZ7MpgpFcdd2xp25gST1$apr1$

    到此我們就添加好了三個用戶tom,cat和hello,他們的密碼分別爲tom,cat,world

    * 配置認證權限文件access.auth
    直接在D:/svnroot下建立access.auth文件即可,然後填入如下內容

[groups]
dev1 = tom,cat  #開發用戶組1
dev2 = hello      #開發用戶組2

[/]
* = r   #設定所有用戶對根目錄有讀權限,即瀏覽權限

[/aaa]  
@dev1 = rw #設定dev1組成員對aaa目錄有讀和寫權限
@dev2 =  #設定dev2組成員對aaa目錄沒有任何權限

[/bbb]
@dev1 =  #設定dev1組成員對bbb目錄沒有任何權限
@dev2 = rw #設定dev2組成員對bbb目錄有讀和寫權限

[/ccc]
@dev1 =  #設定dev1組成員對ccc目錄沒有任何權限
@dev2=  #設定dev2組成員對ccc目錄沒有任何權限

 

    到此我們爲不同用戶分組定義了權限,大家可以使用不同的用戶
    進行browse/import/checkout試驗(在客戶端軟件上進行)

    訪問路徑爲http://localhost/svn
 

參考了前人的經驗:

http://www.subversion.org.cn/?action-viewnews-itemid-62

http://www.cnblogs.com/shiningrise/archive/2009/12/23/1630871.html

http://blog.csdn.net/jnstone3/archive/2009/03/06/3962521.aspx

http://jiangzif0.blog.163.com/blog/static/48423595200911234299230/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章