Subversion for Windows 安裝指南

Subversion for Windows 安裝指南


摘要

本文提供一個簡易的安裝指南,說明在 Windows 環境下安裝 Subversion 服務器的步驟,以及 TortoiseSVN 客戶端工具的安裝步驟。

1 簡介

Subversion 是一個版本控制系統,它是根據 CVSConcurrent Versions System)的功能爲基礎來設計,但是改進了一些 CVS 的缺點,例如:在 CVS 中移動文件目錄很不方便;此外,它也增加了其他的功能,例如:....等等。

由於目前手邊查到的 Subversion 文件,主要都是針對 Linux 用戶來撰寫,所以這份文件特地針對 Windows 環境下安裝 Subversion 的步驟來說明,希望透過這份文件,能夠幫助你很快的把 Subversion 安裝起來。

在安裝過程中,會需要輸入一些命令列的指令,我不會詳細解釋某些指令的用途和意義,因此你除了要熟悉 DOS 的基本指令,還應該隨時查閱 Subversion ,以瞭解 Subverion 命令工具的使用方法。圖形化介面雖然方便,但是熟悉命令工具的使用,才能讓你得到完全的自由。

1.1 閱讀基本概念

如果你缺乏版本控制系統的基本概念,就算能夠順利安裝好 Subversion,可能安裝完成後就不知道下一步怎麼做了。這裏只簡單的提一點必要的基礎概念,記住你最終還是得閱讀 Subversion 的官方文件。

1.2 環境與版本

以下是筆者安裝 Subverion 的環境與版本:

  • Windows 2000 Server with SP4

  • Apache HTTP Server v2.0.49

  • Subversion v1.0.4

  • TortoiseSVN 1.0.6 build 1200

2 安裝與建立 Subversion 服務器

本節介紹安裝 Subversion 所需的步驟,請準備一臺穩定的機器,作爲 Subversion 的服務器。

2.1 安裝 Apache HTTP Server

http://httpd.apache.org/ 下載 Apache HTTP Server 2.0 for Windows 的安裝程式,我下載的文件是 apache_2.0.49-win32-x86-no_ssl.msi

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

安裝完成以後,開啓瀏覽器,瀏覽網址 http://127.0.0.1/ 看看有沒有出現安裝成功的網頁。

