在上一篇文章《用Subversion構建版本控制環境》中,我們就Subversion的特性、安裝以及如何通過各種客戶端來操作資源庫進行了詳細的介紹。文章中Subversion是以獨立的服務方式運行,我們必須借住一些特定的客戶端,例如Subvresion本身提供的客戶端命令行程序、Eclipse插件以及集成在Windows資源管理器的TortoiseSVN工具。這些工具對于開發者而言當然是必須的,但是當我們有需要將資源庫發布在互聯網上的時候,就會讓我們的用戶操作起來非常不方便,用戶可能僅僅是需要瀏覽一下項目,卻要他安裝一堆程序,這難免讓人覺得繁瑣。
怎么讓我們的用戶可以通過一些常用的程序例如資源管理器或者是瀏覽器就可以方便的瀏覽Subversion的資源庫呢?因此本文將充分的發掘Subversion在資源庫共享方面的功能,同時對Subversion在權限控制方面的內容進行詳細的介紹,同時也將詳細介紹如何將已有的CVS資源庫轉到Subversion上來。
我們曾經提到過Subversion相比較而言在共享方面的功能是大大的超過了CVS系統,它可以通過Apache服務器提供基于WebDAV/DeltaV協議的支持。有了它你就可以通過資源管理器或者瀏覽器對資源庫進行瀏覽以及操作。接下來我們將詳細介紹如何安裝并使用這個功能。(本文的所有軟件的安裝都是在Windows系統下進行)
1.?安裝Apache HTTP服務器
到http://httpd.apache.org下載最新的Apache服務器2.0.54版本的Windows安裝程序apache_2.0.54-win32-x86-no_ssl.msi,下載完畢直接安裝,使用默認設置進行安裝即可,安裝過程不再累贅。安裝完畢后使用瀏覽器打開網址http://localhost 檢查安裝是否成功完成。
如果Apache無法啟動請檢查是否機器上已經裝有IIS,把IIS停掉后再啟動Apache服務進行測試。
2.?安裝Subversion
Subversion的安裝已經在上一篇文章中詳細的介紹過了,如果你還不知道怎么安裝Subversion請參照《用Subversion構建版本控制環境》。請確保將{subversion}\bin目錄是否在系統的PATH變量中存在,如果不存在請加上。
有一點需要說明的是,使用跟Apache HTTP服務器結合的方式,你無需再啟動SVNService服務。
3.?配置Apache HTTP服務器
首先在Subversion的安裝目錄下的bin子目錄找到這樣兩個文件mod_dav_svn.so和mod_authz_svn.so,將這兩個文件復制到Apache安裝目錄下的modules子目錄,另外還有四個文件分別是intl3_svn.dll、libdb43.dll、libeay32.dll、ssleay32.dll,把這四個文件拷貝到subversion的bin目錄或者是modules目錄。
打開Apache的配置文件httpd.conf,我們需要在該配置文件中通過LoadModule指令來加載Subversion的DAV模塊,例如下面一行信息。
LoadModule dav_svn_module modules/mod_dav_svn.so
需要注意的是,因為Apache本身帶有mod_dav模塊,如果你的Apache中這個模塊是動態?加載的而不是直接編譯進Apache的可執行文件中的話,你應該確保上面的指令在mod_dav模塊后面進行加載,默認的情況下mod_dav模塊是不啟用的,你需要把它前面的注釋去掉,如下:
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
同時另外一個模塊mod_authz_svn模塊也需要進行加載,可以把它放置在mod_dav_svn后,例如:
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
接下來我們必須告訴Apache我們的資源庫所在的路徑,可以通過Location指令來完成這個設置。因為不希望為每個單獨的項目都進行單獨的設置,所以我們把所有項目都存放在統一的資源庫目錄,那么可以使用SVNParentPath指令來指定存放所有項目的路徑。在httpd.conf文件最后添加下面配置:
BR>??? DAV svn
??? SVNParentPath d:/svn/repository
這樣我們就可以通過http://myhost/svn/<項目名> 來訪問存放于資源庫d:/svn/repository中的指定項目。當然有可能你并不希望某個項目提供這樣一種訪問方式,這時候你可以使用SVNPath為每個項目進行單獨的設置,SVNPath的使用方法如下:
BR>??? DAV svn
??? SVNPath d:/svn/repository/project1
同樣把這段配置放在httpd.conf最后,重啟Apache HTTP服務即可通過http://myhost/svn/project1 來訪問project1項目的資源庫。
應該提醒的是,所有的這些訪問都是匿名的,任何用戶只要能訪問這臺機器都可以訪問你所設定的資源庫,他可以對項目進行瀏覽、檢出或者是提交,我相信你肯定不希望發生這樣的事情,接下來我們將介紹如何做好訪問的權限控制。
現在我們先試著用Subversion自帶的客戶端提交一個項目以便于接下來的測試,隨便弄一個項目,執行下列命令將項目加到資源庫中。
輸入:svn import .
http://localhost/svn
-m "test"
輸出:svn: PROPFIND request failed on '/svn'svn: PROPFIND of '/svn': 403
Forbidden (
http://localhost
)
怎么回事?403 Forbidden?原因是我們必須先給項目創建資源庫,D:\svn\repository只是我們存放所有項目的目錄,我們必須在這個目錄下創建要提交項目的資源庫。使用下面命令先給項目創建好資源庫
svnadmin create d:\svn\repository\project1
再次執行import命令后,就可以成功的導入項目。打開瀏覽器輸入網址:http://localhost/svn/project1 看看你剛提交了什么:)
現在我們回顧一下新建一個項目的過程:首先必須使用svnadmin工具創建項目的資源庫,然后再導入項目文件。
4.?訪問用戶的身份驗證
在確定對訪問用戶的權限控制之前,你必須規劃好是對整個資源庫中的所有項目還是單獨的某一個項目進行統一的身份驗證, 也就是我們前面講到的是使用SVNParentPath還是SVNPath的問題。
最簡單的身份驗證方式是使用Basic HTTP Authentication機制,該方式通過用戶名和口令對訪問用戶進行身份驗證。我們可以直接通過Apache提供的支持進行設置。Apache提供一個htpasswd工具來管理用戶名和口令。接下來我們利用這個工具來添加兩個用戶。
在命令行窗口中轉到Apache所在的目錄,假設是 D:\Apache\bin,執行下列命令
說明:創建用戶liudong1
輸入:htpasswd –cm D:\svn\svn_auth_passwd liudong1
說明:使用-c參數來創建一個passwd文件
輸出:
New password: *****
Re-type new password: *****
Adding password for user liudong1
說明:創建用戶liudong2
輸入:htpasswd –m D:\svn\svn_auth_passwd liudong2
說明:passwd文件已經創建,無需再使用-c參數
輸出:
New password: *****
Re-type new password: *****
Adding password for user liudong2
打開D:\svn\svn_auth_passwd文件,密碼使用MD5加密過了,而且同樣的密碼加密出來的內容卻不相同,估計跟用戶名也是有一點關系,內容如下:
liudong1:$apr1$5G3.....$x5jgK.sGp/Y3EFSXGMtoE.
liudong2:$apr1$cG3.....$IM5m73cqw8N8ZsMcJnKeX.
接下來我們必須告訴Apache服務器如何使用這個passwd文件,打開httpd.conf找到剛才我們添加的Location配置的位置,修改如下:
BR>DAV svn
SVNParentPath d:/svn/repository
AuthType Basic
AuthName "Subversion repository"
AuthUserFile d:/svn/svn_auth_passwd
Require valid-user
重新啟動Apache HTTP服務器,使用瀏覽器打開 http://localhost/svn/project1 你將會看到要求登錄的對話框如下圖所示(我所使用的是Opera 8瀏覽器),輸入你剛設置的用戶名和口令即可。
這就是利用Basic HTTP Authentication機制對用戶進行訪問控制的方法。你還可以使用SSL證書管理來加強Subversion的安全性(HTTPS的配置屬于Apache HTTP服務器的范疇,請參照Apache的文檔),甚至你可以對設置對某些操作才需要驗證用戶的身份以及賦予不同用戶對不同目錄的操作權限,以及如何使用Windows的域帳號進行身份的驗證。這些內容可以參考Subversion提供的文檔svn-book.pdf的第六章——服務器配置。
以上介紹的是Subversion跟Apache結合提供基于HTTP方式的共享功能以及如何對用戶進行身份的驗證。接下來我們介紹大部分CVS用戶非常關系的——如何將現有的CVS資源庫移植到Subversion下。
我們可以通過一個cvs2svn的工具來將CVS資源庫轉到Subversion服務器上。Cvs2svn是一個用Python寫的轉換腳本,它的作用是用來一次性的從CVS轉到Subversion,你不要指望它幫你同步CVS和Subversion資源庫。如果你并不需要項目的一些歷史修改信息,那么你最好先從CVS獲取最新版本,然后提交到Subversion資源庫中,這是最簡單直接而有效的方法。如果你需要保留CVS意見的所有修改記錄,那么接下來我們就是介紹如何通過cvs2svn來轉換你的資源庫。
首先我們需要安裝Python,因為cvs2svn是用Python寫的一些腳本。到 http://www.python.org/download/ 下載最新版本的Python for Windows的安裝程序python-2.4.1.msi,按照默認的方式安裝Python,假設安裝目錄是C:\Python。接下來下載cvs2svn,下載地址是:http://cvs2svn.tigris.org/servlets/ProjectDocumentList?folderID=2976,用WinRAR解壓到任一個目錄下。打開命令行窗口轉到cvs2svn所在的目錄先測試一下python,執行C:\python\python cvs2svn,這時候會輸出cvs2svn的幫助信息。
由于cvs2svn用到了GUN sort工具,因此我們還必須到http://unxutils.sourceforge.net/ 下載UnxUtils.zip,把該壓縮包下的usr/local/wbin/sort.exe文件解壓到cvs2svn目錄中;同時我們還需要下載RCS的一個工具co.exe,到http://www.cs.purdue.edu/homes/trinkle/RCS/ 下載rcs57pc1.zip,把該壓縮包中的bin/win32下的rcslib.dll以及co.exe這兩個文件同樣解壓到cvs2svn目錄中。
接下來我們開始轉換資源庫,輸入以下命令
C:\Python\python cvs2svn –s d:\svn\repository\project1 project1
其中我們假設project1是原有CVS資源庫中的一個項目。
下面是在我的機器上轉換完畢后cvs2svn顯示詳細的統計信息:
cvs2svn Statistics:
------------------
Total CVS Files:???????????????? 7
Total CVS Revisions:???????????? 7
Total Unique Tags:?????????????? 0
Total Unique Branches:?????????? 0
CVS Repos Size in KB:???????? 2261
Total SVN Commits:?????????????? 2
First Revision Date:??? Sat Sep 03 15:05:26 2005
Last Revision Date:???? Sat Sep 03 15:05:27 2005
------------------
Timings:
------------------
pass 1:???? 0 seconds
pass 2:???? 0 seconds
pass 3:???? 0 seconds
pass 4:???? 0 seconds
pass 5:???? 0 seconds
pass 6:???? 0 seconds
pass 7:???? 0 seconds
pass 8:???? 1 second
total:????? 3 seconds
轉換完畢后我們用瀏覽器打開 http://localhost/svn/project1 即可看到
點擊trunk鏈接就可以看到項目的所有文件,接下來可以把你需要轉換的項目重復執行上面的步驟即可。
以上是本文要介紹的內容,涉及實際應用中經常要面臨的問題。以獨立服務方式運行的Subversion其守護端口是3690,我們通過其跟Apache HTTP服務器結合使之可以方便的在互聯網上進行資源庫的發布;同時對于現在正在使用CVS的用戶來講可以通過cvs2svn來轉換已有的資源庫到Subversion上,這可打消CVS用戶在考慮移植時候的顧慮。
參考資料
《用Subversion構建版本控制環境》
http://www-128.ibm.com/developerworks/cn/opensource/os-subversion/
Subversion的官方網站??http://subversion.tigris.org/
CVS2SVN????http://cvs2svn.tigris.org/
Apache網站????http://httpd.apache.org/
Python官方網站???http://www.python.org/
Windows域用戶驗證模塊?http://tortoisesvn.tigris.org/mod_auth_sspi.zip
posted on 2007-03-06 23:03
小石頭 閱讀(398)
評論(0) 編輯 收藏 所屬分類:
Subversion