無論你用什么協議訪問你的版本庫,都至少需要創建一個版本庫,這可以使用Subversion命令行客戶端或TortoiseSVN完成。
如果你還沒有創建Subversion版本庫,是時間開始了。
4.1. 創建版本庫
你可以使用FSFS或較老但更穩定的Berkeley Database(BDB)作為版本庫的后端,FSFS格式更快一點,而且可以正常運行在Windows 98,BDB格式更加的穩定,因為其經過了更長時間的驗證。《使用Subversion進行版本控制》中的第5章, 版本庫數據存儲有更多細節。
4.1.1. 使用命令行工具創建版本庫
- 創建一個名為SVN(例如
D:\SVN\
)的空文件夾,作為你的所有版本庫的根。 - 在
D:\SVN\
里創建另一個目錄MyNewRepository
。 - 打開命令行窗口(或DOS窗口),進入
D:\SVN\
目錄,輸入svnadmin create --fs-type bdb MyNewRepository
或
svnadmin create --fs-type fsfs MyNewRepository
現在你在D:\SVN\MyNewRepository
創建了一個新的版本庫。
4.1.2. 使用TortoiseSVN創建版本庫
圖 4.1. 未版本控制文件夾的TortoiseSVN菜單
- 打開資源管理器
- 創建一個新的文件夾,命名為
SVNRepository
- 右鍵點擊新創建的目錄,選擇 → 。
然后就會在新文件夾創建一個版本庫,不要手工編輯這些文件!!!如果你得到什么警告,一定要先確定目錄非空并且沒有寫保護。
4.1.3. 本地訪問版本庫
為了訪問本地版本庫,你需要這個文件夾的路徑,只要記住Subversion期望所有的版本庫路徑使用的形式為file:///C:/SVNRepository/
,請注意全部使用的是斜杠。
為了訪問網絡共享中的版本庫,你可以使用驅動器影射或使用UNC路徑,對于UNC路徑,形式為file://ServerName/path/to/repos/
,請注意這里前面只有兩個斜杠。
在SVN 1.2之前,UNC路徑曾經是一種非常晦澀的格式file:///\ServerName/path/to/repos
,這種格式依然支持,但不推薦。
![]() |
警告 |
---|---|
不要創建和訪問網絡共享上的Berkeley DB版本庫,它不能存在于一個遠程的文件系統,即使是影射到盤符的共享。如果你希望在網絡共享使用Berkeley DB,結果難以預料-你可能會立刻看到奇怪的錯誤,也有可能幾個月之后才發現數據庫已經損壞了。 |
![]() |
提示 |
---|---|
如果你需要訪問網絡共享中的版本庫,請使用fsfs格式創建版本庫,如果也希望提供服務器訪問,你需要1.1或更高版本的Subversion服務器。 |
4.2. 版本庫備份
無論你使用何種版本庫,定期維護和驗證版本庫備份非常重要,或許你可以訪問最近版本的文件,但是如果沒有版本庫,所有的歷史將會丟失。
最簡單(但不推薦)的方法是拷貝整個版本庫目錄到備份介質,然而你必須絕對確定沒有訪問數據的進程,在這里“訪問”的意思是任何訪問,一個BDB版本庫即使在訪問看起來只需要讀時也會有寫操作,如果在拷貝時版本庫被訪問了(web瀏覽器,WebSVN等等),備份將毫無價值。
推薦的方法是運行
svnadmin hotcopy path/to/repository path/to/backup --clean-logs
,用一種安全的方式創建版本庫的拷貝,備份是一個拷貝,--clean-logs
選項并不必須,但是通過刪除BDB版本庫中多余的日志文件可以節省一些空間。
svnadmin
在安裝Subversion命令行客戶端時會自動安裝,如果你在Windows PC上安裝這個命令行工具,最好的方式是下載Windows安裝版本,它比.zip
版本的壓縮效率更好,所以更小,并且小心的為你設定路徑。你可以從http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91下載最新版本的命令行客戶端。
4.3. 鉤子腳本
鉤子腳本是被版本庫事件觸發的程序,例如新修訂版本的創建或未版本化屬性的修改。每一種鉤子都會被告知事件的足夠信息,操作的目標,觸發事件的用戶名。依賴于鉤子的輸出或返回狀態,鉤子程序可以繼續執行,停止或以某種方式掛起。請參閱《使用Subversion進行版本控制》的Hook Scripts部分來查看關于鉤子實現的細節。
版本庫的hooks
目錄中有一些鉤子的例子腳本,這些例子腳本適合于Unix/Linux服務器,在Windows下需要修改。鉤子可以是批處理文件或可執行文件,下面是用來實現pre-revprop-change鉤子的例子。
rem Only allow log messages to be changed. if "%4" == "svn:log" exit 0 echo Property '%4' cannot be changed >&2 exit 1
請注意所有發送到標準輸出的東西都會被忽略,如果你希望信息出現在拒絕提交對話框中,你需要將這些信息發送到標準錯誤,在一個批處理文件中使用>&2
實現。
4.4. 檢出鏈接
如果你希望你的Subversion版本庫對于別人可用,你可以在你的站點包含一個鏈接。為了讓這些更加容易訪問,你可以為其他TSVN用戶包含一個檢出鏈接。
當你安裝了TortoiseSVN,它會注冊一個tsvn:
協議,當TSVN用戶點擊這樣一個鏈接,檢出窗口會自動彈出,且版本庫URL已經填入。
為了在你自己的網頁上包含這樣一個鏈接,你需要添加類似下面的代碼:
<a href="tsvn:https://tortoisesvn.tigris.org/svn/tortoisesvn/trunk"></a>
當然,如果你提供一個合適的圖片會更好,你可以使用TortoiseSVN logo,也可以使用自己的圖片。
<a href="tsvn:https://tortoisesvn.tigris.org/svn/tortoisesvn/trunk"> <img src=TortoiseCheckout.png></a>