【1.業(yè)務(wù)需求】
請注意我們上面三個(gè)命令中第2,3個(gè)命令多了一個(gè)--incremental的參數(shù),這就是采用了增量的方式導(dǎo)出,下面我們一次按照順序?qū)?br />
經(jīng)過前面的SVN搭建,權(quán)限配置和強(qiáng)制寫日志的工作之后,今天的任務(wù)是把原來其它分散的各個(gè)版本庫統(tǒng)一遷移到新的版本庫,集中統(tǒng)一管理。要求不改變原有的版本庫的內(nèi)容和版本號(hào)。
【2.基本思路】
要實(shí)現(xiàn)版本庫的無縫遷移,必須通過以下3個(gè)步驟:
①導(dǎo)出舊的版本庫
②導(dǎo)入新的版本庫
③通知客戶端切換版本庫分支
首先來看第一步:導(dǎo)出舊的版本庫。我們知道SVN提供了check out命令和export命令簽出,導(dǎo)出版本庫中的內(nèi)容。對于版本庫內(nèi)容比較少的情況這種方法可以采用。但是如果版本庫中內(nèi)容比較多,那么這種方法就顯得很笨重了,而且還涉及到版本號(hào)改變的問題。所以首先擯棄這種做法。
我們知道Oracle提供了export/import命令來將數(shù)據(jù)庫導(dǎo)出成一個(gè)二進(jìn)制文件,然后導(dǎo)入。同樣的SVN也提供了一對命令:dump和load。不同的是這兩個(gè)命令導(dǎo)出的是文本內(nèi)容(肉眼可以讀懂)。而且還有一次性導(dǎo)出和增量導(dǎo)出,單版本導(dǎo)出與多版本導(dǎo)出等多種選擇操作,就是這個(gè)了。
其次我們來看“通知客戶端切換版本庫分支”。在我們完成服務(wù)器端的版本遷移之后,必須通知客戶端運(yùn)行切換分支的命令,否則客戶端的提交還是提交到舊的版本庫去。SVN也為我們準(zhǔn)備了這樣的命令:svn switch。
【3.相關(guān)命令】
首先我們來看一下SVN的dump和load命令
①svnadmin dump命令語法
svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]
svnadmin dump命令用于導(dǎo)出整個(gè)Repository或Repository下的某個(gè)范圍的修訂版本。REPOS_PATH是版本庫的路徑,[-r LOWER[:UPPER]]用于指定導(dǎo)出的修訂版本范圍,由參數(shù)-r和兩個(gè)用:號(hào)隔開阿拉伯?dāng)?shù)字組成。例如:-r 0:50表示導(dǎo)出才版本0到版本50之間的所有修訂版,-r是revision的縮寫。
而另一個(gè)關(guān)鍵參數(shù)是--incremental。它使用增量方式來導(dǎo)出版本,即每次都只導(dǎo)出自上一個(gè)版本以來的修改。這樣的好處是第一:可以把一個(gè)大的文件切分成若干個(gè)小的文件。第二:在版本庫已經(jīng)存在的情況下,我們只需要每次導(dǎo)出修改的部分,不需要每次都導(dǎo)出整個(gè)版本庫的內(nèi)容。甚至可以通過hook腳本每天晚上自動(dòng)將當(dāng)天的修改dump出來做備份用。
②svnadmin load命令語法
svnadmin load REPOS_PATH
svnadmin load命令用于從標(biāo)準(zhǔn)輸入流/其它流中導(dǎo)入版本庫,REPOS_PATH是要導(dǎo)入的目標(biāo)版本庫。
③dump和load的輸出/入重定向
svnadmin dump myrepos > dumpfile
svnadmin load newrepos < dumpfile
默認(rèn)情況下dump和load命令分別輸出到默認(rèn)輸出設(shè)備(屏幕)和從默認(rèn)輸入設(shè)備(鍵盤)導(dǎo)入。但我們也可以把輸出流/輸入流重定向。例如上面的第一個(gè)命令,使用重定向符>把屏幕的輸出定向當(dāng)前目錄下的dumpfile,而第二個(gè)命令從當(dāng)前目錄下的dumpfile文件導(dǎo)入。
上面的命令使用起來已經(jīng)很方便了,那么還有沒有更加方便的用法呢?當(dāng)然有!就是使用管道命令把兩個(gè)命令合二為一。
svnadmin dump myrepos | svnadmin load newrepos
④svn switch命令語法
svn switch URL [PATH]
switch --relocate FROM TO [PATH
]
另外一個(gè)重要的參數(shù)就是--relocate。這個(gè)參數(shù)是否使用對于結(jié)果如何有很大影響,使用不當(dāng)甚至可能會(huì)造成版本庫不可用。其中有兩條重要的規(guī)則:
A.假如工作副本只是映射到同一個(gè)版本庫內(nèi)的不同位置,那么使用svn switch即可
B.假如工作副本已是映射到不同的版本庫,那么必須使用svn switch --relocate
上面第二條規(guī)則通常發(fā)生在我們需要將整個(gè)版本庫遷移到另外一臺(tái)機(jī),或者同一臺(tái)機(jī)的不同版本庫時(shí)。這個(gè)時(shí)候使用--relocate會(huì)刷新原有工作副本中每個(gè)文件的URL頭部。
【4.示例操作】
好了,下面我們來看如何執(zhí)行版本庫的遷移工作。
①查看當(dāng)前舊版本庫最新的版本號(hào)是多少
C:\peng\Other>svnlook youngest newRepo
161
②分批增量導(dǎo)出版本庫內(nèi)容
C:\peng\Other>svnadmin dump newRepo -r 0:50 > dumpfile1
* Dumped revision 0.
* Dumped revision 1.
* Dumped revision 2.
* Dumped revision 3.
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.
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.
③分批導(dǎo)入版本庫文件
C:\peng\Other>svnadmin load newRepo2 < dumpfile1
<<< 開始新的事務(wù),基于最初的修訂版 1
* 正在添加路徑:a
done.
------- 提交后的修訂版 1 >>>
<<< 開始新的事務(wù),基于最初的修訂版 2
* 正在刪除路徑:a
done.
C:\peng\Other>svnadmin load newRepo2 < dumpfile2
<<< 開始新的事務(wù),基于最初的修訂版 50
* 正在添加路徑:branches
done.
------- 提交新修訂版 12 (從原始修訂版 50 裝載) >>>
<<< 開始新的事務(wù),基于最初的修訂版 51
* 正在刪除路徑:branches
done.
------- 提交新修訂版 13 (從原始修訂版 51 裝載) >>>
如果我們前面不使用--incremental方式導(dǎo)出,此處分批導(dǎo)入三個(gè)dump文件,則會(huì)提示錯(cuò)誤:版本庫文件已經(jīng)存在。
④客戶端切換工作副本URL
C:\peng\Other>svnserve -d -r c:\peng\other
首先我們把SVN服務(wù)的根目錄指向c:\peng\other目錄,在這個(gè)目錄下有兩個(gè)repository,其中一個(gè)名為newRepo,另外一個(gè)名為呢wRepo2。
C:\peng\Other>dir
Volume in drive C is ESOE_W2K
Volume Serial Number is BC1B-22E6
Directory of C:\peng\Other
2008-12-26 15:10 <DIR> .
2008-12-26 15:10 <DIR> ..
2008-12-23 10:04 <DIR> Backup
2008-12-26 14:21 45,578 dumpfile1
2008-12-26 14:22 39,567 dumpfile2
2008-12-26 14:23 55,740 dumpfile3
2008-12-15 09:08 <DIR> newRepo
2008-12-26 14:20 <DIR> newRepo2
2008-12-26 15:25 <DIR> ps
2008-12-24 15:11 <DIR> Toolbar
3 File(s) 140,885 bytes
7 Dir(s) 2,668,414,976 bytes free
C:\peng\Other>
首先我們從newRepo這個(gè)版本庫中check out出一個(gè)子目錄ps
C:\Documents and Settings\qlinpen.E0015609D6309>svn checkout svn://localhost/newRepo/ps c:/peng/other/ps
A C:\peng\Other\ps\ps.txt
取出修訂版 170。
現(xiàn)在該工作副本已經(jīng)和:svn://localhost/newRepo/ps發(fā)生了映射關(guān)系。我們可以使用svnlook info來顯示這個(gè)工作副本的一般信息
C:\peng\Other>cd ps
C:\peng\Other\ps>svn info
路徑:.
地址(URL):svn://localhost/newRepo/ps
Repository Root: svn://localhost/newRepo
檔案庫 UUID:6fbeb35b-c7e4-984d-b2ac-32812dcf3078
修訂版:170
節(jié)點(diǎn)種類:目錄
調(diào)度:正常
最后修改的作者:admin
最后修改的修訂版:170
最后修改的時(shí)間: 2008-12-26 14:52:32 +0800 (星期五, 26 十二月 2008)
輸出信息中明確地指出ps目錄指向了svn://localhost/newRepo/ps。下面我們來把它指向另一個(gè)repository下的同名位置:svn://localhost/newRepo2/ps。
C:\peng\Other\ps>svn switch --relocate svn://localhost/newRepo/ps svn://localhost/newRepo2/ps
C:\peng\Other\ps>
經(jīng)過上面的切換后,再次使用svnlook info輸出一般信息,發(fā)現(xiàn)URL已經(jīng)被成功切換過來了
C:\peng\Other\ps>svn info
路徑:.
地址(URL):svn://localhost/newRepo2/ps
Repository Root: svn://localhost/newRepo2
檔案庫 UUID:6fbeb35b-c7e4-984d-b2ac-32812dcf3078
修訂版:170
節(jié)點(diǎn)種類:目錄
調(diào)度:正常
最后修改的作者:admin
最后修改的修訂版:170
最后修改的時(shí)間: 2008-12-26 14:52:32 +0800 (星期五, 26 十二月 2008)
我們嘗試著在ps目錄下修改文件ps.txt為ps.doc,然后提交看看會(huì)提交到那個(gè)repos去?
C:\peng\Other\ps>svn list svn://localhost/newRepo/ps
ps.txt
C:\peng\Other\ps>svn list svn://localhost/newRepo2/ps
ps.doc
C:\peng\Other\ps>
很明顯現(xiàn)在的提交全部都去到新的位置了!切換成功。
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
FeedBack:
2008-12-26 20:47 | Zealic
只有注冊用戶登錄后才能發(fā)表評論。 | ||
![]() |
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
|
||
相關(guān)文章:
|
||
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
30 | 1 | 2 | 3 | 4 | 5 | 6 | |||
7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
28 | 29 | 30 | 31 | 1 | 2 | 3 | |||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
常用鏈接
留言簿(21)
隨筆分類
- J2EE 框架(9)
- J2EE基礎(chǔ)(4)
- J2SE(43)
- Java 工具(5)
- Oracle Concept(4)
- Oracle SQL/PLSQL(9)
- Oracle 開發(fā)(13)
- Oracle 管理(4)
- Oracle 調(diào)優(yōu)
- Oracle 錯(cuò)誤診斷
- RoR(19)
- UML(3)
- Unix / Linux(13)
- Web基礎(chǔ)(19)
- 其它技術(shù)(7)
- 感悟(3)
- 雜項(xiàng)(7)
- 架構(gòu)與性能(8)
- 模式與重構(gòu)(19)
- 灌水(8)
- 電影與音樂(16)
- 走過的路(1)
- 軟件過程與軟件方法(3)
- 陽光戶外(2)
- 項(xiàng)目管理(36)
隨筆檔案
- 2012年2月 (3)
- 2011年11月 (4)
- 2011年10月 (1)
- 2011年9月 (2)
- 2011年8月 (2)
- 2011年7月 (5)
- 2011年6月 (3)
- 2011年5月 (1)
- 2011年4月 (1)
- 2011年3月 (3)
- 2011年1月 (1)
- 2010年12月 (1)
- 2010年11月 (5)
- 2010年10月 (3)
- 2010年9月 (1)
- 2010年7月 (1)
- 2010年6月 (1)
- 2010年5月 (4)
- 2010年4月 (9)
- 2010年3月 (19)
- 2010年2月 (8)
- 2010年1月 (3)
- 2009年12月 (34)
- 2009年11月 (1)
- 2009年10月 (2)
- 2009年7月 (4)
- 2009年6月 (5)
- 2009年5月 (3)
- 2009年4月 (2)
- 2009年3月 (1)
- 2009年2月 (5)
- 2009年1月 (5)
- 2008年12月 (13)
- 2008年11月 (4)
- 2008年10月 (1)
- 2008年9月 (6)
- 2008年8月 (5)
- 2008年7月 (3)
- 2008年6月 (31)
- 2008年5月 (10)
- 2008年4月 (9)
- 2008年3月 (7)
- 2008年2月 (4)
- 2008年1月 (19)
BlogJava熱點(diǎn)博客
好友博客
搜索
最新評論

- 1.?re: 【Java基礎(chǔ)專題】編碼與亂碼(01)---編碼基礎(chǔ)[未登錄]
- 666666666666666666666這幾天正在做個(gè)類似工程編碼出現(xiàn)錯(cuò)誤
- --李
- 2.?re: 【Java基礎(chǔ)專題】IO與文件讀寫---使用Apache commons IO簡化文件讀寫
- 不錯(cuò)
- --阿斯蘭
- 3.?re: 【Java基礎(chǔ)專題】編碼與亂碼(03)----String的toCharArray()方法
- 多謝分享
- --thx
- 4.?re: 【Java基礎(chǔ)專題】編碼與亂碼(05)---GBK與UTF-8之間的轉(zhuǎn)換
- 評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
- --karl
- 5.?re: 【Java基礎(chǔ)專題】編碼與亂碼(01)---編碼基礎(chǔ)[未登錄]
- 謝謝,幫了我大忙!
- --小龍