昨天在研究 CollabNet Subversion Edge 如何自訂版本庫範本 (Repository Template),照著介面來設定、查了線上文件,其中有種範本的格式文件都說支援,但我怎樣設定就是不成功,雖然最後找到官方論壇有解決方法,但不是很方便,我便利用 WinMerge 找出真正無法設定成功的主因,特此筆記一下。
我們每次建立版本庫 (Repository) 時,都要重複的建立基本目錄架構、設定版本庫的 hooks 指令檔,這項任務在 CollabNet Subversion Edge 的管理介面就可以用 自訂版本庫範本 (Repository Template) 的方式來完成,對版本庫管理作業來說非常的方便,省去了許多功夫。
如果你已經正確設定 Repository Template 話,在建立版本庫時就會看到以下畫面:
如果要自訂版本庫,可以參考下圖來建立新的範本:
然而,建立 Repository Template 時是有說明範本檔的格式支援以下三種格式:
- A valid template file can be formatted as a dump file or a zip archive of a single dump file.
- Alternatively, it may be a zip archive containing the contents of a repository, in which case the template could also include hook scripts.
如果覺得說明的不夠清楚,可以再到線上文件查詢(含圖),網址如下:
CollabNet Subversion Edge User Guide > Manage repositories > Create a repository template
- A repository dump file
- Zipped archive of a repository dump file
- Zipped archive of the contents of a repository: this should contain the entire repository (including the db and hooks folders), not just a checkout of some portion of the repository
前兩種格式很簡單,就是把版本庫 dump 出來就可以當成範本來上傳,但這並無法滿足我的需求,我需要的是連 hooks 指令檔都當成範本的一部份,這時必須要選擇用三種格式當成範本才行。
我依照文件說明,把整份 Repository 壓縮起來上傳(如下圖示),建立範本的過程沒有問題,有問題的地方在於建立版本庫的時候,即便我選用了我上傳的範本,建立版本庫後,完全都沒有套用成功!
我得到的錯誤記錄如下:
The loading of the dump file or archive into repository 'TestProject' failed.
Exception:
Type: com.collabnet.svnedge.RepoLoadException
Stacktrace:
com.collabnet.svnedge.console.SvnRepoService.loadDumpFile(SvnRepoService.groovy:933)
com.collabnet.svnedge.console.SvnRepoService$loadDumpFile$0.callCurrent(Unknown Source)
com.collabnet.svnedge.console.SvnRepoService.loadDumpFile(SvnRepoService.groovy:883)
com.collabnet.svnedge.console.SvnRepoService$loadDumpFile.call(Unknown Source)
com.collabnet.svnedge.admin.RepoLoadJob.execute(RepoLoadJob.groovy:47)
org.quartz.core.JobRunShell.run(JobRunShell.java:199)
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:546)
幾經苦惱之下到論壇查詢問題解答,所幸還是讓我找到 RE: Problem using repository templates 這一篇討論,透過 Hot Backup (Hotcopy) 的方式也可以取得一份完整可用的範本,不過透過備份的方式來取得範本步驟有點繁複,相關說明可參考:Schedule repository backups
我為了釐清真像,選擇用 WinMerge 去比對我自己壓縮的版本與透過 CollabNet Subversion Edge 線上執行 Hotcopy 的版本,結果發現,我自己對目錄進行壓縮的檔案裡多了一個檔案,位於 db\write-lock
只要把這個 write-lock 檔案從壓縮檔中刪除,就可以順利變成一份在 CollabNet Subversion Edge 裡可使用的版本庫範本了!
後來我也發現,原來在 svnadmin 工具裡也有個 hotcopy 指令可用,我只要利用這個指令也可以製造出一份有效的版本庫範本檔案,而透過指令來執行備份也是我認為比較好的方法,相關說明請參考 svnadmin hotcopy 文件說明。
相關連結