Windows下配置SVN+Apache

Windows下配置SVN+Apache

第一章:說明

這幾天在windows環境下配置svn,看了很多網上的安裝方法,但是因爲配置的svn和Apache的版本問題和網上寫的教程的不完整等原因,安裝了好久才得以正確安裝。

第二章:軟件版本

SVN:Setup-Subversion-1.5.3.msi

Apache: apache_2.2.10-win32-x86-no_ssl.msi

Tortiose:TortoiseSVN-1.5.5.14361-win32-svn-1.5.4.msi(安裝文件)

         LanguagePack_1.5.5.14361-win32-zh_CN.msi(中文語言包)

客戶端瀏覽器在:172.168.0.200的學習文件夾中存放。安裝客戶端瀏覽 器時先安裝TortoiseSVN-1.5.5.14361-win32-svn-1.5.4.msi,然後安裝LanguagePack語言包,安裝完 成以後,在桌面或者文件夾中的任何地方的右鍵—TortoiseSVN—setting,右邊最上邊有Language一項改爲簡體中文即可。

第三章:安裝和建立Subversion服務器

在安裝過程中最好先安裝Apache,然後在安裝Subversion,這樣svn可以自動尋找Apache的安裝目錄,自動設置需要的依賴。

3.1安裝Apache

安裝過程很簡單,不用贅述。但安裝之前請先檢查你的電腦是否有安裝 IIS,由於 Apache 預設使用 80 port,會跟 IIS 的網站衝突,你必須把 IIS 的 Web 站臺關閉,再安裝 Apache HTTP Server。

安裝完成以後,啓動Apache,開啓瀏覽器,瀏覽網址http://127.0.0.1查看有沒有安裝成功。顯示“It works!”則說明安裝成功!

3.2安裝Subversion

1. 到 http://subversion.tigris.org/ 下載最新版的Subversion,可以下載.zip 或者打包好的自動安裝程序。

 

2. 最好下載自動安裝程序,直接安裝,安裝過程都是下一步,沒什麼特別的。安裝完成後,連必要的環境變量都已經設定好了(如果下載的是 .zip 文件,就要自行設定)。

3. 把 Subversion/bin/ 目錄下的 mod_dav_svn.so 和 mod_authz_svn.so 複製到 Apache的/modules/ 目錄下。

4. 把 Subversion/bin/ 目錄下的 libdb44.dll、libeay32.dll、以及 ssleay32.dll文件 複製到 Apache目錄 底下的 bin 目錄下。

5. 然後用文本編輯器打開 Apache 的Apache/conf/httpd.conf,尋找一堆 LoadModule 指令,先找到以下兩行:

#LoadModule dav_module modules/mod_dav.so

#LoadModule dav_fs_module modules/mod_dav_fs.so

把這兩行最前面的 '#' 字元刪除,然後把下面這行加到這羣 LoadModule 指令的後面:

LoadModule dav_svn_module modules/mod_dav_svn.so

LoadModule authz_svn_module modules/mod_authz_svn.so

6. 重新啓動 Apache HTTP Server。

3現在要設定 URL 路徑與文件庫實際路徑的對應關係。對應的方式有兩種,分別是 SVNPath 與 SVNParentPath。

3.3 設定文件庫路徑

3.3.1 SVNPath

SVNPath 適合用來個別指定文件庫的路徑,語法是:

<Location /svn/repos_name>

DAV svn

SVNPath  /absolute/path/to/repository

</Location>

其中 "/svn/repos_name" 就是用戶端存取特定文件庫的 URI(Uniform Resource Indentifier),SVNPath 後面指定的路徑則是文件庫的絕對路徑,假設我們的文件庫實際存放的路徑是 d:/svn/MyRepository,並且希望用戶端使用 "http://myserver/svn/myrepos" 的 URL 來存取文件庫,那麼要加入 httpd.conf 的內容就是:

<Location /svn/myrepos>

DAV svn

SVNPath d:/svn/MyRepository

</Location>

