Subversion 從 1.4.x 升級到 1.5 的注意事項

先簡單提一下為什麼要把原本運作得好好的 Subversion server 1.4.x 升級到 1.5。

話說辦公室裡增加了一台新機器,這台機器也要灌 TortoiseSVN(TSVN),於是就到官網直接下載最新的 TSVN 1.5。剛開始用並沒有發現甚麼問題,直到有一個自動更新 working copy 的批次作業失敗。那個批次作業並不是用 TSVN 更新檔案,而是用 Subversion 附的 svn.exe 用戶端命令列工具執行 svn update 指令。問題在於,使用 TSVN 1.5 更新過的 working copy,其檔案格式會被自動"升級" 成新版格式(這倒不是 TSVN 的錯,而是 subversion 從 1.4 版開始就提供此「功能」了),導致舊版(1.4.x)的 svn.exe 在執行 svn update 命令時出現錯誤訊息:

svn: 本用戶端已過時,無法存取工作複本「XXX」;請取得更新版的 Subversion 用戶端。

原文訊息是:

This client is too old to work with working copy 'XXX'; please get a newer Subversion client.

也就是說,如果你原本是用 1.5 版的 svn.exe 取出 working copy,後來又用 1.4 版或更舊版本的 svn.exe 去操作那份 working copy,此時一樣會出現上面的錯誤訊息。

所以,剩下的選擇就是:要麼 server 和 client 全都維持舊的 1.4.x 版,要麼乾脆把它們全更新到 1.5。我選擇了後者。

安裝 Subversion 1.5

Subversion server 一旦安裝好並順利運作,基本上我都不太會去動它了。所以每次要安裝新版本,總是有點擔心是否有甚麼額外的設定要做,或者忘記某個重要的步驟,因而影響其他小組成員的開發工作。其中最令我擔心的,就是供 Apache 使用的 mod_auth_sspi.so 模組了(這是搭配 Apache 透過 HTTP 協定存取檔案庫時,讓 Apache 可以使用 Windows 帳號驗證的模組)。

如果你到 Subversion 官網的下載頁面,你會發現 1.5 版多了一些選擇--你可以下載不同公司打包的 Subversion 版本。我下載的是 CollabNet Subversion server 1.5(for Win32),名稱前面多了 "CollabNet",表示它是 CollabNet 打包的版本。當然你也可以選擇下載另一家公司打包的版本:VisualSVN。之所以選擇 CollabNet 版本,是因為它的 Apache 組態檔的內容格式跟舊版的比較像,我比較知道怎麼去修改它。不過,如果你是第一次安裝 Subversion,倒不妨試試 VisualSVN,它的安裝程式可以直接讓你選擇是否採用 Windows 身分驗證,並且幫你設定好 apache 的組態檔。

裝好 CollabNet Subversion server 1.5 之後,發現原本的 Apache 2.0 還是存在;它並未移除或覆蓋原本獨立安裝的 Apache,而是另外安裝了 Apache 2.2 到 subversion 目錄下:

c:\Program Files\CollabNet Subversion Server\httpd\

看一下此目錄下的 bin 和 modules 資料夾,這個版本的還是沒有內附 mod_auth_sspi.so。基於過去的經驗,不想再花太多時間嘗試錯誤,直接 Google 關鍵字「subversion 1.5 mod_auth_sspi.so」,果然,舊版的 mod_auth_sspi.so 不相容於 Apache 2.2,並且找到了這篇文章:〈Upgrading SubVersion Server and Repositories to 1.5〉,裡面有給 Apache 2.2 使用的 mod_auth_sspi.so 檔案下載連結

我下載了這個檔案之後,做了下面幾件事,Subversion 就可以正常運作了:
  1. 把 mod_auth_sspi.so 複製到 c:\Program Files\CollabNet Subversion Server\httpd\modules 目錄下。
  2. 編輯 Apache 組態檔 c:\Program Files\CollabNet Subversion Server\httpd\conf\httpd.conf,找到這行:

    LoadModule auth_basic_module modules/mod_auth_basic.so

    並且把下面這行貼到它的上方:

    LoadModule sspi_auth_module modules/mod_auth_sspi.so
  3. 把原本 Apache 2.0 的 httpd.conf 中的檔案庫路徑設定貼過來(我是貼到此檔案的最底下),例如:

    <Location /svn>
    DAV svn
    SVNParentPath d:/svn
    AuthType SSPI
    AuthName "Subversion 檔案庫"
    Require valid-user
    SSPIAuth On
    SSPIAuthoritative On
    SSPIDomain localhost
    SSPIOfferBasic On
    </Location>
  4. 重新啟動 Apache 2.2。
大功告成!中間或許有些升級的細節我沒有特別注意,基本上我只是要讓檔案庫伺服器在最短的時間內升級完畢,以減少火線作業中的開發人員的麻煩。

呼~打字的時間似乎比升級花的時間還多啊 @_@
Copyright © 2012. Huan-Lin 學習筆記 - All Rights Reserved
Powered by Blogger
Template Design by Cool Blogger Tutorials
Published by Templates Doctor