JavaShuo
欄目
標籤
SVN版本庫的遷移
時間 2020-07-17
標籤
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
④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的參數,這就是採用了增量的方式導出,下面咱們一次按照順序導入
③分批導入版本庫文件
html
C:\peng\Other>svnadmin load newRepo2 < dumpfile1
<<< 開始新的事務,基於最初的修訂版
1
* 正在添加路徑:a
done.
------- 提交後的修訂版
1
>>>
<<< 開始新的事務,基於最初的修訂版
2
* 正在刪除路徑:a
done.
首先導入dumpfile1,而後是dumpfile2,dumpfile3
C:\peng\Other>svnadmin load newRepo2 < dumpfile2
<<< 開始新的事務,基於最初的修訂版
50
* 正在添加路徑:branches
done.
------- 提交新修訂版
12
(從原始修訂版
50
裝載) >>>
<<< 開始新的事務,基於最初的修訂版
51
* 正在刪除路徑:branches
done.
------- 提交新修訂版
13
(從原始修訂版
51
裝載) >>>
導入文件dumpfile2。依次類推dumpfile3。
若是咱們前面不使用--incremental方式導出,此處分批導入三個dump文件,則會提示錯誤:版本庫文件已經存在。
④客戶端切換工做副本URL
C:\peng\Other>svnserve -d -r c:\peng\other
首先咱們把SVN服務的根目錄指向c:\peng\other目錄,在這個目錄下有兩個repository,其中一個名爲newRepo,另一個名爲呢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這個版本庫中check out出一個子目錄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
。
如今該工做副本已經和:svn://localhost/newRepo/ps發生了映射關係。咱們能夠使用svnlook info來顯示這個工做副本的通常信息
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
節點種類:目錄
調度:正常
最後修改的做者:admin
最後修改的修訂版:
170
最後修改的時間:
2008
-
12
-
26
14
:
52
:
32
+
0800
(星期五
,
26
十二月
2008
)
輸出信息中明確地指出ps目錄指向了svn://localhost/newRepo/ps。下面咱們來把它指向另外一個repository下的同名位置:svn://localhost/newRepo2/ps。
C:\peng\Other\ps>svn switch
--relocate
svn://localhost/newRepo/ps svn://localhost/newRepo2/ps
C:\peng\Other\ps>
通過上面的切換後,再次使用svnlook info輸出通常信息,發現URL已經被成功切換過來了
C:\peng\Other\ps>svn info
路徑:.
地址(URL):svn://localhost/
newRepo
2
/ps
Repository Root: svn://localhost/newRepo2
檔案庫 UUID:6fbeb35b-c7e4-984d-b2ac-32812dcf3078
修訂版:
170
節點種類:目錄
調度:正常
最後修改的做者:admin
最後修改的修訂版:
170
最後修改的時間:
2008
-
12
-
26
14
:
52
:
32
+
0800
(星期五
,
26
十二月
2008
)
咱們嘗試着在ps目錄下修改文件ps.txt爲ps.doc,而後提交看看會提交到那個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>
來自:
http://hi.baidu.com/primechen/blog/item/71a7a1dc2b981fe877c63841.html
相關文章
1.
svn版本庫遷移
2.
教科書式SVN版本庫遷移
3.
記一次svn版本庫遷移
4.
SVN不同版本庫遷移
5.
windows下SVN版本庫遷移小結
6.
SVN庫遷移
7.
svn倉庫遷移
8.
svn版本庫的拆分及遷移子目錄等
9.
SVN代碼庫遷移
10.
SVN版本庫無損遷移與自動備份(二)
更多相關文章...
•
SVN 創建版本庫
-
SVN 教程
•
SVN 版本回退
-
SVN 教程
•
Docker容器實戰(八) - 漫談 Kubernetes 的本質
•
Kotlin學習(二)基本類型
相關標籤/搜索
遷移
本版
版本
博客遷移
遷移性
網絡遷移
遷移博客
人口遷移
svn
SVN
SVN 教程
SQLite教程
MySQL教程
數據庫
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
排序-堆排序(heapSort)
2.
堆排序(heapSort)
3.
堆排序(HEAPSORT)
4.
SafetyNet簡要梳理
5.
中年轉行,擁抱互聯網(上)
6.
SourceInsight4.0鼠標單擊變量 整個文件一樣的關鍵字高亮
7.
遊戲建模和室內設計那個未來更有前景?
8.
cloudlet_使用Search Cloudlet爲您的搜索添加種類
9.
藍海創意雲丨這3條小建議讓編劇大大提高工作效率!
10.
flash動畫製作修改教程及超實用的小技巧分享,碩思閃客精靈
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
svn版本庫遷移
2.
教科書式SVN版本庫遷移
3.
記一次svn版本庫遷移
4.
SVN不同版本庫遷移
5.
windows下SVN版本庫遷移小結
6.
SVN庫遷移
7.
svn倉庫遷移
8.
svn版本庫的拆分及遷移子目錄等
9.
SVN代碼庫遷移
10.
SVN版本庫無損遷移與自動備份(二)
>>更多相關文章<<