1. 程式人生 > >SVN版本庫的遷移

SVN版本庫的遷移

1:
經過SVN搭建,許可權配置和強制寫日誌的工作之後,今天的任務是把原來其它分散的各個版本庫統一遷移到新的版本庫,集中統一管理。要求不改變原有的版本庫的內容和版本號。

2:
要實現版本庫的無縫遷移,必須通過以下3個步驟:
①匯出舊的版本庫
②匯入新的版本庫
③通知客戶端切換版本庫分支

首先來看第一步:匯出舊的版本庫。我們知道SVN提供了check out命令和export命令簽出,匯出版本庫中的內容。對於版本庫內容比較少的情況這種方法可以採用。但是如果版本庫中內容比較多,那麼這種方法就顯得 很笨重了,而且還涉及到版本號改變的問題。所以首先擯棄這種做法。

我們知道Oracle提供了export/import命令來將資料庫匯出成一個二進位制檔案,然後匯入。同樣的SVN也提供了一對命令:dump和 load。不同的是這兩個命令匯出的是文字內容(肉眼可以讀懂)。而且還有一次性匯出和增量匯出,單版本匯出與多版本匯出等多種選擇操作,就是這個了。

其次我們來看“通知客戶端切換版本庫分支”。在我們完成伺服器端的版本遷移之後,必須通知客戶端執行切換分支的命令,否則客戶端的提交還是提交到舊的版本庫去。SVN也為我們準備了這樣的命令:svn switch。

3:
首先我們來看一下SVN的dump和load命令

①svnadmin dump命令語法
svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]

svnadmin dump命令用於匯出整個Repository或Repository下的某個範圍的修訂版本。REPOS_PATH是版本庫的路徑,[-r LOWER[:UPPER]]用於指定匯出的修訂版本範圍,由引數-r和兩個用:號隔開阿拉伯數字組成。例如:-r 0:50表示匯出才版本0到版本50之間的所有修訂版,-r是revision的縮寫。

而另一個關鍵引數是--incremental。它使用增量方式來匯出版本,即每次都只匯出自上一個版本以來的修改。這樣的好處是第一:可以把一個大的文 件切分成若干個小的檔案。第二:在版本庫已經存在的情況下,我們只需要每次匯出修改的部分,不需要每次都匯出整個版本庫的內容。甚至可以通過hook指令碼 每天晚上自動將當天的修改dump出來做備份用。

②svnadmin load命令語法
svnadmin load REPOS_PATH

svnadmin load命令用於從標準輸入流/其它流中匯入版本庫,REPOS_PATH是要匯入的目標版本庫。

③dump和load的輸出/入重定向
svnadmin dump myrepos > dumpfile

svnadmin load newrepos < dumpfile

預設情況下dump和load命令分別輸出到預設輸出裝置(螢幕)和從預設輸入裝置(鍵盤)匯入。但我們也可以把輸出流/輸入流重定向。例如上面的第一個 命令,使用重定向符>把螢幕的輸出定向當前目錄下的dumpfile,而第二個命令從當前目錄下的dumpfile檔案匯入。

上面的命令使用起來已經很方便了,那麼還有沒有更加方便的用法呢?當然有!就是使用管道命令把兩個命令合二為一。
svnadmin dump myrepos | svnadmin load newrepos