svn数据仓库配置,权限配置
svn服務的開啟有兩種方式,?
·????????自帶的svnserve服務(訪問地址類似于svn://192.168.80.18/repos/)
·????????與Apache配合使用? (訪問地址類似于http://192.168.80.18:8077/repos/)
下面先進入第一種的配置:?
1 安裝,解壓縮下載的svn壓縮包到對應文件夾(建議路徑不要有空格與中文)?
Svn的安裝目錄截圖:
2 建立版本庫,首先建立 E:\svn 空文件夾作為所有版本庫的根目錄。然后,進入命令行并切換到安裝subversion的bin目錄(建議將此目錄設為path,也就是說配置環(huán)境變量)。?
我的電腦上的環(huán)境變量中的部分配置是:
D:\Installed\Subversion\bin;C:\ProgramFiles\TortoiseSVN\bin;D:\software\Subversion\bin
輸入如下命令:?
svnadmin create E:\svn\repos??? (按照此配置,對應的svn的URLpath是:svn://裝svn服務器的ip地址\repos)
創(chuàng)建后再E\svn\repos目錄下出現(xiàn)了如下文件:
3 運行服務進程?
在bin目錄下輸入:?
svnserve -d -r E:\svn?
參數(shù)說明:
-d:效果同于--daemon?
-r :效果同于--root?
svnserve 將會在端口 3690 等待請求,?
??? --daemon(兩個短橫線)選項告訴svnserve 以守護進程方式運行,這樣在手動終止之前不會退出。不要關閉命令行窗口,關閉窗口會把svnserve 停止。?
??? --root選項設置根位置來限制服務器的訪問目錄,從而增加安全性和節(jié)約輸入svnserveURL的時間?
??? 如果不加root參數(shù),服務url為:svn://localhost/svn/repos?? 如下方式checkout:
??? 而如果加上root參數(shù),服務url為:svn://localhost/repos?
??? 此處的啟動配置會影響服務url,如果輸入url錯誤,會導致訪問的時候出現(xiàn)異常?
??
4 為了驗證svnserve正常工作,使用TortoiseSVN-> Repo-browser 來查看版本庫。在彈出的URL 對話框中輸入:?
? svn://localhost/repos?
? 點 OK 按鈕后就可以看見 repo1 版本庫的目錄樹結構了,只不過這時repo1 是個空庫。?
可能出現(xiàn)的問題:?
????Error:Can't connect to host '': 由于目標機器積極拒絕,無法連接。(這種情況要查看svn服務是否啟動,二:svn的URL地址地址寫錯了)?
??? 解決:首先測試svn的3690端口是否打開:telnetlocalhost 3690?
??? 如果不成功說明服務沒有被正常啟動,請參考前面步驟?
??? 可以將svn服務添加到系統(tǒng)服務中去,步驟如下:這樣可以避免每次重啟后需要手動運行命令的煩惱?
??? 1 在subversion的安裝路徑下,找到bin文件夾?
??? 2 新建一個setupservice.bat文件,內(nèi)容為:
?
?setupservice.bat編寫格式:
sc?create?svnserve?binpath=?"Subversion安裝路徑\bin\svnserve.exe?--service?-r?E:\svn"?depend=?Tcpip?start=?auto?
sc?start?svnserve
pause?
這里有個需要注意的問題:“start=auto"等號后面要加上一空格?
3 運行,這時在服務里可找到一個名為svnserve的服務。?
在cmd命令行下查看打開的端口:netstat-ano就看到3690端口打開了?
注意關于以下錯誤:
????Error:No repository found in 'svn://localhost/svn/repos/目錄名(假設是jmxDemo目錄)'??
??? 解決:?
推論過程:
1.?A.測試1:??
2.????①運行svnserve?-d?-r?E:\svn\repos\jmxDemo?//指定jmxDemo根目錄為服務的根目錄??
3.????②運行svn://localhost,可以正常訪問修改jmxDemo??
4.????③運行svn://localhost/jmxDemo,出現(xiàn):'svn://localhost/jmxDemo'?non-existent?in??
5.???
6.?B.測試2:??
7.????①運行svnserve?-d?-r?E:\svn\repos?//指定jmxDemo上層目錄為服務的根目錄??
8.????②運行svn://localhost/jmxDemo,可以正常訪問修改Repository??
9.????③運行svn://localhost,出現(xiàn):Error?*?No?repository?found?in?'svn://localhost'???
10.???
11.C.結論:??
12.???①SVN服務啟動時指定的根目錄不同,會影響相同URL的訪問結果??
13.???②SVN在訪問指定路徑時會從服務的根目錄下去尋找,即基于我們啟動服務時指定的根目錄??
14.???③svn://localhost指向默認的jmxDemo,svn://localhost/jmxDemo指向jmxDemo??
15.???④測試情況一的步驟③失敗是因為我們已經(jīng)把路徑直接指向了jmxDemo的根目錄??
16.???⑤測試情況二的步驟③失敗是因為我們只是把路徑指向了jmxDemo的上層目錄??
??? 解決如下:?
???svn://localhost/repos/jmxDemo?
??? 而不是svn://localhost/svn/repos/jmxDemo?
5 配置權限?
? 打開建立的版本庫文件夾/conf 編輯server.conf添加如下幾行:?
?配置內(nèi)容:
1.?[general]??
2.?password-db?=?passwd.conf??
3.?anon-access?=?none??
4.?auth-access?=?write??
5.?authz-db?=?authz.conf??
截圖:
? 保證文件中只有這幾行是不被注釋的?
? 在當前文件夾新建authz.conf 與passwd.conf文件?
? 編輯passwd.conf文件,添加內(nèi)容:?
配置內(nèi)容
? 注意整個串前后都不要有空格?
? 編輯authz.conf文件,添加內(nèi)容:?
配置內(nèi)容如下:
6 導入文件夾?
? 重啟服務,在需要導入的文件夾上右鍵--TortoiseSVN-> Import 輸入url:svn://localhost/repos/文件夾名?
? 此處文件夾名需要被加上,不然會把文件夾下的所有文件弄到repos文件夾下,數(shù)據(jù)亂了?
? 輸入用戶名密碼:toto?
? 導入的時候可能出現(xiàn)的問題:?
???Error: Authorization failed?
??? 解決:權限問題?
這個問題弄了蠻久,一直以為是拼寫url的問題,找了半天沒找到,然后確認問題是權限配置錯誤,查了半天也沒看出來,后來弄清楚,是因為導入涉及到在根下寫東西,所以必須要有根下的w權限,添加如下配置后問題解決:?
Java代碼??
1.?[/]??
2.?toto?=?rw??
注意:?
版本庫與導入項目最好不要重名,如果重名:?
比如把arm下的東東導入到了這個版本庫:svn://localhost/arm。?
而配置權限的時候,[arm:/]這才代表工程的根目錄,即:svn://localhost/arm?
要想配到權限到目錄下,就得這么寫:[arm:/arm/],不然出錯,且問題不容易排出?
7 check out之,svn://localhost/repos/文件夾名 注意大小寫區(qū)分,不然可能也會出現(xiàn)Error:Authorization failed錯誤?
OK,至此svn自帶服務配置完成,可以進行其他測試如update,commit等。都不會再出現(xiàn)問題。下面說明Apache配合svn提供httpsvn服務。?
下面進入第二種配置:1、安裝Apache,Apache的安裝文件時一個msi文件可以直接雙擊運行(建議路徑不要有空格與漢字)?
2、從Subversion安裝目錄的 bin 子目錄將intl3_svn.dll、libdb44.dll拷貝到Apache安裝目錄的bin文件夾?
3、從Subversion安裝目錄的 bin 子目錄將mod_authz_svn.so、mod_dav_svn.so拷貝到Apache的模塊目錄(Apache安裝目錄的???modules 文件夾)此步可省,配置的時候通過絕對路徑的方式指定也可以?
4、修改Apache的配置文件httpd.conf ,使用LoadModule來加載mod_dav_svn模塊。?
Java代碼??
1.?LoadModule?dav_module?modules/mod_dav.so??
2.?LoadModule?dav_fs_module?modules/mod_dav_fs.so??
3.???
4.?LoadModule?dav_svn_module?"svn安裝目錄/bin/mod_dav_svn.so"??
5.?LoadModule?authz_svn_module?"svn安裝目錄/bin/mod_authz_svn.so"??
注:如果拷貝了so文件到模塊目錄了,可以將上面兩個的路徑改成modules/mod_dav_svn.so的形式,否則請使用正確的絕對路徑?
請確認文件中未注釋的數(shù)據(jù)只有以上四句?
?? 確定用來作為Subversion版本庫的目錄?
?? 在配置文件最后添加如下幾行:?
Java代碼??
1.?<Location?/svn>??
2.?DAV?svn??
3.?SVNPath?f:/svn/repos??
4.?</Location>??
?? 這個配置告訴Apache首先需要啟用dav_module,然后加載dav_svn_module 。版本庫對外的URL是:?
?? http://localhost:8077/svn ,所有的Subversion版本庫在物理上位于f:/svn/repos。?
?? 配置完畢后重新啟動Apache,打開瀏覽器,輸入http://localhost:8077/svn?
??? 將會看到成功畫面:?
?? svn - Revision 10: /arm?
?? ..?
?? diary/?
?? ref/?
?? temp/?
??--------------------------------------------------------------------------------?
?? Powered by Subversion version 1.6.0(r36650).?
?? 這表示Apache 的dav_svn 模塊已經(jīng)可以正常工作了(現(xiàn)在已經(jīng)可以通過http的方式獲取svn中的內(nèi)容了)。?
???
5、測試通過之后,進行權限配置?
5.1、基本 HTTP 認證?
最簡單的客戶端認證方式是通過HTTP 基本認證機制,簡單的使用用戶名和密碼來驗證一個用戶的身份。Apache提供了一個htpasswd 工具來管理一個用戶文件,這個文件包含用戶名和加密后的密碼,這些就是你希望賦予Subversion 特別權限的用戶。htpasswd可以在Apache 的bin 安裝目錄下找到。具體使用方法如下:?
創(chuàng)建用戶文件:?
htpasswd -cm F:\svn\repos\conf\passwordfilecjy?
添加新用戶(-m表示以MD5 加密密碼):?
htpasswd [-m] F:\svn\repos\conf\passwordfiledmm?
這個地方如果加上c,會把以前的覆蓋掉?
更改用戶密碼:?
htpasswd [-m] F:\svn\repos\conf\passwordfilecjy?
刪除用戶(要用大寫的D ):?
htpasswd –D F:\svn\repos\conf\passwordfilecjy?
接下來修改httpd.conf,在Location 標簽中加入如下內(nèi)容:?
Java代碼??
1.?AuthType?Basic??
2.?AuthName?"svn?repos"??
3.?AuthUserFile?F:\svn\repos\conf\passwordfile??
4.?Require?valid-user??
說明:?
AuthType Basic:啟用基本的驗證,比如用戶名/密碼對。?
AuthName "svn repos":當一個認證對話框彈出時,出現(xiàn)在認證對話框中的信息。(最好用英文,TortoiseSVN不支持中文,安裝語言包除外。)?
AuthUserFile F:\svn\repos\conf\passwordfile:指定F:\svn\repos\conf\passwordfile為用戶文件,用來驗證用戶的用戶名及密碼。?
Require valid-user:限定用戶只有輸入正確的用戶名及密碼后才能訪問這個路徑?
重新啟動Apache ,打開瀏覽器訪問版本庫。Apache會提示你輸入用戶名和密碼來認證登陸了,現(xiàn)在只有passwd 文件中設定的用戶才可以訪問版本庫。也可以配置只有特定用戶可以訪問,替換上述"Require valid-user" 為 "Require user cjy dmm" 將只有用戶文件中的cjy 和dmm 可以訪問該版本庫。?
有的時候也許不需要這樣嚴格的訪問控制,例如大多數(shù)開源項目允許匿名的讀取操作,而只有認證用戶才允許寫操作。為了實現(xiàn)更為細致的權限認證,可以使用Limit 和LimitExcept 標簽。例如:?
Java代碼??
1.?<LimitExcept?GET?PROPFIND?OPTIONS?REPORT>??
2.???require?valid-user??
3.?</LimitExcept>??
以上配置將使匿名用戶有讀取權限,而限制只有passwd 中配置的用戶可以使用寫操作。?
如果這還不能滿足你的要求,你希望精確的控制版本庫目錄訪問,可以使用Apache 的mod_authz_svn 模塊對每個目錄進行認證操作。?
5.2、用 mod_authz_svn 進行目錄訪問控制?
首先需要讓Apache 將mod_authz_svn 模塊加載進來。在Subversion 的安裝目錄中找到mod_auth_svn 模塊,將其拷貝到Apache 安裝目錄的modules 子目錄下。修改httpd.conf 文件,添加:?
LoadModule authz_svn_modulemodules/mod_authz_svn.so?
現(xiàn)在可以在Location 標簽中使用authz 的功能了。?
注:在咱們的配置文件中已經(jīng)進行了此步驟。此處可以略過?
一個基本的authz 配置如下:?
Java代碼??
1.?#下面的/svn?表示url為:http://localhost:8077/svn/??
2.?<Location?/svn>??
3.?#先需要啟用?dav_module,然后加載?dav_svn_module??
4.?DAV?svn??
5.?#版本庫的本地路徑??
6.?SVNPath?f:\svn\repos??
7.?#下面一行是使用版本庫上一級文件夾的方式來控制所有版本庫??
8.?#SVNParentPath?e:/svn??
9.?#權限控制文件??
10.AuthzSVNAccessFile?D:\Java\apache\conf\authz.conf??
11.#?try?anonymous?access?first,?resort?to?real??
12.#?authentication?if?necessary.??
13.Satisfy?Any??
14.Require?valid-user??
15.#啟用基本的驗證,比如用戶名/密碼對。??
16.#在用戶名/密碼對文件中的用戶名才可以再authz.conf文件中配置生效??
17.AuthType?Basic??
18.AuthName?"cjy?repos"??
19.AuthUserFile?D:\Java\apache\conf\passwordfile??
20.</Location>??
AuthzSVNAccessFile 指向的是authz 的策略文件,詳細的權限控制可以在這個策略文件中指定。?
AuthUserFile 指向加密用戶文件的位置,只有在此文件中存在的用戶才可以在authz策略文件中被正確配置?
以(#)開頭的行會被忽略;在它的簡單形式里,每一小節(jié)命名一個版本庫和一個里面的路徑;認證用戶名是在每個小節(jié)中的選項名;每個選項的值描述了用戶訪問版本庫的級別:r(只讀)或者rw(讀寫),如果用戶沒有提到或者值留空,訪問是不允許的;* 表示所有用戶,用它控制匿名用戶的訪問權限;@符號區(qū)分組和用戶。如:?
Java代碼??
1.?[groups]??
2.?#?定義組??
3.?vip?=?dmm??
4.?users?=?cjy,light??
5.?[/]??
6.?*?=?r??
7.?@vip?=?rw??
8.?[/branches/dev]??
9.?@users?=?rw??
10.[/tags]??
11.cjy?=?rw??
12.[/private]??
13.*?=??
14.@vip=?r??
使用SVNParentPath 代替SVNPath 來指定多個版本庫的父目錄時,其中所有的版本庫都將按照這個策略文件配置。例如上例中?cjy將對所有版本庫里的/tags 目錄具有讀寫權限。如果要對具體每個版本庫配置,用如下的語法:?
Java代碼??
1.?[groups]??
2.?project1_vip?=?cjy,dmm??
3.?project2_vip?=?cjy,light??
4.?[repos1:/]??
5.?*?=?r??
6.?@?project1_vip?=?rw??
7.?[repos2:/]??
8.?*?=?r??
9.?@?project2_vip?=?rw??
這樣repos1的project1_vip 組只能對repos1 版本庫下的文件具有寫權限而不能修改版本庫repos2 ,同樣repos2 的project2_vip 組也不能修改repos1 版本庫的文件。?
可能出現(xiàn)的錯誤:?
1、路徑或權限不足時將出現(xiàn)錯誤信息提示:?
http://localhost (路徑不對)?
Error* PROPFIND request failed on '/' PROPFIND of '/': 200 OK?(http://localhost)?
http://localhost/svn (權限不足)?
Error* PROPFIND request failed on '/svn' PROPFIND of '/svn': 403?Forbidden(http://localhost)?
http://localhost/svn/repos (正常顯示)?
http://localhost/repos (權限不允許)?
Error* PROPFIND request failed on '/repos' PROPFIND of '/repos': 405?MethodNot Allowed (http://localhost)?
2、不啟動E:\subversion\bin\svnserve.exe,但啟動了ApacheSVN,訪問(tortoiseSVN–> Repo – browser)或提交(SVNCommit)情形如下:?
現(xiàn)象:svn://localhost/svn/repos不能訪問或提交,提示:Error* Can't connect to host 'localhost': 由于目標機器積極拒絕,無法連接。 但file:///e:/svn/repos 和http://localhost/svn/repos 可以訪問或提交。?
原因:svn://是獨立服務器svnserver 自己的協(xié)議。file:///是本地訪問,即服務器端和客戶端在一個機器上?
3、? 具體到使用so的時候報錯?Cannotload mod_dav_svn.so into server: \xd5\xd2\xb2\xbb\xb5\xbd\xd6\?
?? 解決:可能是版本的沖突,請使用2.2.9配1.6?
?? 解壓縮下載的svn,里面會有一個readme文件,打開后會列出其支持的相關應用列表,請下載相對應的apache版本?
?? 推薦2.2.9+1.6.0,版本較新,且已經(jīng)測試通過(附件中有安裝文件)?
???httpd.exe:Syntax error on line 87 of D:/Java/apache/conf/httpd.conf: Invalid LoadModulepath modules/mod_dav_svn.so"?
?? 解決:幾個DLL沖突,apache/bin/*.DLL 最終列表:?
Java代碼??
1.?[-,需要刪除的]:??
2.?[+.從Subs復制過來的]??
3.?[?,未知,可以不要]??
4.???
5.?[-]libapr-1.dll??
6.?[-]libapriconv-1.dll??
7.?[-]libaprutil-1.dll??
8.???
9.?[+]libdb44.dll??
10.[+]libsasl.dll??
11.[+]ssleay32.dll??
12.[?]intl3_svn.dll??
?? Installing the Apache2.2service?
The Apache2.2 service is successfullyinstalled.?
Testing httpd.conf....?
Errors reported here must be corrected beforethe service can be started.?
httpd.exe: Could not reliably determine theserver's fully qualified domain name?
, using 192.168.80.18 for ServerName?
(OS 10048)通常每個套接字地址(協(xié)議/網(wǎng)絡地址/端口)只允許使用一次。? : make_sock: c?
?? 解決:修改端口(在Apache配置文件中查詢Listen,改成其他端口,因為此端口已經(jīng)被占用)?
Couldnot open the requested SVN filesystem? [500, #720123]?
解決:路徑?jīng)]配正確?
是路徑的問題?
在httpd.conf里設的SVNParentPath是f:\svn?
實際的repository的路徑是f:\svn\repos\Project1?
SVNParentPath 應該設為f:\svn\repos?
問題解決?
Error* PROPFIND request failed on '/svn' PROPFIND of '/svn': could not connect toserver (http://localhost:8077)解決:服務未正常啟動?
注:附件內(nèi)容:?
分別為Apache2.2.9與svn1.6.0的安裝文件(此配合不會出現(xiàn)版本沖突)?
svnserver下權限配置(復制文件到svn版本庫的config文件夾下,重啟svnserver即可)?
Apache下全線配置(復制文件到Apache安裝文件夾的config文件夾下,重啟Apache即可)
總結
以上是生活随笔為你收集整理的svn数据仓库配置,权限配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 错误问题:OpenGL version
- 下一篇: 披萨为什么叫披萨的由来与历史?