2006年09月15日

在 Windows 上安裝 Subversion 獨立伺服器

這裡記錄如何在 Windows 上安裝 Subversion 獨立伺服器,如果我有寫錯或觀念不對的地方,歡迎指正我。至於 Subversion 是做什麼用或是合不合用等其他問題,請自行參考 Version Control with Subversion 這篇文章 (正體中文) 。

註:會這樣設定是因為系統沒有安裝 Apache 2 ,事實上 Subversion 配合 Apache 2 在功能面上會比較多樣化。


下載

Subversion for win32

這是主要的檔案,包含伺服器程式及 Subversion 的用戶端程式。請下載 svn-win32-1.x.x.zip (Subversion 1.x.x Win32 binaries.) ,撰寫此文時為 1.4.0 。

Subversion 1.4.0 已經提供我們一個 Windows Service 型態的執行方式,後面我會介紹如何安裝它。

補述:本文剛開始撰寫時找到的資料是舊的, Windows NT 系列已經提供一個 sc (Service Controller) 指令可以幫我們把程式註冊成 Service (前提是此程式要支援 Service 型態) ;後面我們將用此方法來註冊 Service。

安裝

  1. 將 svn-win32-1.x.x.zip 解開至 D:\ 底下,然後把 svn-win32-1.x.x 這個目錄更名為 svn 。

  2. 在系統變數的 PATH 變數後加上「 ;D:\svn\bin 」,方便以後我們直接存取 svn 的用戶端程式。

建立檔案庫

  1. 在 D:\ 下建立一個 Repository 目錄。

  2. 執行 cmd.exe ,並切換到 D:\Repository 下。

  3. 輸入以下指令以建立一個新專案的檔案庫:

    D:\Repository>svnadmin create 專案名稱

    專案名稱請自訂。

註冊 Subversion 服務

  1. 輸入以下指令以註冊一個新的服務:

    D:\svn>sc create Subversion binPath= "D:\svn\bin\svnserve.exe --service -r D:\Repository" DisplayName= "Subversion" start= auto depend= TCPIP

    這樣 Service Controller 就會幫我們用 Subversion 的名稱註冊一個服務。

    註:特別要注意以下兩點:
    1. binPath 、 DisplayName 、 depend 等號的後面要多加一個空白,否則 sc 指令將不會成功運行。
    2. 如果先前已經用 Windows Resource Kit 中的 instsrv 指令註冊過服務的話,也要先用 "instsrv 服務名稱 REMOVE" 來將服務移除。

  2. 在控制台的系統管理工具中,開啟服務選項。如果能找到 Subversion 這個項目,就表示註冊成功了。這時可以按下「啟動服務」來啟動 Subversion 。

  3. 記得在防火牆軟體將 TCP port 3690 打開,這樣外界才能夠透過其他的 svn 用戶端存取這部 Subversion 伺服器。

權限管理

使用 subserve.exe 時,權限的管理比較簡易,而且沒辦法加密。設定方式主要是修改 D:\Repository\專案名稱\conf\ 目錄下的三個檔案: svnserve.conf 、 authz 、 passwd 。

這三個檔案都可以用文字編輯器開啟,請現在就將它們打開,並依照以下步驟修改:

  1. svnserve.conf 中已經有一些設定了,請參照下面的設定,把 # 註解符號移除:

    [general]
    
    # 未認證者有讀的權限,可設為 none (即無權限)
    anon-access = read
    
    # 通過認證者有讀寫的權限
    auth-access = write
    
    # 密碼檔
    password-db = passwd
    
    # 權限設定檔,這裡如果不設定的話,那麼上面的 password-db 設定是不會動作的
    authz-db = authz
    
    # 詢問密碼時,說明用的文字
    realm = 領域說明文字

    修改完後存檔即可。

  2. 接著切換到 passwd 檔,以每一行「使用者名稱 = 密碼」的方式來設定使用者的帳號,例如:

    user1 = pass1
    user2 = pass2
    user3 = pass3

    修改完後存檔即可。

  3. 最後切換到 authz ,參考以下的設定:

    # 設定群組
    [groups]
    Admin = user1,user2
    User = user3
    
    # 設定根目錄權限 (必要)
    [/]
    @Admin = rw
    * = r
    
    # 設定檔案庫權限
    [/test]
    @Admin = rw
    @User = r
    * = 

    在 gorups 區段中,可以指定哪些使用者是屬於同一群組 (以逗號分開) 。而設定根目錄及檔案庫權限時,群組名稱前要加上一個 @ 號。

    而在等號後面的 r 表示有讀取權限, w 為寫入權限,如果是空字串則表示沒有權限。

    註:我實驗的結果是根目錄的設定一定要有 (並且按照上面的設定) ,它的權限會影響底下的檔案庫權限。