注意 Location 標籤後面的 /svn/myrepos 的第一個斜線不可少!

3.2.2  SVNParentPath

如果你的文件庫都集中放在某個目錄之下,例如:d:/svn,那你就可以使用 SVNParentPath 的方式指定文件庫的根路徑,語法是:

<Location /svn>

DAV svn

SVNParentPath  /absolute/path/to/repository

</Location>

其中的 SVNParentPath 後面指定的路徑是文件庫的絕對路徑,假設我們的文件庫實際存放的路徑是 d:/svn,那麼要加入 httpd.conf 的內容就是:

<Location /svn>

DAV svn

SVNParentPath d:/svn

</Location>

這表示可以讓任何人都可以透過 http://myserver/svn/<文件庫名稱> 的方式,存取位於 d:/svn 這個目錄以下的所有文件庫。也就是說,這個設定動作只需要一次,如果使用 SVNPath,那麼你必須爲各個文件庫分別指定對應的路徑。

爲方便起見,我們這裏用 SVNParentPath 來統一指定所有文件庫的父層 URL 路徑。將上述的設定加到 Apache的 httpd.conf 文件尾部就行了。 接下來就可以在 d:/svn 底下建立文件庫了。

3.4 建立文件庫

     假設我們要把所有的文件庫都放在 d:/svn 目錄下,現在要建立一個測試用的文件庫,名稱叫做 repository,我們在的d:/下建立一個名爲svn文件夾,然後在cmd中輸入指令爲:svnadmin create d:/svn/repository。這時候你已經建立了一個文件庫,你可以先在本機用瀏覽器測試一下,網址輸入 http://127.0.0.1/svn/repository或http://localhost/svn/repository,看看能不能看到文件庫的內容,正常的話應該顯示“It works!”

如果以上的測試可以通過,應該就行了,假如你的局域網中安裝svn的服務器IP地址是172.168.0.200,則在局域網中另外一臺機器(客戶端)上輸入http://172.168.0.200/svn/repository,應該是可以看到同樣畫面。

如果你想要測試一下能否從文件庫取出整個工作副本(此操作並非必需),則可以進入目標目錄後(假設爲d:/svn_temp)執行以下指令從文件庫取出整個工作副本:

svn co http://localhost/svn/repository WholeRepos

該指令是要 svn.exe 執行 check out 動作(縮寫 co),如果正確的話,應該會顯示 "Checked out revision 0." 的信息,此時 d:/svn/repository 這個文件庫底下的所有文件目錄都已經取出,並且複製了一份到d:/svn_temp/WholeRepos 目錄下了。如果安裝了客戶端瀏覽器,那麼在要存放工作副本的文件夾中執行“檢出”命令同樣完成這個動作。

到目前爲止,可以確定文件庫已經建立完成,接下來就可以引入項目了。

3.5 引入項目

    假設我們現在有一個測試項目,項目目錄位於d:/svn_temp/projectA,底下有下列子目錄(當然也可以拷貝些文件到這些子目錄中):

trunk

branches

tags

則進入d:/svn_temp/projectA目錄後執行以下指令就可以將測試項目projectA引入到文件庫d:/svn/repository/projectA中。

svn import . http://localhost/svn/repository/projectA -m "Initial repository layout",與在客戶端瀏覽器中使用“導入”操作一樣的效果。

如果我們要在repository文件庫中引入多個項目,比如再將d:/svn_temp/projectB項目放到repository/projectB目錄下,則進入projectB目錄,用下面的命令引入projectB:

svn import  http://localhost/svn/repository/projectB -m "Initial repository layout"

引入projectB後,repository文件庫的目錄結構就會變成這樣:

/svn/repository/

+-- projectA/

+-- projectB/

也就是說 repository 這個文件庫裏面包含了兩個項目。

如果你希望爲每個項目建立一個文件庫,那麼在 2.4 節中建立文件庫的指令就變成:

svnadmin create d:/svn/projectA

svnadmin create d:/svn/projectB