2.2 安裝 Subversion

  1. http://subversion.tigris.org/ 下載最新版的 Subversion,你可以下載 .zip 或者打包好的自動安裝程式,我下載的是文件 svn-1.4.0-setup.exe

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

  3. <Subversion_root>/httpd/ 目錄下的 mod_dav_svn.so mod_authz_svn.so 複製到 <Apache_root>/modules/ 目錄下。

  4. <Subversion_root>/bin/ 目錄下的 libdb42.dlllibeay32.dll、以及 ssleay32.dll 複製到 <Apache_root> 底下的 bin modules 資料夾。

  5. 接著用文書編輯器開啓 Apache HTTP Server httpd.conf(在 <Apache_root>/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

問題排除

如果 Apache HTTP Server 無法啓動,請依下列步驟檢查:

  1. 檢查 Subversion 的路徑是否有在系統的 %PATH% 環境變量裏面。

  2. 檢查你加入 httpd.conf 裏的項目是否正確,記住 mod_dav_svn.so mod_authz_svn.so 必須在其他 mod_dav*.so 模組之後載入。

2.3 設定 Apache HTTP Server

用文書編輯器開啓 Apache HTTP Server httpd.conf,在文件最後面加上以下幾行:

<Location /svn>

    DAV svn

    SVNParentPath /absolute/path/to/repository

</Location>

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

<Location /svn>

    DAV svn

    SVNParentPath d:/svn

</Location>

這表示可以讓任何人都可以透過 http://myserver/svn/<文件庫名稱> 的方式,存取位於 d:/svn 這個目錄以下的所有文件庫。注意:Location 標記後面的 /svn 的第一個斜線不可少!

接下來就可以在 d:/svn 底下建立文件庫了。

提示

方便起見,這裏我用 SVNParentPath 來統一指定所有文件庫的父層 URL 路徑名稱,如果你需要爲不同的文件庫指定不同的 URL 路徑名稱,可以改用 SVNPath,詳細說明請參考 [1]

2.4 建立文件庫

假設我們要把所有的文件庫都放在 d:/svn 目錄下,現在要建立一個測試用的文件庫,名稱叫做 repository,指令爲:

md d:/svn

svnadmin create d:/svn/repository

命令執行完後,檢查看看 d:/svn/repository 目錄底下產生了哪些目錄和文件。

警告

文件庫絕對不可以在建立在任何遠端的儲存媒體上,例如:網路硬盤機。

這時候你已經建立了一個文件庫,你可以先在本機用瀏覽器測試一下,網址輸入 http://svn/repository,看看能不能看到文件庫的內容,正常的話應該像下圖一樣。

如果以上的測試可以通過,應該就行了。如果你還想要測試一下能不能從文件庫取出整個工作複本,可以執行下列指令(非必要):

c:

cd/temp

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

上述指令會切換到一個暫時的目錄 c:/temp,然後從文件庫取出整個工作複本。最後一行指令是要 svn.exe 執行 check out 動作(縮寫 co),如果正確的話,應該會顯示 "Checked out revision 0." 的信息,此時 /svn/repository 這個文件庫底下的所有文件目錄都已經取出,並且複製一份到 c:/temp/WholeRepos 目錄下了。

問題排除

如果顯示的錯誤信息是:

svn: PROPFIND request failed on '/svn/repository'

svn: PROPFIND of '/svn/repository': 405 Method Not Allowed (http://localhost)

請檢查 Apache HTTP Server httpd.conf 文件裏面的 <Location> 標記所定義的位置是否跟你指定的 URL 樣式相同,注意一定要完全相同,以上面的例子而言,你的 httpd.conf 的最後面應該會有以下文字:

<Location /svn>

    DAV svn

    SVNPath 指向文件庫的絕對路徑

</Location>

如果顯示的錯誤信息是:

svn: PROPFIND request failed on '/svn/repository'

svn:

Could not open the requested SVN filesystem

那表示在 /svn 對應的實驗目錄(即 d:/svn)下找不到 reposiroty 這個目錄。

註:PROPFIND 是給 WebDAV 用的 HTTP method,用來從資源中取得屬性。

測試完畢就可以把 WholeRepos 這個目錄整個刪掉了。

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

2.5 引入項目

不用急著把你現有的正式項目引入文件庫,先建立一個用來測試的項目目錄就好了。我們先在 c:/temp 底下建一個 ProjectA 的項目目錄結構,參考下面的指令:

c:

cd temp

md ProjectA

md ProjectA/trunk

md ProjectA/branches

md ProjectA/tags

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

提示

本文在執行 svn 命令時,都是使用 http 協議的方式,這樣我們可以確知 Subversion Apache HTTP Server 的設定無誤,其他人就可以透過 Internet 存取文件庫。當然你也可以用其他的協議,例如:file:///,如果使用 file 協議,最後一行指令就變成:

svn import . file:///d:/svn/repository -m "Initial repository layout"

命令執行無誤的話,應會看到如下的畫面:

這時候 ProjectA 這個項目已經引入文件庫了,也就是說,其他使用者可以開始存取這個文件庫的項目取出文件和程式碼了。你可以參考 Subversion 的官方手冊中關於 svn.exe 這個客戶端命令列工具的使用方法,多練習一下取出文件、加入文件、以及存入文件等指令。萬一練習的過程中發生錯誤,或者文件庫弄亂了,你可以把整個文件庫的目錄砍掉,回到 2.4 節重新做一遍。

以下會進一步討論文件庫和項目目錄結構的安排方式,如果你急著想試試看客戶端如何存取 Subversion 文件庫,可以先跳到2.6 節或第 3 節。

2.5.1 文件庫與項目的配置方式

延續前面的範例,如果你再引入其他項目,例如 ProjectB,那麼整個文件庫的結構會變成這樣:

/svn/repository/

  +-- ProjectA/

  +-- ProjectB/

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

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

md d:/svn

svnadmin create d:/svn/ProjectA

svnadmin create d:/svn/ProjectB

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

提示

如果項目之間有共享的文件,建議把這些相關的項目放進同一個文件庫;如果項目之間彼此毫無關係,那就採用一個文件庫放一個項目的方式,這種方式等於項目就是文件庫。

第一種方式有個比較奇怪的「功能」你應該要知道,就是一個項目的 check in 動作,也會令其他項目的文件的修訂版號增加 ,如果這不是你想要的,請選擇第二種方式,即一個文件庫只存放一個項目。

2.5.2 項目的目錄結構

這裏補充說明一下 ProjectA 的目錄結構。在 ProjectA 項目的根目錄下建立的 trunkbranches、和 tags 這三個目錄是有特別意義的,它們的作用分別是:

  • trunk 目錄用來存份目前項目正在進行開發的程式文件和文件(又稱爲主線,即 mainline);

  • branches 用來存放主線的各個仍在發展中的分支;

  • tags 則用來存放已經不再變動的分支,也就是其中的文件不會再修改了。

這是 Subverion 官方手建議的目錄結構安排方式,你可以自己決定要不要用這種配置方式,詳細說明請參考官方手的第五章,子標題爲 "Choosing a Repository Layout"

提示

目錄名稱建議儘量不要用中文名稱,這樣在使用命令列時比較方便,也比較不會有問題。

2.6 使用 Windows 網域帳戶驗證

照著前面的步驟做,你會發現存取文件庫時都不用輸入帳號密碼,這是因爲我們之前的設定沒有啓用身分驗證的功能。但是我們通常不希望所有人都能任意存取你的文件庫,免得重要資產外洩,或者資料被破壞,因此瞭解如何加入身分驗證也是必要的。

Serversion 提供了多種驗證使用者身份的方式,這裏只介紹 Windows 身分驗證的方式,這種方式很適合用在開發團隊成員都在區域網路內的情況。請依下列步驟進行:

  1. 取得 SSPI 模組,下載網址爲 http://tortoisesvn.tigris.org/mod_auth_sspi.zip

  2. zip 裏面的 mod_auth_sspi.so 解壓縮到 <Apache_root>/modules 目錄下。

  3. 把下面這行加入到 Apache httpd.conf 裏面:

4.         LoadModule sspi_auth_module modules/mod_auth_sspi.so

注意上面加入的這行一定要放在下面這行的前面:

LoadModule auth_module modules/mod_auth.so

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

6.         <Location /svn>

7.             DAV svn

8.             SVNParentPath d:/svn

9.             AuthType SSPI

10.        AuthName "Subversion 文件庫"

11.        Require valid-user

12.        SSPIAuth On

13.        SSPIAuthoritative On

14.        SSPIDomain <domaincontroller>

15.        SSPIOfferBasic On

</Location>

其中 <domaincontroller> 就是你的 Windows 網域控制器的電腦名稱(例如:WIN2KDC),注意兩邊的括號 <> 不用保留。如果你的環境沒有網域控制器,就維持原來的 <domaincontroller> 就行了。在我的環境下,我發現即使有網域控制器,但是這裏不去設定它,還是能夠正常的驗證使用者身分。
 

  1. 重新啓動 Apache

好了,現在開啓瀏覽器,輸入網址 http://127.0.0.1/svn/repository 看看,你預期應該會看到如下的驗證畫面:

但是卻沒有出現這個畫面,而是直接顯示文件庫內容,怎麼回事?

因爲我們現在是使用 Windows 帳戶驗證,你目前已經登入這臺機器了,而你要存取的也是本機的資源,換句話說,你的身分已經被驗證過了,所以就不會再要求你輸入帳號跟密碼,這是採用 SSPI 網域驗證的好處。

那麼,如果你的同事 John 的電腦有加入網域,但是他平時都是登入本機,而非登入網域,在存取文件庫時會不會要求輸入帳號密碼?答案是如果 John 登入他本機的帳號和密碼跟他在網域使用者的帳號密碼完全一樣的話,就無需再輸入密碼;相反的,如果登入本機的使用者帳號和密碼與網域使用者帳號密碼不同,第一次存取時就必須輸入密碼。

你可以在別臺機器上,用一個網域裏沒有的使用者帳號去存取 Subverion 文件庫,如果正確的話,應該就會出現要求輸入帳號密碼的視窗。

以上還只是最基本的設定,如果你希望做些進階的設定,例如允許所有人都可以檢視文件庫的內容,但是不能修改;或者要加入 SSL 加密機制,建議您參考 [2] 的第三章。

提示

啓用身分驗證之後,你會發現用命令列工具 svn.exe 存取文件庫時,如果是用 http:// 協議,有些子命令(subcommand)執行時會出現 "authorization failed" 的錯誤,這時候你可以在 svn 命令中加入 --username --password 來提供使用者名稱和密碼,例如:

svn co http://myserver/svn/

或者你也可以改用 file:/// 協議。

3 安裝客戶端:TortoiseSVN

現在你已經有一個可以運作的 Subversion 服務器,可以試著在其他電腦上存取文件庫了。如果你習慣使用命令列工具,那就只要在客戶端電腦上安裝 Subversion 就行了,存取文件庫都是透過命令列工具(主要是 svn.exe)。這裏要介紹的是一個專門爲 Windows 作業系統設計的 Subversion 客戶端:TortoiseSVN(以下簡稱 TSVN)。

3.1 安裝 TortoiseSVN

  1. http://tortoisesvn.tigris.org/ 下載最新的安裝程式,下載後直接安裝。安裝過程大都是按下一步,只有在問你



    安裝完成後會要求你重新開機。

  2. http://tortoisesvn.tigris.org/ 下載簡體中文的語言包(language pack),請注意語言包的版本應該要跟你安裝的 TSVN 版本相同,否則最好不要安裝。語言包裝完之後,用資源管理器在 Windows 桌面上或任何一個資料夾上點一下滑鼠右鍵,選擇 TortoiseSVN -> Settings,在 "Main" 頁夾中更改 Language 設定爲「中文(簡體)」,再按「確定」鈕即可。

安裝完成之後,在任何目錄名稱上點一下滑鼠右鍵都可以看到 TSVN 的功能選項,這也是 TSVN 方便的地方,它不用跟開發工具整合,而是跟作業系統整合在一起,這樣不管你用什麼開發工具,都可以輕鬆的使用 TSVN 來存取文件庫。

接下來你可以用 TSVN 練習一下存取之前建立好的文件庫,試著把你現有的項目引入文件庫中,並且在客戶端使用 TSVN 執行取出、存入、更新等動作。

TSVN 雖然是客戶端工具,不過它也提供了建立文件庫、以及引入、引出等功能,因此安裝在服務器端也挺方便的。

4 結語

按照本文說明的安裝步驟,希望能讓你順利在 Windows 環境下把 Subversion 安裝起來。但是安裝成功以後,真正的工作要纔開始,如果你沒有花點時間閱讀 Subversion 的相關文件,在使用版本控制系統的過程中,一定會碰到許多問題。

在正式將你的項目加入 Subversion 文件庫之前,建議您多考慮一下:

  1. 文件庫的配置方式。究竟要爲每一個項目建立一個文件庫,還是把多個項目放進同一個文件庫裏?

  2. 項目目錄的結構。你要依照官方手冊的方式,在項目的根目錄下建立 trunkbranches、和 tags 嗎?

  3. 哪些東西要放進文件庫裏?

前兩個問題你可以參考 [1] 的建議(第五章),再衡量自己的需求來決定。你不見得要依照官方的建議,第一次也許採用最單純的配置方式會比較好,例如:一個文件庫就只放一個項目,而且只把程式的原始碼 放進文件庫,也不去分主線支線了,因此項目的目錄結構可以很單純,程式原始碼的根目錄就是項目的根目錄。自己動手做過幾次以後, 再去觀察文件庫的內容,就會比較有感覺了,然後再來考慮自己團隊的需求,自然就能找到最適合自己團隊的配置方式了。

 

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