You are on page 1of 11

SUBVERSION FOR WINDOWS 安裝指南

原始發表人:蔡煥麟
更新:
1. huanlin.tsai at msa.hinet.net Revision: 1.41 | 7/4/2005
(http://huanlin.dyndns.org:8080/techshare/articles/2004061303/svn_install.htm)
2. Mingster | 發表時間:12/22/2005
3. www.OOChina.Org Michael Zhou 更新為簡體版,並更正其中存在的部分錯誤。

摘要:
版本控制在軟件工程的領域中隸屬於軟件配置管理(Configuration Management)的範疇,是軟件
開發流程當中相當基本且重要的一環,因此版本控制系統可說是開發人員必備的工具之一。本文將
介紹一個開放源代碼的版 本控制系統:Subversion,說明相關工具的安裝步驟,並且透過實例操作
示範如何在 Visual Studio .NET 2003 裡面對項目進行版本管理。

Subversion 是一個自由/開放源碼的版本控制系統,也就是說 Subversion 管理著隨時間改變的文件,


這些文件放置在一個中央倉庫 (repository) 中,這個倉庫,很像一個普通的文件服務器,不過它會
記住每一次文件的變動。這樣你就可以把文件恢復到舊的版本,或是瀏覽文件的變更歷史,許多人
會把版本控 制系統想像成某種 「時光機器」。

目的:
 在 Windows2003 Server 上安裝及設定 Subversion,以便於團隊成員通過 Internet 協同開發
軟件項目,並有版本控管功能。
 在用戶端安裝 Subversion 的 客戶端工具:TortoiseSVN,它與資源管理器集成在一起,利用
GUI 方式提供了建立倉庫、以及檢入、檢出等功能。

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


TortoiseSVN 客戶端工具的安裝步驟。

1. 簡介
Subversion 是一個版本控制系統,它是根據 CVS(Concurrent Versions System)的功能為基礎來設計
,但是改進了一些 CVS 的缺點,例如:在 CVS 中移動文件目錄很不方便,Subverion 則連目錄的變
更都納入版本管理;此外,它也增加了其他的功能,例如:原子提交(如同數據庫事務的概念,提
交多個文件時,若有任何一個文件失敗,則這次提交 的所有文件都不會進入倉庫中)、支持多個
網絡協議、一致的文件差異比較(不管什麼文件類型,均使用二進制差異比較方式)等等。

由於目前手邊查到的 Subversion 文件,主要都是針對 Unix 用戶來撰寫,所以這份文件特地針對


Windows 環境下安裝 Subversion 的步驟來說明,希望通過這份文件,能夠幫助你很快的把
Subversion 安裝起來。

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

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

1.2 操作系統與軟件版本
以下是本文件使用的操作系統與軟件版本:

1. Windows 2003 Server with SP1


2. Apache HTTP Server v2.0.55
3. Subversion v1.2.3
4. TortoiseSVN 1.2.6 build 4786

2. 安裝與建立 SUBVERSION 服務器


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

2.1 安裝 APACHE HTTP SERVER


到 http://httpd.apache.org/ 下載 Apache HTTP Server 2.0 版 for Windows 的安?b 程式,我下載的文件
是 apache_2.0.50-win32-x86-no_ssl.msi。

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

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

2.2 安裝 SUBVERSION
1. 到 http://subversion.tigris.org/ 下載新版的 Subversion,你可以下載 .zip 或者打包好的自動安
裝程序,我下載的是文件 svn-1.2.3-setup.exe。
2. 下載後直接安裝,安裝過程都是下一步,沒什麼特別的。在此 Windows 安裝版增加了
Apache modules 的選項,必要的環境變量都幫你設定好了。
2.2.1 手動安裝 APACHE MODULES
1. 以下步驟敘述手動安裝 Apache modules 的程序(如果你下載的是 .zip 格式的文件,就要自
行設定)。
2. 把 $SVN_Install/bin/目錄下的 mod_dav_svn.so、 mod_authz_svn.so 複製到
$Apache2_Install/modules/目錄下。
3. 把 $SVN_Install/bin/目錄下所有的 dll 文件複製到 $Apache2_Install/bin/。
4. 接著用記事本打開 Apache HTTP Server 的 httpd.conf(在 /conf/ 目錄下),尋找一堆
LoadModule 命令,先找到以下兩行: #LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
把前面 dav_svn_module 的 '#' 符號刪除,然後把下面幾行文字加到這群 LoadModule 命令的
後面:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
5. 重新啟動 Apache HTTP Server。

問題排除

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


1. 檢查 Subversion 的路徑是否有在系統的 %PATH% 環境變量裡面。
2. 檢查你加入 httpd.conf 裡的??目是否正確,記住 mod_dav_svn.so 和 mod_authz_svn.so 必須在其他
mod_dav*.so 模組之後載入。
3. 檢查你加入的文件,若 dll 文件沒有在正確位置,將無法正常啟動。

2.3 設定 SUBVERSION 倉庫的路徑


現在要設定 Apache http.config 文件中 SVN URL 路徑與倉庫實際路徑的對應關係。對應的方式有兩種
,分別是 SVNPath 與 SVNParentPath。
2.3.1 SVNP ATH
SVNPath 適合用來個別指定倉庫的路徑,語法是:

<Location /svn/repos_name>
DAV svn
SVNPath /absolute/path/to/repository
</Location>

其 中 "/svn/repos_name" 就是用戶端訪問特定倉庫的 URI(Uniform Resource Indentifier),SVNPath


後面指定的路徑則是倉庫的絕對路徑,假設我們的倉庫實際的路徑是 d:svnMyProject,並且希望用
戶端使用 http://myserver/svn/myprj 的 URL 來訪問倉庫,那麼要加入 httpd.conf 的內容就是:

<Location /svn/myprj>
DAV svn
SVNPath d:svnMyProject
</Location>

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

2.3.2 SVNP ARENT PATH


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

<Location /svn>
DAV svn
SVNParentPath d:svn
</Location>

這表示可以讓任何人都可以通過 http://myserver/svn/<倉庫名稱> 的方式,訪問位於 d:svn 這個目錄


以下的所有倉庫。也就是說,這個設定動作只需要一次,如果使用 SVNPath,你必須為各個倉庫分
別指定對應的路徑。

以上兩種設定方式都可以,方便起見,這裡我用 SVNParentPath 來統一指定所有倉庫的父層 URL 路


徑。

將您的設定加到 Apache HTTP Server 的 httpd.conf 文件的末尾就行了。接著便可以開始建立倉庫。

(如果您是從 CollabNet 下載 Subversion 的安裝程序,那麼就可以免去上面的繁瑣步驟,安裝程序


會引導您完成上述步驟,並集成了 Apache。 www.oochina.org Michael Zhou 注)

2.4 建立 SUBVERSION 倉庫
假設我們要把所有的倉庫都放在 d:svn 目錄下,現在在要建立一個測試用的倉庫,名稱叫做
repository,命令為:

md d:svnsvnadmin create d:svnrepository

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


警告:倉庫絕對不可以在建立在任何遠程存儲介質上,例如:網絡磁帶機。

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

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

c:\
cd \temp
svn co http://localhost/svn WholeRepos

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

問題排除
如果顯示的錯誤信息是:

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

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

請檢查 Apache HTTP Server 的 httpd.conf 文件裡面的標籤所定義的位置是否跟你指定的 URL 樣式相


同,注意一定要完全相同,以上面的例子而言,你的 httpd.conf 的最後面應該會有以下文字:

<Location /svn>
DAV svn
SVNPath 指向倉庫的絕對路徑

如果顯示的錯誤信息是:

svn: PROPFIND request failed on '/svn


svn:
Could not open the requested SVN filesystem

那表示在 /svn 對應的物理目錄(即 d:/svn)下找不到所指定的目錄。

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

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

到目前為止,可以確定倉庫已經建立完成,接下來就可以檢入項目了。

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

c:
md temp
cdtemp
md ProjectA
md ProjectAtrunk
md ProjectAbranches
md ProjectAtags
svn import . http://localhost/svn -m "Initial repository layout"

提示

本 文在執行 svn 命令時,都是使用 http 協議的方式,這樣我們可以確定 Subversion 與 Apache HTTP


Server 的設定無誤,其他人就可以透過 Internet 訪問倉庫。當然你也可以用其他的協議,例如:
file:///,如果使用 file 協議,最後一行命令就變成:
svn import . file:///d:/svn -m "Initial repository layout"

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

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

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

2.5 倉庫與項目的配置方式
繼續前面的範例,如果你再檢入其他項目,例如 ProjectB,那麼整個倉庫的結構會變成這樣:
/svn/repository/
+-- ProjectA/
+-- ProjectB/

也就是說 repository 這個倉庫裡面包含了兩個項目。

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

md d:svn
svnadmin create d:svnProjectA
svnadmin create d:svnProjectB

這樣就變成有兩個倉庫了,倉庫名稱分別是 ProjectA 和 ProjectB。

提示

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

第一種方式有個比較奇怪的「功能」你應該要知道,就是一個項目的 check in 動作,也會令其他項


目的文件的版本號遞增 ,如果這不是你想要的,請選擇第二種方式,即一個倉庫只存放一個項目

2.5.1 項目的目錄結構
這裡補充說明一下 ProjectA 的目錄結構。在 ProjectA 項目的根目錄下建立的 trunk、branches、和
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。英文說在此:


http://tortoisesvn.sourceforge.net/node/137
http://tortoisesvn.sourceforge.net/docs/release/TortoiseSVN_en/ch03.html#tsv...
2. 把 zip 裡面的 mod_auth_sspi.so 解壓縮到 modules 目錄下。
把下面這行加入到 Apache 的 httpd.conf 裡面:
LoadModule sspi_auth_module modules/mod_auth_sspi.so
注意上面加入的這行一定要放在下面這行的前面:
LoadModule auth_module modules/mod_auth.so
修改 httpd.conf 的設定如下:
<Location /svn>
DAV svn
SVNParentPath d:/svn
AuthType SSPI
AuthName "Subversion 倉庫"
Require valid-user
SSPIAuth On
SSPIAuthoritative On
SSPIDomain <domaincontroller>
SSPIOfferBasic On
</Location>

其 中<domaincontroller>就是你的 Windows 域控制器的電腦名稱(例如:WIN2KDC),注意


兩邊的括號 <> 不用保留。如果你的環境沒有域控制器,就維持原來的就行了。在我的環境
下,我發現即使有域控制器,但是這裡不去設定它,還是能夠正常的驗證使用者身份。
3. 重新啟動 Apache。
4. 現在打開瀏覽器,輸入網址 http://127.0.0.1/svn/repository 看看,你應該會看到如下的驗證
畫面:
但是卻沒有出現這個畫面,而是直接顯示倉庫內容,怎麼回事?

因為我們現在是使用 Windows 帳號驗證,你目前已經登入這台機器了,而你要訪問的也是本機的


資源,換句話說,你的身份已經被驗證過了,所以就不會再要求你輸入帳號跟密碼,這是採用 SSPI
域驗證的好處。

那 麼,如果你的同事 John 的電腦有加入域,但是他平時都是登入本機,而非登入域,在訪問倉庫


時會不會要求輸入帳號密碼?答案是如果 John 登入他本機的帳號和密碼跟他在域使用者的帳號密
碼完全一樣的話,就無須再輸入密碼;相反的,如果登入本機的使用者帳號和密碼與域使用者帳號
密碼不同,第一 次訪問時就必須輸入密碼。

你可以在另一台機器上,用一個域裡沒有的使用者帳號去訪問 Subverion 倉庫,如果正確的話,應


該就會出現要求輸入帳號密碼的對話框。

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

提示

啟 用身份驗證之後,你會發現用命令行工具 svn.exe 訪問倉庫時,如果是用 http:// 協議,有些子命


令(subcommand)執行時會出現 "authorization failed" 的錯誤,這時候你可以在 svn 命令中加入 --
username 和 --password 來提供使用者稱和密碼,例如:

svn co http://myserver/svn/ --username michael --password guesswhat

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

3. 安裝客戶端:TORTOISE SVN
現 在你已經有一個可以在 http 訪問 Subversion 的服務器,可以試著在其他電腦上訪問倉庫了。如
果你習慣使用命令行工具,那就只要在用?舳說縋隕習滄? Subversion 就行了,訪問倉庫都是通過命
令行工具(主要是 svn.exe)。這裡要介紹的是一個專門為 Windows 操作系統設計的 Subversion 客
戶端:TortoiseSVN(以下簡稱 TSVN)。

3.1 安裝 TORTOISESVN
1. 到 http://tortoisesvn.tigris.org 下載最新的安裝程序,下載後直接安裝。安裝過程大都是按
下一步,只有在安裝完成後會要求你重新開機。
2. 到 http://tortoisesvn.tigris.org 下載簡體中文的?Z 言包(language pack),請注意語言包的版
本應該要跟你安裝的 TSVN 版本相同,否則最好不要安裝。語言包裝完之後,在 Windows
桌面上或任何一個文件夾上點一下鼠標右鍵,選擇 TortoiseSVN -> Settings 以打開設置對話
框,在 "Main" 標籤頁中更改 Language 設定為「中文(簡體)」,再按「確定」鈕即可。
3. 如果你是通過 proxy server 訪問 Internet,請在 TSVN 的設置對話框中,切到「網絡」標籤
頁,然後輸入你的 proxy server 相關信息,否則你將無法訪問位於 Internet 上的倉庫。
安裝完成之後,在任何目錄名稱上點一下鼠標右鍵都可以看到 TSVN 的功能選項,這也是 TSVN 方
便的地方,它不用跟開發工具集成,而是跟操作系統整合在一起,這樣不管你用什麼開發工具,都
可以輕鬆的使用 TSVN 來訪問倉庫。

接下來你可以用 TSVN 練習一下訪問之前建立好的倉庫,試著把你現有的項目檢入倉庫中,並且在


用戶端使用 TSVN 執行檢出、檢入、更新等動作。

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

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

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

 倉庫的配置方式。究竟要為每一個項目建立一個倉庫,還是把多個項目放進同一個倉庫裡

 項目目錄的結構。你要依照官方手?緣姆絞劍?在項目的根目錄下建立 trunk、branches、和
tags 嗎?
 哪些東西要放進倉庫裡?

前兩個問題你可以參考 [Subversion 電子書第五章] 的建議,再衡量自己的需求來決定。你不見得要


依照官方的建議,第一次也許採用最單純的配置方式會比較好,例如:一個倉庫就只放一個項目,
而且只把程式的源 碼放進倉庫,也不去分主線支線了,因此項目的目錄結構可以很單純,程序源
代碼的根目錄就是項目的根目錄。自己動作做過幾次以後,再去觀察倉庫的內容,就會 比較有感
覺了,然後再來考慮自己團隊的需求,自然就能找到最適合自己團隊的配置方式了。