WINDOWS下搭建SVN伺服器端的步驟分享(Subversion)

來源:互聯網
上載者:User

1、擷取svn程式

2、安裝 Subversion(以下簡稱SVN)的伺服器端和用戶端。下載下來的伺服器端是個 zip壓縮包,直接解壓縮即可,比如我解壓到 E:\subversion 。用戶端安裝檔案是個 exe 可執行檔,直接運行按提示安裝即可,用戶端安裝完成後提示重啟。

3、先建立空目錄 E:\svn\repos1 ,注意一定是要空的。然後在 repos1 檔案夾上“右鍵->TortoiseSVN->Create Repository here...”,然後可以選擇版本庫模式,這裡使用預設的FSFS即可,然後就建立了一系列檔案夾和檔案,同命令列建立的一樣。
(這一步注意svn服務端要和庫目錄在同一個盤符下面,否則提示找不到目錄)

4、進入命令列並切換到subversion的bin目錄。輸入如下命令:

svnserve.exe --daemon

svnserve 將會在連接埠 3690 等待請求,--daemon(兩個虛線)選項告訴 svnserve 以守護進程方式運行,這樣在手動終止之前不會退出。注意不要關閉命令列視窗,關閉視窗會把 svnserve 停止

5、配置使用者和許可權
用文字編輯器開啟E:\svn\repos1\conf目錄,修改svnserve.conf:
將:
# password-db = passwd
改為:
password-db = passwd

即去掉前面的 # 注釋符,注意前面不能有空格。
然後修改同目錄的passwd檔案,增加一個帳號:

將:
[users]
# harry = harryssecret
# sally = sallyssecret

增加帳號:
[users]
#harry = harryssecret
#sally = sallyssecret
test = test

6、初始化匯入

(在做這一步之前一定要執行第5步)
下面就是將我們的資料(項目)匯入到這個版本庫,以後就由版本庫管理我們的資料。我們的任何改動都回被版本庫記錄下來,甚至我們自己丟失、改錯資料時版本庫也能幫我們找回資料。
比如,我在 d:\wwwroot 下有個 guestbook 檔案夾,裡面存放的是我編寫的留言簿程式。在此檔案夾上“右鍵 -> TortoiseSVN -> Import...” ,在彈出對話方塊的“URL of repository”輸入“svn://localhost/repos1/guestbook”。在“Import message”輸入“匯入整個留言簿”作為注釋。
點 OK 後要求輸入帳號。我們在使用者名稱和密碼處都輸入 test 。完成後 guestbook 中的內容全部匯入到了 svn://localhost/svn/repo1/guestbook 。
我們看到在 e:\svn\repo1 沒有任何變化,連個 guestbook 檔案夾都沒有建立,唯一的變化就是e:\svn\repo1容量變大了。實際上我們源guestbook中的內容已經匯入 repo1 版本庫了,源 guestbook 檔案夾可以刪除了。

7、svn配置結束,這是最簡單的步驟,已經可以用了,然後把svn整合到系統服務,以後就不用一直開著命令視窗了。把以下內容粘貼到文字檔,然後重新命名檔案為:*.bat執行就好了,
sc create svnserver binpath= "C:\Program Files\Subversion\bin\svnserve.exe --service --root F:\svn" displayname= "svnserver" depend= tcpip start= auto obj= "NT AUTHORITY\NetworkService"
其中C:\Program Files\Subversion\bin\svnserve.exe 為svn的路徑
F:\svn 為版本庫的目錄
displayname= "svnserver" 為設定服務的名字
--root 是設定根目錄 比如:原來你訪問為:svn://localhost/svn
設定--root F:\svn之後縮寫為svn://localhost 這個一定要注意,否則Error: URL 'svn://localhost/svn'doesn't exist

8、svn能用了,下面是原始資料,稍微整理了一下,如果以上內容不能滿足,參考以下內容,希望沒有浪費寶貴時間。如果希望網站同步更新,使用了鉤子程式,也在下面內容。

