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。
安裝
將 svn-win32-1.x.x.zip 解開至 D:\ 底下,然後把 svn-win32-1.x.x 這個目錄更名為 svn 。
在系統變數的 PATH 變數後加上「 ;D:\svn\bin 」,方便以後我們直接存取 svn 的用戶端程式。
建立檔案庫
在 D:\ 下建立一個 Repository 目錄。
執行 cmd.exe ,並切換到 D:\Repository 下。
輸入以下指令以建立一個新專案的檔案庫:
D:\Repository>svnadmin create 專案名稱專案名稱請自訂。
註冊 Subversion 服務
輸入以下指令以註冊一個新的服務:
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" 來將服務移除。在控制台的系統管理工具中,開啟服務選項。如果能找到 Subversion 這個項目,就表示註冊成功了。這時可以按下「啟動服務」來啟動 Subversion 。
記得在防火牆軟體將 TCP port 3690 打開,這樣外界才能夠透過其他的 svn 用戶端存取這部 Subversion 伺服器。
權限管理
使用 subserve.exe 時,權限的管理比較簡易,而且沒辦法加密。設定方式主要是修改 D:\Repository\專案名稱\conf\ 目錄下的三個檔案: svnserve.conf 、 authz 、 passwd 。
這三個檔案都可以用文字編輯器開啟,請現在就將它們打開,並依照以下步驟修改:
svnserve.conf 中已經有一些設定了,請參照下面的設定,把 # 註解符號移除:
[general] # 未認證者有讀的權限,可設為 none (即無權限) anon-access = read # 通過認證者有讀寫的權限 auth-access = write # 密碼檔 password-db = passwd # 權限設定檔,這裡如果不設定的話,那麼上面的 password-db 設定是不會動作的 authz-db = authz # 詢問密碼時,說明用的文字 realm = 領域說明文字修改完後存檔即可。
接著切換到 passwd 檔,以每一行「使用者名稱 = 密碼」的方式來設定使用者的帳號,例如:
user1 = pass1 user2 = pass2 user3 = pass3修改完後存檔即可。
最後切換到 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.
是不是很棒呢?
引用URL
D:\Appserv\svn\bin\svnserve.exe --service -r D:\Repository
上述路徑位置是否多了一個 Appserv ??
set APR_ICONV_PATH=d:\SVN\iconv
設定這個應該就可以了啊, LANG是*ix上需要的,Windows不需要。
瞭解~~ 感謝~~ 立刻更新~~
感謝提供~~