基本上這三個檔案改完後,就會立即發生作用了,不必重新啟動 Subversion 。

連線測試

現在服務已經啟動了,我們可以用以下指令來取出剛剛建立的專案:

D:\>svn co svn://localhost/專案名稱 要存放的目錄

當然也可以用 TortoiseSVN 等用戶端來取得專案。注意在取出或更新專案時,要有讀取權限 (* = r) ;而在 svn commit 時,則是要有寫入權限。

中文問題

當使用 cmd.exe 執行 svn 時,有時會出現以下的亂碼:

D:\Workspace>svn co svn://localhost/test test
A    test\test.txt
?\229?\143?\150?\229?\135?\186?\228?\191?\174?\232?\168?\130?\231?\137?\136 13.

這是因為 svn 有內建中文語系,但系統的顯示上不支援;解決方式如下:

第一個方法,我們可以把 D:\svn 下的 share 目錄刪掉,再重新啟動 Subversion 服務,不過這樣就沒辦法顯示中文了。

第二個方法是由 chihwen 提供的,我們要先在系統環境變數裡加上以下三個變數:

LANG = zh_TW.UTF8
APR_ICONV_PATH = D:\svn\iconv
SVN_EDITOR = notepad.exe

註: emisjerry 指正 LANG 在 *nix 上才需要設定, Windows 不必。

其中 APR_ICONV_PATH 就是指向 Subversion 內附的 iconv 路徑。

然後重新開啟一個 cmd.exe 來用,所以剛剛的亂碼訊息就會變成:

D:\Workspace>svn co svn://localhost/test test
A    test\test.txt
取出修訂版 13.

是不是很棒呢?


Posted by jaceju at 樂多Roodo! │16:46 │回應(8)引用(0)伺服器安裝與設定
樂多分類:網路/3C 共同主題:伺服器安裝與設定 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/2150759
回應文章
在「註冊 Subversion 服務」這一段:
D:\Appserv\svn\bin\svnserve.exe --service -r D:\Repository
上述路徑位置是否多了一個 Appserv ??
Posted by chihwen at 2006年09月16日 10:14
呵呵,又被發現了~~立刻改過。
Posted by jaceju at 2006年09月16日 10:34
Subversion 處理中文的問題底下這裡有提到,可參考看看~
Windows 中使用 Subversion 處理中文
http://www.dualface.com/blog/?p=317
Posted by chihwen at 2006年09月23日 03:21
感謝 chihwen 提供資訊~~立刻補上。
Posted by jaceju at 2006年09月23日 09:08
(在DOS下執行)
set APR_ICONV_PATH=d:\SVN\iconv

設定這個應該就可以了啊, LANG是*ix上需要的,Windows不需要。
Posted by emisjerry at 2006年10月2日 21:50
To emisjerry:
瞭解~~ 感謝~~ 立刻更新~~
Posted by jaceju at 2006年10月2日 22:09
也可以用 1clicksetup 來搞定,今天碰巧發現的。

svn1clicksetup.tigris.org
http://svn1clicksetup.tigris.org/
Posted by SpongeBob at 2006年11月8日 13:40
To SpongeBob:

感謝提供~~
Posted by jaceju at 2006年11月8日 13:52