天天看點

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/