svn 配置詳解,以及各種可能遇到的問題
花了一天時間,走了不少彎路,解決N多錯誤,終於全部完成了,記下安裝過程中遇到的各種問題,希望對初步使用svn的TX們有所幫助。
關於svn的介紹此處略過,直接進入正題。
svn服務的開啟有兩種方式,
- 自帶的svnserve服務(訪問地址類似於svn://192.168.80.18/repos/)
- 與Apache配合使用 (訪問地址類似於http://192.168.80.18:8077/repos/)
下面先進入第一種的配置:
1 安裝,解壓縮下載的svn壓縮包到對應資料夾(建議路徑不要有空格與中文)
2 建立版本庫,首先建立 f:\svn 空資料夾作為所有版本庫的根目錄。然後,進入命令列並切換到安裝subversion的bin目錄(建議將此目錄設為path)。
輸入如下命令:
svnadmin create f:\svn\repos
3 執行服務程序
在bin目錄下輸入:
svnserve -d -r f:\svn
注:-d引數效果同於--daemon
-r引數效果同於--root
svnserve 將會在埠 3690 等待請求,
--daemon(兩個短橫線)選項告訴 svnserve 以守護程序方式執行,這樣在手動終止之前不會退出。不要關閉命令列視窗,關閉視窗會把 svnserve 停止。
--root選項設定根位置來限制伺服器的訪問目錄,從而增加安全性和節約輸入svnserve URL的時間
如果不加root引數,服務url為:svn://localhost/svn/repos
而如果加上root引數,服務url為:svn://localhost/repos
此處的啟動配置會影響服務url,如果輸入url錯誤,會導致訪問的時候出現異常
4 為了驗證svnserve正常工作,使用TortoiseSVN -> Repo-browser 來檢視版本庫。在彈出的 URL 對話方塊中輸入:
svn://localhost/repos
點 OK 按鈕後就可以看見 repo1 版本庫的目錄樹結構了,只不過這時 repo1 是個空庫。
可能出現的問題:
Error: Can't connect to host '': 由於目標機器積極拒絕,無法連線。
解決:首先測試svn的3690埠是否開啟:telnet localhost 3690
如果不成功說明服務沒有被正常啟動,請參考前面步驟
可以將svn服務新增到系統服務中去,步驟如下:這樣可以避免每次重啟後需要手動執行命令的煩惱
1 在subversion的安裝路徑下,找到bin資料夾
2 新建一個setupservice.bat檔案,內容為:
Java程式碼
-
sc create svnserve binpath= "Subversion安裝路徑\bin\svnserve.exe --service -r f:\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'
解決:
Java程式碼
- A.測試1:
-
①執行svnserve -d -r f:\svn\repos\jmxDemo //指定jmxDemo根目錄為服務的根目錄
- ②執行svn://localhost,可以正常訪問修改jmxDemo
- ③執行svn://localhost/jmxDemo,出現:'svn://localhost/jmxDemo' non-existent in
- B.測試2:
- ①執行svnserve -d -r f:\svn\repos //指定jmxDemo上層目錄為服務的根目錄
- ②執行svn://localhost/jmxDemo,可以正常訪問修改Repository
- ③執行svn://localhost,出現:Error * No repository found in 'svn://localhost'
- C.結論:
- ①SVN服務啟動時指定的根目錄不同,會影響相同URL的訪問結果
- ②SVN在訪問指定路徑時會從服務的根目錄下去尋找,即基於我們啟動服務時指定的根目錄
- ③svn://localhost指向預設的jmxDemo,svn://localhost/jmxDemo指向jmxDemo
- ④測試情況一的步驟③失敗是因為我們已經把路徑直接指向了jmxDemo的根目錄
- ⑤測試情況二的步驟③失敗是因為我們只是把路徑指向了jmxDemo的上層目錄
解決如下:
svn://localhost/repos/jmxDemo
而不是 svn://localhost/svn/repos/jmxDemo
5 配置許可權
開啟建立的版本庫資料夾/conf 編輯server.conf 新增如下幾行:
Java程式碼
- [general]
- password-db = passwd.conf
- anon-access = none
- auth-access = write
- authz-db = authz.conf
保證檔案中只有這幾行是不被註釋的
在當前資料夾新建authz.conf 與passwd.conf檔案
編輯passwd.conf檔案,新增內容:
Java程式碼
- [users]
- cjy = cjy
注意整個串前後都不要有空格
編輯authz.conf檔案,新增內容:
Java程式碼
- [/]
- cjy = rw
6 匯入資料夾
重啟服務,在需要匯入的資料夾上右鍵--TortoiseSVN -> Import 輸入url:svn://localhost/repos/資料夾名
此處資料夾名需要被加上,不然會把資料夾下的所有檔案弄到repos資料夾下,資料亂了
輸入使用者名稱密碼:cjy
匯入的時候可能出現的問題:
Error: Authorization failed
解決:許可權問題
這個問題弄了蠻久,一直以為是拼寫url的問題,找了半天沒找到,然後確認問題是許可權配置錯誤,查了半天也沒看出來,後來弄清楚,是因為匯入涉及到在根下寫東西,所以必須要有根下的w許可權,新增如下配置後問題解決:
Java程式碼
- [/]
- cjy = rw
注意:
版本庫與匯入專案最好不要重名,如果重名:
比如把arm下的東東匯入到了這個版本庫:svn://localhost/arm。
而配置許可權的時候,[arm:/]這才代表工程的根目錄,即:svn://localhost/arm
要想配到許可權到目錄下,就得這麼寫: [arm:/arm/],不然出錯,且問題不容易排出
7 check out之,svn://localhost/repos/資料夾名 注意大小寫區分,不然可能也會出現Error: Authorization failed錯誤
OK,至此svn自帶服務配置完成,可以進行其他測試如update,commit等。都不會再出現問題。下面說明Apache配合svn提供http svn服務。
下面進入第二種配置: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程式碼
- LoadModule dav_module modules/mod_dav.so
- LoadModule dav_fs_module modules/mod_dav_fs.so
- LoadModule dav_svn_module "svn安裝目錄/bin/mod_dav_svn.so"
- LoadModule authz_svn_module "svn安裝目錄/bin/mod_authz_svn.so"
請確認檔案中未註釋的資料只有以上四句
確定用來作為Subversion版本庫的目錄
在配置檔案最後新增如下幾行:
Java程式碼
- <Location /svn>
- DAV svn
- SVNPath f:/svn/repos
- </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 模組已經可以正常工作了(現在已經可以通過http的方式獲取svn中的內容了)。
5、測試通過之後,進行許可權配置
5.1、基本 HTTP 認證
最簡單的客戶端認證方式是通過 HTTP 基本認證機制,簡單的使用使用者名稱和密碼來驗證一個使用者的身份。Apache提供了一個 htpasswd 工具來管理一個使用者檔案,這個檔案包含使用者名稱和加密後的密碼,這些就是你希望賦予 Subversion 特別許可權的使用者。htpasswd 可以在 Apache 的 bin 安裝目錄下找到。具體使用方法如下:
建立使用者檔案:
htpasswd -cm F:\svn\repos\conf\passwordfile cjy
新增新使用者(-m 表示以 MD5 加密密碼):
htpasswd [-m] F:\svn\repos\conf\passwordfile dmm
這個地方如果加上c,會把以前的覆蓋掉
更改使用者密碼:
htpasswd [-m] F:\svn\repos\conf\passwordfile cjy
刪除使用者(要用大寫的 D ):
htpasswd –D F:\svn\repos\conf\passwordfile cjy
接下來修改 httpd.conf,在 Location 標籤中加入如下內容:
Java程式碼
- AuthType Basic
- AuthName "svn repos"
- AuthUserFile F:\svn\repos\conf\passwordfile
- Require valid-user
AuthType Basic:啟用基本的驗證,比如使用者名稱/密碼對。
AuthName "svn repos":當一個認證對話方塊彈出時,出現在認證對話方塊中的資訊。(最好用英文,TortoiseSVN 不支援中文,安裝語言包除外。)
AuthUserFile F:\svn\repos\conf\passwordfile:指定F:\svn\repos\conf\passwordfile為使用者檔案,用來驗證使用者的使用者名稱及密碼。
Require valid-user:限定使用者只有輸入正確的使用者名稱及密碼後才能訪問這個路徑
重新啟動 Apache ,開啟瀏覽器訪問版本庫。Apache 會提示你輸入使用者名稱和密碼來認證登陸了,現在只有 passwd 檔案中設定的使用者才可以訪問版本庫。也可以配置只有特定使用者可以訪問,替換上述 "Require valid-user" 為 "Require user cjy dmm" 將只有使用者檔案中的 cjy 和 dmm 可以訪問該版本庫。
有的時候也許不需要這樣嚴格的訪問控制,例如大多數開源專案允許匿名的讀取操作,而只有認證使用者才允許寫操作。為了實現更為細緻的許可權認證,可以使用 Limit 和 LimitExcept 標籤。例如:
Java程式碼
- <LimitExcept GET PROPFIND OPTIONS REPORT>
- require valid-user
- </LimitExcept>
如果這還不能滿足你的要求,你希望精確的控制版本庫目錄訪問,可以使用 Apache 的 mod_authz_svn 模組對每個目錄進行認證操作。
5.2、用 mod_authz_svn 進行目錄訪問控制
首先需要讓 Apache 將 mod_authz_svn 模組載入進來。在 Subversion 的安裝目錄中找到 mod_auth_svn 模組,將其拷貝到 Apache 安裝目錄的 modules 子目錄下。修改 httpd.conf 檔案,新增:
LoadModule authz_svn_module modules/mod_authz_svn.so
現在可以在 Location 標籤中使用 authz 的功能了。
注:在咱們的配置檔案中已經進行了此步驟。此處可以略過
一個基本的 authz 配置如下:
Java程式碼
- #下面的/svn 表示url為:http://localhost:8077/svn/
- <Location /svn>
- #先需要啟用 dav_module,然後載入 dav_svn_module
- DAV svn
- #版本庫的本地路徑
- SVNPath f:\svn\repos
- #下面一行是使用版本庫上一級資料夾的方式來控制所有版本庫
- #SVNParentPath e:/svn
- #許可權控制檔案
- AuthzSVNAccessFile D:\Java\apache\conf\authz.conf
- # try anonymous access first, resort to real
- # authentication if necessary.
- Satisfy Any
- Require valid-user
- #啟用基本的驗證,比如使用者名稱/密碼對。
- #在使用者名稱/密碼對檔案中的使用者名稱才可以再authz.conf檔案中配置生效
- AuthType Basic
- AuthName "cjy repos"
- AuthUserFile D:\Java\apache\conf\passwordfile
- </Location>
AuthzSVNAccessFile 指向的是 authz 的策略檔案,詳細的許可權控制可以在這個策略檔案中指定。
AuthUserFile 指向加密使用者檔案的位置,只有在此檔案中存在的使用者才可以在authz策略檔案中被正確配置
以(#)開頭的行會被忽略;在它的簡單形式裡,每一小節命名一個版本庫和一個裡面的路徑;認證使用者名稱是在每個小節中的選項名;每個選項的值描述了使用者訪問版本庫的級別:r(只讀)或者rw(讀寫),如果使用者沒有提到或者值留空,訪問是不允許的; * 表示所有使用者,用它控制匿名使用者的訪問許可權;@符號區分組和使用者。如:
Java程式碼
- [groups]
- # 定義組
- vip = dmm
- users = cjy,light
- [/]
- * = r
- @vip = rw
- [/branches/dev]
- @users = rw
- [/tags]
- cjy = rw
- [/private]
- * =
- @vip= r
使用 SVNParentPath 代替 SVNPath 來指定多個版本庫的父目錄時,其中所有的版本庫都將按照這個策略檔案配置。例如上例中 cjy將對所有版本庫裡的 /tags 目錄具有讀寫許可權。如果要對具體每個版本庫配置,用如下的語法:
Java程式碼
- [groups]
- project1_vip = cjy,dmm
- project2_vip = cjy,light
- [repos1:/]
- * = r
- @ project1_vip = rw
- [repos2:/]
- * = r
- @ project2_vip = rw
可能出現的錯誤:
1、路徑或許可權不足時將出現錯誤資訊提示:
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 Method Not Allowed (http://localhost)
2、不啟動E:\subversion\bin\svnserve.exe ,但啟動了ApacheSVN ,訪問(tortoiseSVN –> Repo – browser)或提交(SVN Commit)情形如下:
現象:svn://localhost/svn/repos 不能訪問或提交,提示:Error * Can't connect to host 'localhost': 由於目標機器積極拒絕,無法連線。 但 file:///e:/svn/repos 和 http://localhost/svn/repos 可以訪問或提交。
原因:svn:// 是獨立伺服器 svnserver 自己的協議。file:/// 是本地訪問,即伺服器端和客戶端在一個機器上
3、 具體到使用so的時候報錯 Cannot load 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,版本較新,且已經測試通過(附件中有安裝檔案)
httpd.exe: Syntax error on line 87 of D:/Java/apache/conf/httpd.conf: Invalid LoadModule path modules/mod_dav_svn.so"
解決:幾個DLL衝突, apache/bin/*.DLL 最終列表:
Java程式碼
- [-,需要刪除的]:
- [+.從Subs複製過來的]
- [?,未知,可以不要]
- [-]libapr-1.dll
- [-]libapriconv-1.dll
- [-]libaprutil-1.dll
- [+]libdb44.dll
- [+]libsasl.dll
- [+]ssleay32.dll
- [?]intl3_svn.dll
Installing the Apache2.2 service
The Apache2.2 service is successfully installed.
Testing httpd.conf....
Errors reported here must be corrected before the service can be started.
httpd.exe: Could not reliably determine the server's fully qualified domain name
, using 192.168.80.18 for ServerName
(OS 10048)通常每個套接字地址(協議/網路地址/埠)只允許使用一次。 : make_sock: c
解決:修改埠(在Apache配置檔案中查詢Listen,改成其他埠,因為此埠已經被佔用)
Could not open the requested SVN filesystem [500, #720123]
解決:路徑沒配正確
是路徑的問題
在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 to server (http://localhost:8077)解決:服務未正常啟動
注:附件內容:
分別為Apache2.2.9與svn1.6.0的安裝檔案(此配合不會出現版本衝突)
svnserver下許可權配置(複製檔案到svn版本庫的config資料夾下,重啟svnserver即可)
Apache下全線配置(複製檔案到Apache安裝資料夾的config資料夾下,重啟Apache即可)
相關推薦
svn 配置詳解,以及各種可能遇到的問題
花了一天時間,走了不少彎路,解決N多錯誤,終於全部完成了,記下安裝過程中遇到的各種問題,希望對初步使用svn的TX們有所幫助。 關於svn的介紹此處略過,直接進入正題。 svn服務的開啟有兩種方式, 自帶的svnserve服務(訪問地址類似於svn://192.
動態路由協議RIP,OSPF基礎知識詳解,以及配置實驗驗證
多個 shadow star 下一跳 tle water 外交 協議 使用 動態路由:不需要手工寫路由,將各自的直連網段宣告出去,路由器之間就可以相互學習,如果路由表有變化則及時更新宣告給相鄰的路由器靜態路由 優點:精確轉發,由管理員手動控制 缺點:靈活性差動態路由特點
對稱加密詳解,以及JAVA簡單實現
turn bsp 十進制 stat mage 需要 對稱密鑰 else ges (原) 常用的加密有3種 1、正向加密,如MD5,加密後密文固定,目前還沒辦法破解,但是可以能過數據庫撞庫有一定概率找到,不過現在一般用這種方式加密都會加上鹽值。 2、對稱加密,通過一個固定
MongoDB 數據庫詳解,以及 MongoDB4.0版本的安裝
primary 所在 高可用 使用 進行 remove 存儲空間 標記 詳解 MongoDB 簡介 MongDB 是一款跨平臺,面向文檔的數據庫,可以實現高性能,高可用性,並且能夠輕松擴展,是一個基於分布式文件存儲的開源數據庫系統。在高負載的情況下,添加更多的節點,可以保
JVM效能調優監控工具jps、jstack、jmap、jhat、jstat、hprof使用詳解,以及例子
現實企業級Java開發中,有時候我們會碰到下面這些問題: OutOfMemoryError,記憶體不足 記憶體洩露 執行緒死鎖 鎖爭用(Lock Contention) Java程序消耗CPU過高 ...... 這
ASM原理詳解,以及使用,附程式碼
一、什麼是ASM ASM是一個java位元組碼操縱框架,它能被用來動態生成類或者增強既有類的功能。ASM 可以直接產生二進位制 class 檔案,也可以在類被載入入 Java 虛擬機器之前動態改變類行為。Java class 被儲存在嚴格格式定義的 .class檔案裡
int main(int argc,char* argv[])詳解,以及與int main()有什麼區別
K&R C 上5.10 命令列引數 中介紹的int main(int argc,char* argv[ ]) 在 d:\ 編寫 程式,並命名為 c.c #include int main(int argc, char ** argv) { int i;
[轉載]最詳盡的 JS 原型與原型鏈終極詳解,沒有「可能是」。(一)
三篇文章都更新完畢,完整的剖析了 JS 原型與原型鏈,希望通過這些教程能讓你對 Javascript 這門語言理解的更透徹!一. 普通物件與函式物件JavaScript 中,萬物皆物件!但物件也是有區別的。分為普通物件和函式物件,Object 、Function 是 JS 自帶的函式物件。下面舉例說明var
Ganglia監控叢集配置詳解,案例分析
Ganglia監控叢集配置詳解,案例分析 1 多播方式 多播方式配置比較簡單。 服務端配置檔案 /opt/modules/ganglia/etc/gmetad.conf (注:gmeta daemon) 注:cluster_name一定要與
Linux學習-linux系統下python升級到python3.6步驟詳解,以及遇到的問題解決
說明:一般linux會自帶pyhton2.7 1、首先下載源tar包 可利用linux自帶下載工具wget下載,如下所示: 或者直接在本機上下載以後,rx上傳。再或者下載一個WinSCP,可在介面上直接上傳檔案,比較方便 2、下載完成後到下載目錄下,解壓 tar -xzvf Python-3
localStorage、sessionStorage詳解,以及storage事件使用
有關localStorage和sessionStorage的特性。 localStorage本身帶有方法有 新增鍵值對:localStorage.setItem(key,value),如果key存在時,更新value。 獲取鍵值:localStorage.getItem(key),如果key不存在返回
Android 6.0 許可權申請詳解,以及許可權申請框架MPermissions的簡單使用
1.首先先來個框架地址:https://github.com/hongyangAndroid/MPermissions/2.真的很好用:1.in Activity:public class MainActivity extends AppCompatActivity {
jobservice與jobchedule詳解,以及如何應用
This will happen if the requirementsspecified at schedule time are no longer met. For example you may haverequested WiFi with setRequiredNetworkType(int),
win7,64位系統下iis6.0的安裝與配置詳解,解決“未發現數據源名稱並且未指定預設驅動程式”解決辦法
以下文章參考: 一、百度文庫 http://jingyan.baidu.com/article/219f4bf723bcb2de442d38ed.html 二、http://wsj781222.blog.163.com/blog/static/2684261201351
configure配置詳解,動靜態庫編譯及Cmake配置
最近在配置mapserver一整套環境,本來動態庫好好地,老闆讓搞成一個檔案,得,那基本就是靜態庫了,靜態庫合併看我發的另一個文章有說,本篇光說動靜態庫編譯。 編譯是依靠配置configure的各個屬性來配置的,一般常用的基本也就 prefix(
Spring自動注入,利用註解實現spring基本配置詳解,Spring註解快速入門
Spring註解 1.準備工作 (1)匯入common-annotations.jar (2)匯入schema檔案 檔名為spring-context-3.0.3.RELEASE.jar (3)在xml的beans節點中配置 2.xml配置工作 <?xml
DBCP連線池配置詳解,引數列表
Spring DBCP配置 <bean id=“dataSource” class=“org.apache.commons.dbcp.BasicDataSource” destroy-method=“close”> <property name=“driverClassName” v
轉載 最詳盡的 JS 原型與原型鏈終極詳解,沒有「可能是」。(一)
-s 繼續 沒有 clas 程序設計 target 普通 fop 曾經 轉自:https://www.jianshu.com/p/dee9f8b14771 三篇文章都更新完畢,完整的剖析了 JS 原型與原型鏈,希望通過這些教程能讓你對 Javascript 這門語言
Spring Cloud Eureka 常用配置詳解,建議收藏!
new enable seconds 指定 頻率 集群 系列 name tps 前幾天,棧長分享了 《Spring Cloud Eureka 註冊中心集群搭建,Greenwich 最新版!》,今天來分享下 Spring Cloud Eureka 常用的一些參數配置及說明。
Maven打jar包之maven-jar-plugin配置詳解,自動生成MANIFEST.MF檔案
一、maven-jar-plugin配置介紹 最近學習springboot多模組打jar包部署專案,用到了maven-jar-p