2.4 建立Subversion檔案庫
假設(shè)我們要把所有的檔案庫都放在 d:svn 目錄下,現(xiàn)在要建立一個測試用的檔案庫,名稱叫做 repository,指令為:
md d:svnsvnadmin create d:svn
epository
命令執(zhí)行完后,檢查看看 d:svn
epository 目錄底下產(chǎn)生了哪些目錄和檔案。
警告:檔案庫不可以在建立在任何遠端的儲存媒體上,例如:網(wǎng)路磁碟機。
這時候你已經(jīng)建立了一個檔案庫,你可以先在本機用瀏覽器測試一下,網(wǎng)址輸入http://localhost/svn/repository,看看能不能看到檔案庫的內(nèi)容,正常的話應(yīng)該像下圖一樣。
如果以上的測試可以通過,應(yīng)該行了。如果你還想要測試一下能不能從檔案庫取出整個工作復本,可以執(zhí)行下列指令(非必要):
c:cd empsvn co http://localhost/svn WholeRepos上 述指令會切換到一個暫時的目錄 c: emp,然后從檔案庫取出整個工作復本。后一行指令是要 svn.exe 執(zhí)行 check out 動作(縮寫 co),如果正確的話,應(yīng)該會顯示 "Checked out revision 0." 的訊息,此時 /svn/ 這個檔案庫底下的所有檔案目錄都已經(jīng)取出,并且復制一份到 c: empWholeRepos 目錄下了。
問題排除
如果顯示的錯誤訊息是:
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 的后面應(yīng)該會有以下文字:
<Location /svn>DAV svnSVNPath 指向檔案庫的路徑
如果顯示的錯誤訊息是:
svn: PROPFIND request failed on '/svnsvn:Could not open the requested SVN filesystem
那表示在 /svn 對應(yīng)的實體目錄(即 d:/svn)下找不到所指定的目錄。
注:PROPFIND 是給 WebDAV 用的 HTTP method,用來從資源中取得屬性。
測試完畢可以把 WholeRepos 這個目錄整個刪掉了。
到目前為止,可以確定檔案庫已經(jīng)建立完成,接下來可以匯入專案了。
2.4.1 匯入專案
不用急著把你現(xiàn)有的正式專案匯入檔案庫,先建立一個用來測試的專案目錄好了。我們先在 c:/temp 底下建一個 ProjectA 的專案目錄結(jié)構(gòu),參考下面的指令:
c:md tempcd empmd ProjectAmd ProjectA runkmd ProjectAranchesmd ProjectA agssvn import . http://localhost/svn -m "Initial repository layout"
提示
本文在執(zhí)行 svn 命令時,都是使用 http 協(xié)定的方式,這樣我們可以確知 Subversion 與 Apache HTTP Server 的設(shè)定無誤,其他人可以透過 Internet 存取檔案庫。當然你也可以用其他的協(xié)定,例如:file:///,如果使用 file 協(xié)定,后一行指令變成:
svn import .file:///d:/svn -m "Initial repository layout"
這時候 ProjectA 這個專案已經(jīng)匯入檔案庫了,也是說,其他使用者可以開始存取這個檔案庫的專案取出文件和程式碼了。你可以參考 Subversion 的官方手冊中關(guān)于 svn.exe 這個用戶端命令列工具的使用方法,多練習一下取出檔案、加入檔案、以及存入檔案等指令。萬一練習的過程中發(fā)生錯誤,或者檔案庫弄亂了,你可以把整個檔案庫 的目錄砍掉,回到 2.4 節(jié)重新做一遍。
以下會進一步討論檔案庫和專案目錄結(jié)構(gòu)的安排方式,如果你急著想試試看用戶端如何存取 Subversion 檔案庫,可以先跳到2.6 節(jié)或第 3 節(jié)。
2.5 檔案庫與專案的配置方式
延續(xù)前面的范例,如果你再匯入其他專案,例如 ProjectB,那么整個檔案庫的結(jié)構(gòu)會變成這樣:
/svn/repository/+-- ProjectA/+-- ProjectB/
也是說 repository 這個檔案庫里面包含了兩個專案。
如果你希望為每個專案建立一個檔案庫,那么在 2.4 節(jié)中建立檔案庫的指令變成:
md d:svnsvnadmin create d:svnProjectAsvnadmin create d:svnProjectB
這樣變成有兩個檔案庫了,檔案庫名稱分別是 ProjectA 與 ProjectB。
提示
如果專案之間有共享的檔案,建議把這些相關(guān)的專案放進同一個檔案庫;如果專案之間彼此毫無關(guān)系,那采用一個檔案庫放一個專案的方式,這種方式等于專案是檔案庫。
第一種方式有個比較奇怪的「功能」你應(yīng)該要知道,是一個專案的 check in 動作,也會令其他專案的檔案的修訂版次遞增 ,如果這不是你想要的,請選擇第二種方式,即一個檔案庫只存放一個專案。
2.5.1 專案的目錄結(jié)構(gòu)
這里補充說明一下 ProjectA 的目錄結(jié)構(gòu)。在 ProjectA 專案的根目錄下建立的 trunk、branches、和 tags 這三個目錄是有特別意義的,它們的作用分別是:
trunk 目錄用來存份目前專案正在進行開發(fā)的程式檔案和文件(又稱為主線,即 mainline);
branches 用來存放主線的各個仍在發(fā)展中的分支;
tags 則用來存放已經(jīng)不再變動的分支,也是其中的檔案不會再修改了。
這是 Subverion 官方手冊建議的目錄結(jié)構(gòu)安排方式,你可以自己決定要不要用這種配置方式,詳細說明請參考官方手冊的第五章,子標題為 "Choosing a Repository Layout"。
提示
目錄名稱建議盡量不要用中文名稱,這樣在使用命令列時比較方便,也比較不會有問題。
2.6 使用 Windows網(wǎng)域帳戶驗證
照著前面的步驟做,你會發(fā)現(xiàn)存取檔案庫時都不用輸入帳號密碼,這是因為我們之前的設(shè)定沒有啟用身分驗證的功能。但是我們通常不希望所有人都能任意存取你的檔案庫,免得重要資產(chǎn)外泄,或者資料被破壞,因此了解如何加入身分驗證也是必要的。
Serversion 提供了多種驗證使用者身份的方式,這里只介紹 Windows 身分驗證的方式,這種方式很適合用在開發(fā)團隊成員都在區(qū)域網(wǎng)路內(nèi)的情況。請依下列步驟進行:
取得 SSPI 模組,下載網(wǎng)址為 http://tortoisesvn.tigris.org/mod_auth_sspi.zip。英文說明在此:http://tortoisesvn.sourceforge.net/node/137http://tortoisesvn.sourceforge.net/docs/release/TortoiseSVN_en/ch03.html#tsvn-serversetup-apache-5
把 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 的設(shè)定如下:<Location /svn>DAV svnSVNParentPath d:/svnAuthType SSPIAuthName "Subversion 檔案庫"Require valid-userSSPIAuth OnSSPIAuthoritative OnSSPIDomainSSPIOfferBasic On</Location>其 中 是你的 Windows 網(wǎng)域控制器的電腦名稱(例如:WIN2KDC),注意兩邊的括號 <> 不用保留。如果你的環(huán)境沒有網(wǎng)域控制器,維持原來的行了。在我的環(huán)境下,我發(fā)現(xiàn)即使有網(wǎng)域控制器,但是這里不去設(shè)定它,還是能夠正常的驗證使用者身 分。
重新啟動 Apache。