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.
springboot在一個項目中啓動多個核心啓動類
2.
Spring Boot日誌-3 ------>SLF4J與別的框架整合
3.
SpringMVC-Maven(一)
4.
idea全局設置
5.
將word選擇題轉換成Excel
6.
myeclipse工程中library 和 web-inf下lib的區別
7.
Java入門——第一個Hello Word
8.
在chrome安裝vue devtools(以及安裝過程中出現的錯誤)
9.
Jacob線上部署及多項目部署問題處理
10.
1.初識nginx
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
svn版本庫遷移
2.
教科書式SVN版本庫遷移
3.
記一次svn版本庫遷移
4.
SVN不同版本庫遷移
5.
windows下SVN版本庫遷移小結
6.
SVN庫遷移
7.
svn倉庫遷移
8.
svn版本庫的拆分及遷移子目錄等
9.
SVN代碼庫遷移
10.
SVN版本庫無損遷移與自動備份(二)
>>更多相關文章<<