這樣就變成有兩個文件庫了,文件庫名稱分別是 ProjectA 與 ProjectB。

3.6基本(Basic)訪問控制

在之前的設定中沒有啓用身分驗證的功能,可以實現訪問都不需要帳戶和密碼,但是我們通常不希望所有人都能任意存取你的文件庫,免得重要資料外泄,或者資料被破壞,因此瞭解如何加入身分驗證也是必要的。 Sebversion 提供了多種驗證使用者身份的方式,這裏介紹Basic訪問控制,按下列步驟進行:

1. 修改 httpd.conf 的 <Location> ,設定如下:

<Location /svn>

DAV svn

SVNParentPath d:/svn

AuthName "Subversion repository"

AuthzSVNAccessFile "d:/svn/accessfile.txt"

Require valid-user

Satisfy Any

# The following is Basic authentication setting

AuthType Basic

AuthUserFile "d:/svn/passwd.txt"

</Location>

其中AuthzSVNAccessFile指定了文件庫訪問政策文件,Require valid-use表示只有經過認證的用戶纔可以訪問, Satisfy Any表示允許匿名訪問(要與後面提到的*參數配套使用),AuthUserFile用來指示使用htpasswd創建的密碼文件的位置。

如果你想用不同的訪問政策文件和密碼文件控制不同的文件庫,那麼可以在httpd.conf中寫多個<Location></Location>模塊,並用SVNPath指定各文件庫的絕對路徑(參考2.3.2)。

 

2. 用Apache的htpasswd指令生成用戶名和密碼:

htpasswd -cm d:/svn/passwd.txt username1

htpasswd -m d:/svn/passwd.txt username2

htpasswd的參數-c是創建文件的意思,故只在首次使用,僅使用-m參數時也可用來修改密碼。

3. 配置文件庫訪問政策文件(假設repository文件庫下已經建立了projectA和projectB),如:

[repository:/]

username1 = rw

[repository:/projectA]

username2 = r

[repository:/projectA/trunk]

username1 =

username2 = rw

[repository:/projectB]

* = r

[repository:/projectB/trunk]

username1 =

 

小節名稱中冒號前面的文件庫名稱不要輕易省略,省略就 代表是針對所有文件庫,這樣是很爲危險的,*號代表所有用戶,等於號後面爲空表示沒有權限,mod_authz_svn模塊首先會找到匹配自己的目錄,然 後是父目錄,父目錄的父目錄,依次下去,並會以最近找到的描述爲準。另外,你還可以定義一組用戶,然後按組進行權限配置,比如:

[groups]

department_1 = username1, username2

department_2 = username3, username4, username5

[repository:/projectA]

@department_1 = r

@department_2 = rw

 

4. 重新啓動 Apache(注意,對httpd.conf的修改必須重啓Apache後纔會生效),開啓瀏覽器,輸入網址 http://127.0.0.1/svn/repository 看看,你預期應該會看到驗證畫面。

   5. 如果要讓用戶能遠程修改自己的Subversion密碼,也很簡單,有人已經把你做了相關工作了,可訪問http://bbs.iusesvn.com/thread-20-1-1.html去下載Apache20Passwd.rar或Apache22Passwd.rar, (1)\將文件Apache2xPasswd.cgi及Apache2xPasswd.cgi.ini複製到Apache的CGI腳本目錄下,通常是 cgi-bin目錄。(這句話中的x請用相應的版本代替,如for apache2.0,則爲Apache20Passwd.cgi)。(2)、如果是for apache2.2版本,複製apache的bin目錄下libapr-1.dll、libapriconv-1.dll、libaprutil- 1.dll到Apache2xPasswd.cgi所在的目錄(3)、修改配置文件Apache2xPasswd.cgi.ini中 auth_user_file路徑,如下

[path]

auth_user_file=這裏改爲你的Subversion所用的AuthUserFile全路徑,如C:\SVN_repos\passwd

(4)、現在訪問你服務器的http://localhost/cgi-bin/Apache2xPasswd.cgi就可以看到修改subversion密碼的界面了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章