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