最近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/