subversion摘要 本文提供一個簡易的安裝指南,說明在 Windows 環(huán)境下安裝 Subversion 伺服器的步驟,以及 TortoiseSVN 用戶端工具的安裝步驟。 1. 簡介Subversion 是一個版本控制系統(tǒng),它是根據(jù) CVS(Concurrent Versions System)的功能為基礎(chǔ)來設(shè)計,但是改進(jìn)了一些 CVS 的缺點,例如:在 CVS 中搬移檔案目錄很不方便,Subverion 則連目錄的異動都納入版本管理;此外,它也增加了其他的功能,例如:不可分割的送交(如同資料庫交易的概念,送交多個檔案時,若有任何一個檔案失敗,則這次送交的所有檔案都不會進(jìn)入檔案庫中)、支援多種網(wǎng)路協(xié)定、一致的檔案差異比對(不管什麼檔案類型,均使用二進(jìn)位差異比對方式)....等等。 由於目前手邊查到的 Subversion 文件,主要都是針對 Linux 用戶來撰寫,所以這份文件特地針對 Windows 環(huán)境下安裝 Subversion 的步驟來說明,希望透過這份文件,能夠幫助你很快的把 Subversion 安裝起來。 在安裝過程中,會需要輸入一些命令列的指令,我不會詳細(xì)解釋某些指令的用途和意義,因此你除了要熟悉 DOS 的基本指令,還應(yīng)該隨時查閱 Subversion 的電子書(有中文版),以了解 Subverion 命令列工具的使用方法。圖形化介面雖然方便,但是熟悉命令列工具的使用,才能讓你得到完全的自由。 1.1. 閱讀基本觀念如果你缺乏版本控制系統(tǒng)的基本觀念,就算能夠順利安裝好 Subversion,可能安裝完成後就不知道下一步怎麼做了。這裡只簡單的提一點必要的基礎(chǔ)觀念,記住你最終還是得閱讀 Subversion 的官方文件。 1.2. 作業(yè)環(huán)境與軟體版本以下是筆者安裝 Subverion 的作業(yè)環(huán)境與軟體版本:
本節(jié)介紹安裝 Subversion 所需的步驟,請準(zhǔn)備一臺穩(wěn)定的機器,作為 Subversion 的伺服器。 2.1. 安裝 Apache HTTP Server到 http://httpd./ 下載 Apache HTTP Server 2.0 版 for Windows 的安裝程式,我下載的檔案是 apache_2.0.53-win32-x86-no_ssl.msi。 安裝過程沒什麼特別的步驟,就不贅述了,但安裝之前請先檢查你的電腦是否有安裝 IIS,由於 Apache 預(yù)設(shè)使用 80 port,會跟 IIS 的網(wǎng)站衝突,你必須把 IIS 的 Web 站臺關(guān)閉,再安裝 Apache HTTP Server。 安裝完成以後,開啟瀏覽器,瀏覽網(wǎng)址 http://127.0.0.1/ 看看有沒有出現(xiàn)安裝成功的網(wǎng)頁。 2.2. 安裝 SubversionSubversion 1.1.x 以後的版本,在安裝過程上比之前的版本更簡單、更自動化了,安裝步驟如下:
安裝完成後,Apache HTTP Server 應(yīng)該會自動重新啟動,如果安裝程序結(jié)束,Apache HTTP Server 無法啟動,表示安裝過程有問題。 問題排除 基本上,安裝過程應(yīng)該會很順利,但我曾碰到一些很奇怪的情況,Subversion 安裝完之後,Apache 就是無法啟動,如果你也碰到這種情形,可以先 Subversion 安裝目錄下的 W32Notes.txt,裡面有一些問題排除的提示。 舊版 Subversion 的安裝方式(v1.0.x) 如果你安裝的 Subversion 是 1.0.x 的版本,或者因為某些原因想要手動設(shè)定 Subversion 與 Apache HTTP Server 的組態(tài)(例如:問題排除),可參考以下安裝步驟:
問題排除 如果 Apache HTTP Server 無法啟動,請依下列步驟檢查:
2.3. 設(shè)定 Subversion 檔案庫的路徑 現(xiàn)在要設(shè)定 URL 路徑與檔案庫實體路徑的對應(yīng)關(guān)係。對應(yīng)的方式有兩種,分別是 SVNPath 與 SVNParentPath。 2.3.1. SVNPathSVNPath 適合用來個別指定檔案庫的路徑,語法是: <Location /svn/repos_name> DAV svn SVNPath /absolute/path/to/repository </Location>其中 "/svn/repos_name" 就是用戶端存取特定檔案庫的 URI(Uniform Resource Indentifier),SVNPath 後面指定的路徑則是檔案庫的絕對路徑,假設(shè)我們的檔案庫實際存放的路徑是 d:/svn/MyProject,並且希望用戶端使用 "http://myserver/svn/myprj" 的 URL 來存取檔案庫,那麼要加入 httpd.conf 的內(nèi)容就是: <Location /svn/myprj> DAV svn SVNPath d:/svn/MyProject </Location>注意 Location 標(biāo)籤後面的 /svn/myprj 的第一個斜線不可少! 2.3.2. SVNParentPath如果你的檔案庫都集中放在某個目錄之下,例如:d:/svn,那你就可以使用 SVNParentPath 的方式指定檔案庫的根路徑,例如: <Location /svn> DAV svn SVNParentPath d:/svn </Location>這表示可以讓任何人都可以透過 http://myserver/svn/<檔案庫名稱> 的方式,存取位於 d:/svn 這個目錄以下的所有檔案庫。也就是說,這個設(shè)定動作只需要一次,如果使用 SVNPath,你必須為各個檔案庫分別指定對應(yīng)的路徑。 以上兩種設(shè)定方式都可以,方便起見,這裡我用 SVNParentPath 來統(tǒng)一指定所有檔案庫的父層 URL 路徑。 將 <Location> 的設(shè)定加到 Apache HTTP Server 的 httpd.conf 檔尾就行了(Apache 需重啟)。 接著便可以開始建立檔案庫,如果你已經(jīng)很熟悉檔案庫的建立與匯入工作,可以略過後續(xù)兩個小節(jié),直接跳到「2.6 使用 Windows 網(wǎng)域帳戶驗證」以了解如何驗證存取檔案庫的使用者身分。 2.4. 建立檔案庫延續(xù)前面的範(fàn)例設(shè)定,假設(shè)我們要把所有的檔案庫都放在 d:/svn 目錄下,現(xiàn)在要建立一個測試用的檔案庫,名稱叫做 在 repository,指令為: md d:/svn svnadmin create d:/svn/repository命令執(zhí)行完後,檢查看看 d:/svn/repository 目錄底下產(chǎn)生了哪些目錄和檔案。 警告 檔案庫絕對不可以在建立在任何遠(yuǎn)端的儲存媒體上,例如:網(wǎng)路磁碟機。
這時候你已經(jīng)建立了一個檔案庫,你可以先在本機用瀏覽器測試一下,網(wǎng)址輸入 http://svn/repository,看看能不能看到檔案庫的內(nèi)容,正常的話應(yīng)該像下圖一樣。
如果以上的測試可以通過,應(yīng)該就行了。如果你還想要測試一下能不能從檔案庫取出整個工作複本,可以執(zhí)行下列指令(非必要): c: cd\temp svn co http://localhost/svn/repository WholeRepos上述指令會切換到一個暫時的目錄 c:\temp,然後從檔案庫取出整個工作複本。最後一行指令是要 svn.exe 執(zhí)行 check out 動作(縮寫 co),如果正確的話,應(yīng)該會顯示 "Checked out revision 0." 的訊息,此時 /svn/repository 這個檔案庫底下的所有檔案目錄都已經(jīng)取出,並且複製一份到 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> 標(biāo)籤所定義的位置是否跟你指定的 URL 樣式相同,注意一定要完全相同,以上面的例子而言,你的 httpd.conf 的最後面應(yīng)該會有以下文字: <Location /svn> DAV svn SVNPath 指向檔案庫的絕對路徑 </Location>如果顯示的錯誤訊息是: svn: PROPFIND request failed on ‘/svn/repository‘ svn: Could not open the requested SVN filesystem那表示在 /svn 對應(yīng)的實體目錄(即 d:/svn)下找不到 reposiroty 這個目錄。 註:PROPFIND 是給 WebDAV 用的 HTTP method,用來從資源中取得屬性。
測試完畢就可以把 WholeRepos 這個目錄整個刪掉了。 到目前為止,可以確定檔案庫已經(jīng)建立完成,接下來就可以匯入專案了。 2.5. 匯入專案不用急著把你現(xiàn)有的正式專案匯入檔案庫,先建立一個用來測試的專案目錄就好了。我們先在 c:/temp 底下建一個 ProjectA 的專案目錄結(jié)構(gòu),參考下面的指令: c: cd temp md ProjectA md ProjectA/trunk md ProjectA/branches md ProjectA/tags svn import . http://localhost/svn/repository -m "Initial repository layout"提示 本文在執(zhí)行 svn 命令時,都是使用 http 協(xié)定的方式,這樣我們可以確知 Subversion 與 Apache HTTP Server 的設(shè)定無誤,其他人就可以透過 Internet 存取檔案庫。當(dāng)然你也可以用其他的協(xié)定,例如:file:///,如果使用 file 協(xié)定,最後一行指令就變成: svn import . file:///d:/svn/repository -m "Initial repository layout"
命令執(zhí)行無誤的話,應(yīng)會看到如下的畫面:
這時候 ProjectA 這個專案已經(jīng)匯入檔案庫了,也就是說,其他使用者可以開始存取這個檔案庫的專案取出文件和程式碼了。你可以參考 Subversion 的官方手冊中關(guān)於 svn.exe 這個用戶端命令列工具的使用方法,多練習(xí)一下取出檔案、加入檔案、以及存入檔案等指令。萬一練習(xí)的過程中發(fā)生錯誤,或者檔案庫弄亂了,你可以把整個檔案庫的目錄砍掉,回到 2.4 節(jié)重新做一遍。 以下會進(jìn)一步討論檔案庫和專案目錄結(jié)構(gòu)的安排方式,如果你急著想試試看用戶端如何存取 Subversion 檔案庫,可以先跳到2.6 節(jié)或第 3 節(jié)。 2.5.1. 檔案庫與專案的配置方式延續(xù)前面的範(fàn)例,如果你再匯入其他專案,例如 ProjectB,那麼整個檔案庫的結(jié)構(gòu)會變成這樣: /svn/repository/ +-- ProjectA/ +-- ProjectB/也就是說 repository 這個檔案庫裡面包含了兩個專案。 如果你希望為每個專案建立一個檔案庫,那麼在 2.4 節(jié)中建立檔案庫的指令就變成: md d:/svn svnadmin create d:/svn/ProjectA svnadmin create d:/svn/ProjectB這樣就變成有兩個檔案庫了,檔案庫名稱分別是 ProjectA 與 ProjectB。 提示 如果專案之間有共享的檔案,建議把這些相關(guān)的專案放進(jìn)同一個檔案庫;如果專案之間彼此毫無關(guān)係,那就採用一個檔案庫放一個專案的方式,這種方式等於專案就是檔案庫。 第一種方式有個比較奇怪的「功能」你應(yīng)該要知道,就是一個專案的 check in 動作,也會令其他專案的檔案的修訂版次遞增 ,如果這不是你想要的,請選擇第二種方式,即一個檔案庫只存放一個專案。 2.5.2. 專案的目錄結(jié)構(gòu) 這裡補充說明一下 ProjectA 的目錄結(jié)構(gòu)。在 ProjectA 專案的根目錄下建立的 trunk、branches、和 tags 這三個目錄是有特別意義的,它們的作用分別是:
這是 Subverion 官方手冊建議的目錄結(jié)構(gòu)安排方式,你可以自己決定要不要用這種配置方式,詳細(xì)說明請參考官方手冊的第五章,子標(biāo)題為 "Choosing a Repository Layout"。 提示 目錄名稱建議盡量不要用中文名稱,這樣在使用命令列時比較方便,也比較不會有問題。 2.6. 使用 Windows 網(wǎng)域帳戶驗證 照著前面的步驟做,你會發(fā)現(xiàn)存取檔案庫時都不用輸入帳號密碼,這是因為我們之前的設(shè)定沒有啟用身分驗證的功能。但是我們通常不希望所有人都能任意存取你的檔案庫,免得重要資產(chǎn)外洩,或者資料被破壞,因此了解如何加入身分驗證也是必要的。 Subversion 提供了多種驗證使用者身份的方式,這裡只介紹 Windows 身分驗證的方式,這種方式很適合用在開發(fā)團(tuán)隊成員都在區(qū)域網(wǎng)路內(nèi)的情況。請依下列步驟進(jìn)行:
好了,現(xiàn)在開啟瀏覽器,輸入網(wǎng)址 http://127.0.0.1/svn/repository 看看,你預(yù)期應(yīng)該會看到如下的驗證畫面:
但是卻沒有出現(xiàn)這個畫面,而是直接顯示檔案庫內(nèi)容,怎麼回事? 因為我們現(xiàn)在是使用 Windows 帳戶驗證,你目前已經(jīng)登入這臺機器了,而你要存取的也是本機的資源,換句話說,你的身分已經(jīng)被驗證過了,所以就不會再要求你輸入帳號跟密碼,這是採用 SSPI 網(wǎng)域驗證的好處。 那麼,如果你的同事 John 的電腦有加入網(wǎng)域,但是他平時都是登入本機,而非登入網(wǎng)域,在存取檔案庫時會不會要求輸入帳號密碼?答案是如果 John 登入他本機的帳號和密碼跟他在網(wǎng)域使用者的帳號密碼完全一樣的話,就無需再輸入密碼;相反的,如果登入本機的使用者帳號和密碼與網(wǎng)域使用者帳號密碼不同,第一次存取時就必須輸入密碼。 你可以在別臺機器上,用一個網(wǎng)域裡沒有的使用者帳號去存取 Subverion 檔案庫,如果正確的話,應(yīng)該就會出現(xiàn)要求輸入帳號密碼的視窗。 以上還只是最基本的設(shè)定,如果你希望做些進(jìn)階的設(shè)定,例如允許所有人都可以檢視檔案庫的內(nèi)容,但是不能修改;或者要加入 SSL 加密機制,建議您參考 [2] 的第三章。 提示 啟用身分驗證之後,你會發(fā)現(xiàn)用命令列工具 svn.exe 存取檔案庫時,如果是用 http:// 協(xié)定,有些子命令(subcommand)執(zhí)行時會出現(xiàn) "authorization failed" 的錯誤,這時候你可以在 svn 命令中加入 --username 和 --password 來提供使用者名稱和密碼,例如: svn co http://myserver/svn/ --username michael --password guesswhat 或者你也可以改用 file:/// 協(xié)定。 3. 安裝用戶端:TortoiseSVN 現(xiàn)在你已經(jīng)有一個可以運作的 Subversion 伺服器,可以試著在其他電腦上存取檔案庫了。如果你習(xí)慣使用命令列工具,那就只要在用戶端電腦上安裝 Subversion 就行了,存取檔案庫都是透過命令列工具(主要是 svn.exe)。這裡要介紹的是一個專門為 Windows 作業(yè)系統(tǒng)設(shè)計的 Subversion 用戶端:TortoiseSVN(以下簡稱 TSVN)。 3.1. 安裝 TortoiseSVN
安裝完成之後,在任何目錄名稱上點一下滑鼠右鍵都可以看到 TSVN 的功能選項,這也是 TSVN 方便的地方,它不用跟開發(fā)工具整合,而是跟作業(yè)系統(tǒng)整合在一起,這樣不管你用什麼開發(fā)工具,都可以輕鬆的使用 TSVN 來存取檔案庫。 接下來你可以用 TSVN 練習(xí)一下存取之前建立好的檔案庫,試著把你現(xiàn)有的專案匯入檔案庫中,並且在用戶端使用 TSVN 執(zhí)行取出、存入、更新等動作。 TSVN 雖然是用戶端工具,不過它也提供了建立檔案庫、以及匯入、匯出等功能,因此安裝在伺服器端也挺方便的。 4. 結(jié)語按照本文說明的安裝步驟,希望能讓你順利在 Windows 環(huán)境下把 Subversion 安裝起來。但是安裝成功以後,真正的工作要才開始,如果你沒有花點時間閱讀 Subversion 的相關(guān)文件,在使用版本控制系統(tǒng)的過程中,一定會碰到許多問題。 在正式將你的專案加入 Subversion 檔案庫之前,建議您多考慮一下:
前兩個問題你可以參考 [1] 的建議(第五章),再衡量自己的需求來決定。你不見得要依照官方的建議,第一次也許採用最單純的配置方式會比較好,例如:一個檔案庫就只放一個專案,而且只把程式的原始碼 放進(jìn)檔案庫,也不去分主線支線了,因此專案的目錄結(jié)構(gòu)可以很單純,程式原始碼的根目錄就是專案的根目錄。自己動手做過幾次以後, 再去觀察檔案庫的內(nèi)容,就會比較有感覺了,然後再來考慮自己團(tuán)隊的需求,自然就能找到最適合自己團(tuán)隊的配置方式了。 |
|
|