【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
④svn switch命令語法svn switch url [path]
switch --relocate from to [path]svn switch命令用於更新工作副本的url。意即指向新的版本庫位置。首先要注意的一點是我們即可以將整個工作副本指向新的url,也可將工作副本下的某個目錄指向新的url。
另外乙個重要的引數就是--relocate。這個引數是否使用對於結果如何有很大影響,使用不當甚至可能會造成版本庫不可用。其中有兩條重要的規則:
a.假如工作副本只是對映到同乙個版本庫內的不同位置,那麼使用svn switch即可
b.假如工作副本已是對映到不同的版本庫,那麼必須使用svn switch --relocate
上面第二條規則通常發生在我們需要將整個版本庫遷移到另外一台機,或者同一台機的不同版本庫時。這個時候使用--relocate會重新整理原有工作副本中每個檔案的url頭部。
【4.示例操作】
好了,下面我們來看如何執行版本庫的遷移工作。
①檢視當前舊版本庫最新的版本號是多少c:\peng\other>svnlook youngest newrepo
161②分批增量匯出版本庫內容c:\peng\other>svnadmin dump newrepo -r 0:50 > dumpfile1
* dumped revision 0.
* dumped revision 1.
* dumped revision 2.
* dumped revision 3.
匯出第乙個檔案,版本號從0到50的修訂版本
c:\peng\other>svnadmin dump newrepo -r 51:100--incremental> dumpfile2
* dumped revision 51.
* dumped revision 52.
* dumped revision 53.
* dumped revision 54.
* dumped revision 55.
匯出第二個檔案,版本號從51到100的修訂版本
c:\peng\other>svnadmin dump newrepo -r 101:161--incremental> dumpfile3
* dumped revision 101.
* dumped revision 102.
* dumped revision 103.
* dumped revision 104.
* dumped revision 105.
請注意我們上面三個命令中第2,3個命令多了乙個--incremental的引數,這就是採用了增量的方式匯出,下面我們一次按照順序匯入
③分批匯入版本庫檔案
很明顯現在的提交全部都去到新的位置了!切換成功。
SVN版本庫的遷移
兩台伺服器,進行 svn的遷移 系統平台 windows server 2003 版本庫 test 源伺服器 192.168.1.14 目標伺服器 192.168.1.12 源svn版本庫的 path d svn test 要遷移到的 path e svn test 首先說明 這個目標伺服器上的sv...
SVN 版本庫遷移
當因為記憶體限制或者其他某些原因,我們需要將svn版本從乙個伺服器a遷移到另外乙個伺服器b時,如果我們單純的只是將svn版本從伺服器a check out後將檔案重新放到伺服器b,將會缺失svn原有的日誌資訊等內容。linux環境下svn伺服器的安裝方式請參考 當我們需要保留原伺服器上所有的svn日...
SVN版本庫的簡單遷移
專案組有兩台伺服器,現在要把存在伺服器a上的svn 庫 包含若干個專案的 遷移到伺服器b上,簡略記錄下遷移過程.1 首先檢視伺服器a上的svn版本,遠端連線a,命令列 svnserve version 值得注意的是使用這些svn命令的前提是系統路徑下新增了svn環境變數 2 接下來匯出專案 庫 sv...