阿宽

Nothing is more powerful than habit!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

在Windows下Svn架設總結

Posted on 2008-02-28 17:14  宽田  阅读(3005)  评论(0编辑  收藏  举报

目錄:

一、Subversion是什么?
二、作業環境
三、安裝方法


一、Subversion是什么?

SVN說明書官方地址:http://www.subversion.org.cn/svnbook/

Subversion是一个自由/开源的版本控制系统。Subversion将文件存放在中心版本库里。这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况。于是我们就可以籍此将数据回复到以前的版本,并可以查看数据的更改细节。正因为如此,许多人将版本控制系统当作一种神奇的时间机器

Subversion 的版本库可以通过网络访问,从而使用户可以在不同的电脑上进行操作。从某种程度上来说,允许用户在各自的空间里修改和管理同一组数据可以促进团队协作。因为修改不再是单线进行(单线进行也就是必须一个一个进行),开发进度会进展迅速。此外,由于所有的工作都已版本化,也就不必担心由于错误的更改而影响软件 质量如果出现不正确的更改,只要撤销那一次更改操作即可。

某些版本控制系统本身也是软件配置管理(SCM)系统,这种系统经过精巧的设计,专门用来管理源代码树,并且具备许多与软件开发有关的特性比如,对编程语言的支持,或者提供程序构建工具。不过Subversion并不是这样的系统。它是一个通用系统,可以管理任何类型的文件集。对你来说,这些文件这可能是源程序而对别人,则可能是一个货物清单或者是数字电影。(摘自說明書)

二、作業環境

  本次使用的軟件版本:
    Windows Xp
    Apache V2.0.58 
    Subversion svn-1.4.2
    mod_auth_sspi-1.0.4-2.0.58
    TortoiseSVN-1.3.3 Build 6219


三、安裝方法

    1、安裝Apache HTTP Sever
     2、安裝SVN
        2.1
安裝SVN
        2.2
建立檔案庫路徑
        2.3
檔案庫
        2.4
設置驗證方式
    3、修改Apache端口
    4、安裝SVN客戶端
   
注:檔案庫為程序文件存放的地方

3.1安裝Apache HTTP Sever

安裝Apache HTTP Sever前,需要暫停IIS,因為Apache初始化時是使用80端口,會與IIS產生衝突。
        安裝並沒有什麼特別的地方,基本上按下一步就可以完成安裝。這里我也做了一個安裝過程手冊,如最下邊附件
“SVN_Setup.rar”中的“Apache_setp.doc”
        完成安裝後,在
IE中運行Http://localhost測試看是否安裝成功。如果成功會出現下圖界面。


 


.2.1安裝Subversion

    Subversion安裝過程比較簡單,只需按下一步就可以安裝完成。如最下邊附件“SVN_Setup.rar”中的“Svn_setup.doc”
     在安裝
Subversion的過程中,會出現一個Apache modules的選項讓我們選擇,會幫你們設定必要的環境參數。如果沒有此項,我們也可以手動設定。設定方法如最下邊附件“SVN_Setup.rar”中的ApacheModules_set.doc”。

3.2.2配置Subversion檔案庫路徑

     建立方式有兩種,分別是SvnPathSvnParentPath

    3.2.2.1SVNPath
         SVNPath 適合用來個別指定檔案庫的路徑。
      語法是:
          <Location /svn/repos_name>
          DAV svn
          SVNPath /absolute/path/to/repository
          </Location>

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

<Location /svn/myprj>
DAV svn
SVNPath d:"svn"MyProject
</Location>

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

3.2.2.2 SVNParentPath

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

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

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


以上兩種設定方式都可以,方便起見,這裡我用 SVNParentPath 來統一指定所有檔案庫的父層 URL 路徑。我們將以下代碼加入到Apache httpd.conf 文件尾部就行了。

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

 

3.2.3建立檔案庫

我們建好檔案庫的路徑,就要建立檔案庫。假設我們要把所有的檔案庫都放在 d:"svn 目錄下,現在要建立一個測試用的檔案庫,名稱叫做 repository,指令為:

md d:"svn
svnadmin create d:"svn"repository

    命令執行完後,檢查看看 d:"svn"repository 目錄底下產生了哪些目錄和檔案。
  注:檔案庫絕對不可以在建立在任何遠端的儲存媒體上,例如:網路磁碟機。

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





        如果已變更了
Apache端口,此的URL應為http://localhost:8880/svn/repository。建議設定完后,再變更Apache端口
        如果以上的測試可以通過,應該就行了。如果你還想要測試一下能不能從檔案庫取出整個工作複本,可以執行下列指令(非必要):

         c:
         cd"temp
         svn co http://localhost/svn/repository WholeRepos

          注:此處要用樑檔案庫的路徑才可以執行

        上述指令會切換到一個暫時的目錄 c:"temp,然後從檔案庫取出整個工作複本。最後一行指令是要 svn.exe 執行 check out 動作(縮寫 co),如果正確的話,應該會顯示 "Checked out revision 0." 的訊息,此時 /svn/ 這個檔案庫底下的所有檔案目錄都已經取出,並且複製一份到 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 檔案裡面的 標籤所定義的位置是否跟你指定的 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 這個目錄整個刪掉了。到目前為止,可以確定檔案庫已經建立完成,接下來就可以匯入專案了。


3.2.4 匯入專案

    樑檔案庫已經建好了,現在我需要將專案匯入進來。我們暫時不用急著把你現有的正式專案匯入檔案庫,先建立一個用來測試的專案目錄就好了。我們先在 c:/temp 底下建一個 ProjectA 的專案目錄結構,參考下面的指令:

    c:"
    md temp
    cd"temp
    md ProjectA
    md ProjectA"trunk
    md ProjectA"branches
    md ProjectA"tags
    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 這個專案已經匯入檔案庫了,也就是說,其他使用者可以開始存取這個檔案庫。

3.2.5 使用 Windows 網域帳戶驗證

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

    Sebversion 提供了多種驗證使用者身份的方式,這裡只介紹 Windows 身分驗證的方式,這種方式很適合用在開發團隊成員都在區域網路內的情況。請依下列步驟進行:
    取得
SSPI 模組,這里使用的是mod_auth_sspi-1.0.4-2.0.58

    把 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
SSPIOfferBasic On
</Location>

    其中 就是你的 Windows 網域控制器的電腦名稱(例如:WIN2KDC),注意兩邊的括號 <> 不用保留。如果你的環境沒有網域控制器,就維持原來的就行了。在我的環境下,我發現即使有網域控制器,但是這裡不去設定它,還是能夠正常的驗證使用者身分。
   重新啟動
Apache
   現在開啟瀏覽器,輸入網址 http://127.0.0.1/svn 看看,你應該會看到如下的驗證畫面:


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

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

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

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

提示

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

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

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

 


4、修改Apache端口。

   在Apache安裝目錄中,進入Apache Group"Apache2"conf文件夾,用記事本打開httpd.conf文件。修改其中所有80為你想要的端口。即修改以下兩處:
      Listen 80ServerName ccmcs:80
      例如改為:

     Listen 8880
     ServerName ccmcs:8880
     改好後重啟Apache,在網址中輸入http://localhost:8880/會出上圖的界面,表示修改成功。
     重新啟動
IIS,可以成功啟動IIS

4、安裝SVN客戶端
       
安裝TortoiseSVN-1.3.3 Build 6219的方法,只需按下一步即可,如最下邊附件“SVN_Setup.rar”中的TortoiseSVN_setup.doc
       TortoiseSVN能夠方便我們上傳、下載代碼。 雖然是用戶端工具,不過它也提供了建立檔案庫、以及匯入、匯出等功能,因此安裝在伺服器端也挺方便的。用法請看最下邊附件“SVN_Setup.rar”中的TortoiseSVN_use.doc”。

    這樣SVN便架設完成。



       附件:SVN_Setup.rar