Subvision SVN (svn的伺服器端)安裝教程:
一、準備工作
1、擷取 Subversion 伺服器程式
到官方網站(http://subversion.tigris.org/)下載最新的伺服器安裝程式。目前最新的是1.4.6版本,具體在:http://subversion.tigris.org/ser ... 100&folderID=91 ,注意找for apache 2.2.x 版本的。

2、擷取 TortoiseSVN 用戶端程式
從官方網站 http://tortoisesvn.net/downloads 擷取最新的TortoiseSVN 。TortoiseSVN 是一個用戶端程式,用來與 subversion 伺服器端通訊。Subversion 內建一個用戶端程式 svn.exe ,但 TortoiseSVN 更好操作,提高效率。

二、安裝伺服器端和用戶端
首先安裝 Apache 2.2.6 ,具體安裝方法大家參考相關資料,或者參看我寫的《Windows下安裝Apache 2.2.x》。
其次安裝 Subversion(以下簡稱SVN)的伺服器端和用戶端。下載下來的伺服器端是個 zip壓縮包,直接解壓縮即可,比如我解壓到 E:\subversion 。用戶端安裝檔案是個 exe 可執行檔,直接運行按提示安裝即可,用戶端安裝完成後提示重啟。

三、建立版本庫(Repository)
運行Subversion伺服器需要首先要建立一個版本庫(Repository)。版本庫可以看作是伺服器上集中存放和管理資料的地方。
開始建立版本庫。首先建立 e:\svn 空檔案夾作為所有版本庫的根目錄。然後,進入命令列並切換到subversion的bin目錄。輸入如下命令:

svnadmin create E:\svn\repos1

此命令在 E:\svn 下建立一個版本庫 repos1 。repos1 下面會自動產生一些檔案夾和檔案。

我們也可以使用 TortoiseSVN 圖形化的完成這一步:
先建立空目錄 E:\svn\repos1 ,注意一定是要空的。然後在 repos1 檔案夾上“右鍵->TortoiseSVN->Create Repository here...”,然後可以選擇版本庫模式,這裡使用預設的FSFS即可,然後就建立了一系列檔案夾和檔案,同命令列建立的一樣。

四、運行獨立伺服器
此時 subversion 服務還沒有開始,只是通過它的命令建立了版本庫。繼續在剛才的命令視窗輸入:

svnserve.exe –daemon

svnserve 將會在連接埠 3690 等待請求,--daemon(兩個虛線)選項告訴 svnserve 以守護進程方式運行,這樣在手動終止之前不會退出。注意不要關閉命令列視窗,關閉視窗會把 svnserve 停止。

為了驗證svnserve正常工作,使用TortoiseSVN -> Repo-browser 來查看版本庫。在彈出的 URL 對話方塊中輸入:

svn://localhost/svn/repo1

點 OK 按鈕後就可以看見 repo1 版本庫的分類樹結構了,只不過這時 repo1 是個空庫。

你也可以使用--root選項設定根位置來限制伺服器的訪問目錄,從而增加安全性和節約輸入svnserve URL的時間:

svnserve.exe --daemon --root drive:\path\to\repository

以前面的測試作為例,svnserve將會運行為:

svnserve.exe --daemon --root e:\svn

然後TortoiseSVN中的版本庫瀏覽器URL縮減為:

svn://localhost/repo1

五、配置使用者和許可權
用文字編輯器開啟E:\svn\repos1\conf目錄,修改svnserve.conf:
將:
# password-db = passwd

改為:
password-db = passwd

即去掉前面的 # 注釋符,注意前面不能有空格。
然後修改同目錄的passwd檔案,增加一個帳號:

將:
[users]
# harry = harryssecret
# sally = sallyssecret

增加帳號:
[users]
#harry = harryssecret
#sally = sallyssecret
test = test

六、初始化匯入
下面就是將我們的資料(項目)匯入到這個版本庫,以後就由版本庫管理我們的資料。我們的任何改動都回被版本庫記錄下來,甚至我們自己丟失、改錯資料時版本庫也能幫我們找回資料。
比如,我在 d:\wwwroot 下有個 guestbook 檔案夾,裡面存放的是我編寫的留言簿程式。在此檔案夾上“右鍵 -> TortoiseSVN -> Import...” ,在彈出對話方塊的“URL of repository”輸入“svn://localhost/repos1/guestbook”。在“Import message”輸入“匯入整個留言簿”作為注釋。
點 OK 後要求輸入帳號。我們在使用者名稱和密碼處都輸入 test 。完成後 guestbook 中的內容全部匯入到了 svn://localhost/svn/repo1/guestbook 。
我們看到在 e:\svn\repo1 沒有任何變化,連個 guestbook 檔案夾都沒有建立,唯一的變化就是e:\svn\repo1容量變大了。實際上我們源guestbook中的內容已經匯入 repo1 版本庫了,源 guestbook 檔案夾可以刪除了。

需要注意的是,這一步操作可以完全在另一台安裝了 TortoiseSVN 的客戶機上進行。例如運行svnserve的主機的IP是133.96.121.22,則URL部分輸入的內容就是“svn://133.96.121.22” 。

七、基本操作流程
1、取出(check out)
取出版本庫到一個工作拷貝:
來到任意空目錄下,比如在f分區建立一個空檔案夾 f:\work 。“右鍵 -> SVN Checkout”。在“URL of repository”中輸入“svn://localhost/svn/repo1/guestbook”,這樣我們就得到了一份 guestbook 中內容的工作拷貝。

2、存入(check in)/提交(commit)
在工作拷貝中作出修改並提交:
在 guestbook 工作拷貝中隨便開啟一個檔案,作出修改,然後“右鍵 -> SVN Commit... ”。這樣我們就把修改提交到了版本庫,版本庫根據情況儲存我們提交的資料。

在修改過的檔案上“右鍵 -> TortoiseSVN -> Show Log” ,可以看到對這個檔案所有的提交。在不同的 revision 條目上“右鍵 -> Compare with working copy”,我們可以比較工作拷貝的檔案和所選 revision 版本的區別。

安裝 ApacheSVN 伺服器教程:

Subversion的設計包括一個抽象的網路層,這意味著版本庫可以通過各種伺服器處理序訪問。理論上講,Subversion可以使用無限數量的網路通訊協定實現,目前實踐中存在著兩種伺服器。
? SVNServer:svnserve是一個小的(也叫輕型的)、獨立伺服器,使用自己定義的協議和用戶端。(作者註:以下稱這種伺服器為“svnserver伺服器”,上面的安裝配置就是安裝svnserver伺服器。)
? ApacheSVN:Apache是最流行的web伺服器,通過使用mod_dav_svn模組,Apache可以訪問版本庫,並且可以使用戶端使用HTTP的擴充協議WebDAV/DeltaV進行訪問。(作者註:以下稱這種伺服器為“ApacheSVN伺服器”)

通過 Http 協議訪問版本庫是 Subversion 的亮點之一。ApacheSVN伺服器具備了許多svnserve伺服器沒有的特性,使用上更加靈活,但是有一點難於配置,靈活通常會帶來複雜性。

由於 Subversion 需要版本化的控制,因此標準的 Http 協議不能滿足需求。要讓 Apache 與 Subversion 協同工作,需要使用 WebDAV(Web-based Distributed Authoring and Versioning:)Web 分布式創作和版本控制)。WebDAV 是 HTTP 1.1 的擴充,關於 WebDAV 的規範和工作原理,可以參考 IETF RFC 2518 (http://www.ietf.org/rfc/rfc2518.txt)。

一、必備條件
為了讓你的版本庫使用HTTP網路,你必需具備以下幾個條件:

1、配置好httpd 2.2.x,並且使用mod_dav啟動。
2、為mod_dav安裝mod_dav_svn外掛程式。
3、配置你的httpd.conf,使http協議能訪問版本庫。

下面以我的配置過程詳細講解。

環境:
OS:Windows XP SP2
Web:Apache 2.2.6
SVN:svn-win32-1.4.6

二、安裝
1、安裝Apache
具體安裝方法見:《Windows下安裝Apache 2.2.x》

2、安裝 Subversion
將下載下來的 svn-win32-1.4.6.zip 直接解壓即可,比如我解壓到 e:\subversion 。
從Subversion安裝目錄的 bin 子目錄將 intl3_svn.dll、libdb44.dll、mod_authz_svn.so、mod_dav_svn.so 拷貝到Apache的模組目錄(Apache 安裝目錄的 modules 檔案夾)。

三、基本的Apache配置
修改Apache的設定檔 httpd.conf ,使用LoadModule來載入mod_dav_svn模組。


#LoadModule dav_module modules/mod_dav.so

改成:
LoadModule dav_module modules/mod_dav.so

即去掉前面的“#”號。

添加:
LoadModule dav_svn_module modules/mod_dav_svn.so

一定確定它在 mod_dav 之後。

現在你已經設定了Apache和Subversion,但是Apache不知道如何處理Subversion用戶端,例如TortoiseSVN。為了讓Apache知道哪個目錄是用來作為Subversion版本庫,你需要使用編輯器(例如記事本)編輯Apache的設定檔。

在設定檔最後添加如下幾行:

<Location / repository>
DAV svn<

br /> SVNPath e:/svn/repos1
</Location>

這個配置告訴Apache首先需要啟用 dav_module,然後載入 dav_svn_module 。版本庫對外的URL是:http://伺服器IP/repository ,所有的Subversion版本庫在物理上位於e:/svn/repos1 。
配置完畢後重新啟動 Apache,開啟瀏覽器,輸入 http://伺服器IP/ repository 將會看到如下畫面:

這表示 Apache 的 dav_svn 模組已經可以正常工作了。使用者可以使用任何一種 Subversion 的用戶端通過 Http 協議訪問你的版本庫。

如果想要指定多個版本庫,可以用多個 Location 標籤,也可以使用 SVNParentPath 代替 SVNPath,例如在 e:\svn 下有多個版本庫 repos1,repos2 等等,用如下方式指定:

<Location /repository>
DAV svn
SVNParentPath e:/svn
</Location>

“SVNParentPath e:/svn ” 表示 e:\svn 下的每個子目錄都是一個版本庫。可以通過 http://伺服器IP/repository/repos1,http://伺服器IP/repository/repos2 來訪問。

現在你的版本庫任何人都可以訪問,並且有完全的寫操作許可權。也就是說任何人都可以匿名讀取,修改,提交,以及刪除版本庫中的內容(註:這時不需要配置E:\svn\repos\conf\svnserve.conf 檔案,並且也不需要啟動E:\subversion\bin\svnserve.exe。因為提交是通過Apache的dav模組處理的,而不是由svnservice處理。)。我們用 TortoiseSVN 用戶端驗證即知。
顯然大部分場合這是不符合需求的。那麼如何進行使用權限設定呢,Apache 提供了基本的使用權限設定:

四、認證選項
1、基本 HTTP 認證
最簡單的用戶端認證方式是通過 HTTP 基本認證機制,簡單的使用使用者名稱和密碼來驗證一個使用者的身份。Apache提供了一個 htpasswd 工具來管理一個使用者檔案,這個檔案包含使用者名稱和加密後的密碼,這些就是你希望賦予 Subversion 特別許可權的使用者。htpasswd 可以在 Apache 的 bin 安裝目錄下找到。具體使用方法如下:

建立使用者檔案:
htpasswd -c /etc/svn/passwordfile username

添加新使用者(-m 表示以MD5加密密碼):
htpasswd [-m] /etc/svn/passwordfile Newusername

更改使用者密碼:
htpasswd [-m] /etc/svn/passwordfile username

刪除使用者(要用大寫的 D ):
htpasswd –D /etc/svn/passwordfile username

接下來修改 httpd.conf,在 Location 標籤中加入如下內容:

AuthType Basic
AuthName "svn repos"
AuthUserFile E:/usr/Apache2.2/bin/passwd
Require valid-user

說明:
AuthType Basic:啟用基本的驗證,比如使用者名稱/密碼對。
AuthName "svn repos":當一個認證對話方塊彈出時,出現在認證對話方塊中的資訊。(最好用英文,TortoiseSVN 不支援中文,安裝語言套件除外。)
AuthUserFile E:/usr/Apache2.2/bin/passwd:指定E:\usr\Apache2.2\bin\passwd為使用者檔案,用來驗證使用者的使用者名稱及密碼。
Require valid-user:限定使用者只有輸入正確的使用者名稱及密碼後才能訪問這個路徑

重新啟動 Apache ,開啟瀏覽器訪問版本庫。Apache 會提示你輸入使用者名稱和密碼來認證登陸了,現在只有 passwd 檔案中設定的使用者才可以訪問版本庫。也可以配置只有特定使用者可以訪問,替換上述 "Require valid-user" 為 "Require user tony robert" 將只有使用者檔案中的 tony 和 robert 可以訪問該版本庫。

有的時候也許不需要這樣嚴格的存取控制,例如大多數開源項目允許匿名的讀取操作,而只有認證使用者才允許寫操作。為了實現更為細緻的許可權認證,可以使用 Limit 和 LimitExcept 標籤。例如:

<LimitExcept GET PROPFIND OPTIONS REPORT>
require valid-user
</LimitExcept>

以上配置將使匿名使用者有讀取許可權,而限制只有 passwd 中配置的使用者可以使用寫操作。
如果這還不能滿足你的要求,你希望精確的控製版本庫目錄訪問,可以使用 Apache 的 mod_authz_svn 模組對每個目錄進行認證操作。

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 配置如下:

<Location /repository>
DAV svn
SVNParentPath e:/svn

# our access control policy
AuthzSVNAccessFile E:/usr/Apache2.2/bin/accesspolicy.conf

# try anonymous access first, resort to real
# authentication if necessary.
Satisfy Any
Require valid-user

# how to authenticate a user
AuthType Basic
AuthName "Subversion repository"
AuthUserFile E:/usr/Apache2.2/bin/passwd
</Location>

AuthzSVNAccessFile 指向的是 authz 的策略檔案,詳細的許可權控制可以在這個策略檔案中指定。訪問檔案 accesspolicy.conf 的文法與svnserve.conf和 Apache 的設定檔非常相似,以(#)開頭的行會被忽略;在它的簡單形式裡,每一小節命名一個版本庫和一個裡面的路徑;認證使用者名稱是在每個小節中的選項名;每個選項的值描述了使用者訪問版本庫的層級:r(唯讀)或者rw(讀寫),如果使用者沒有提到或者值留空,訪問是不允許的; * 表示所有使用者,用它控制匿名使用者的存取權限;@符號區分組和使用者。如:

[groups]
committers = paulex, richard
developers = jimmy, michel, spark, sean

[/]
* = r
@committers = rw

[/branches/dev]
@developers = rw

[/tags]
tony = rw
[/private]
* =
@committers= r

使用 SVNParentPath 代替 SVNPath 來指定多個版本庫的父目錄時,其中所有的版本庫都將按照這個策略檔案配置。例如上例中 tony 將對所有版本庫裡的 /tags 目錄具有讀寫權限。如果要對具體每個版本庫配置,用如下的文法:

[groups]
project1_committers = paulex, richard
project2_committers = jimmy, michel, spark, tony, Robert

[repos1:/]
* = r
@ project1_committer = rw

[repos2:/]
* = r
@ project2_committer = rw

這樣 repos1的 project1_committer 組只能對 repos1 版本庫下的檔案具有寫入權限而不能修改版本庫 repos2 ,同樣 repos2 的 project2_commiter 組也不能修改 repos1 版本庫的檔案。

FAQ:

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:/// 是本地訪問,即伺服器端和用戶端在一個機器上。

文章出處:http://www.diybl.com/course/1_web/webjs/2008410/109655_2.html

http://hi.baidu.com/yuncsoft/blog/item/19b41d5168e4a81c377abed6.html
安裝svn伺服器後,為了方便啟動必須在windows下添加服務項
我們使用批處理完成,做這一步要注意,添加之後只能從註冊表刪除,如果你知道別的辦法請留言。感激不盡。

sc create svnserver binpath= "C:\Program Files\Subversion\bin\svnserve.exe --service --root F:\svn" displayname= "svnserver" depend= tcpip start= auto obj= "NT AUTHORITY\NetworkService"
其中C:\Program Files\Subversion\bin\svnserve.exe 為svn的路徑
F:\svn 為版本庫的目錄
displayname= "svnserver" 為設定服務的名字
--root 是設定根目錄 比如:原來你訪問為:svn://localhost/svn
設定--root F:\svn之後縮寫為svn://localhost 這個一定要注意,否則Error: URL 'svn://localhost/svn'doesn't exist

自動更新的配置:

開發中經常要在更新SVN的同時要更新WEB伺服器。可以用過Subversion的鉤子(Hook)來實現。

以下是Windows作業系統下的配置:

在SVN庫的hooks目錄下面建立post-commit.bat檔案,用記事本開啟,然後寫入如下的代碼:

@echo off

SET REPOS=%1
SET REV=%2

SET DIR=%REPOS%/hooks
SET PATH=%PATH%;

SET WORKING_COPY=D:\Websites\Latisse
svn update %WORKING_COPY% –username user –password pwd

此處的D:\Websites\Latisse即是WEB網站的目錄(當然得先建好這個目錄,並且從svn伺服器上籤出相應的項目)。

這樣在使用者提交完後,便會自動更新到WEB伺服器上。

需要注意到問題是:

1.不要在WEB網站檔案夾下作修改或其它操作,防止出現檔案夾被鎖。無法更新。

2.在這裡我明確寫明了使用者名稱(user),密碼(pwd)。在我設定時發現,如果沒有設定的話會出現錯誤,在直接運行這個bat檔案時是能正常執行的,但是,在Subversion提交後卻不能正常運行。並且可以看到伺服器處理序中會出現cmd,svn兩個進程,並且不會自己結束,而使用者在提交內容到伺服器後,會出現用戶端無法正常返回的問題。

3.如果運行不能正常,可以通過下面的方法看到出錯資訊:

將剛才的post-commit.bat改名為post-commit-run.bat,然後再建一個post-commit.bat的檔案,裡面寫入如下的代碼:

call %~dp0post-commit-run.bat %* > %1/hooks/post-commit.log 2>&1

這樣運行結果就會被寫入到post-commit.log檔案中,如果出錯,也可以找到出錯的原因。

svn服務端更改ip後,用戶端重新置放方法:
使用最新版本的TortoiseSVN,右鍵在工作複本的根目錄上右鍵->TortoiseSVN->重新置放(Relocate),再按提示操作就可以了..不過最好先備份..因為這個操作有一定的危險性

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.