<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 262,  comments - 221,  trackbacks - 0

     【1.業(yè)務需求】


    經(jīng)過前面的SVN搭建,權(quán)限配置和強制寫日志的工作之后,今天的任務是把原來其它分散的各個版本庫統(tǒng)一遷移到新的版本庫,集中統(tǒng)一管理。要求不改變原有的版本庫的內(nèi)容和版本號。

    【2.基本思路】
    要實現(xiàn)版本庫的無縫遷移,必須通過以下3個步驟:
     ①導出舊的版本庫
     ②導入新的版本庫
     ③通知客戶端切換版本庫分支

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

    我們知道Oracle提供了export/import命令來將數(shù)據(jù)庫導出成一個二進制文件,然后導入。同樣的SVN也提供了一對命令:dump和load。不同的是這兩個命令導出的是文本內(nèi)容(肉眼可以讀懂)。而且還有一次性導出和增量導出,單版本導出與多版本導出等多種選擇操作,就是這個了。

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

    【3.相關(guān)命令】
    首先我們來看一下SVN的dump和load命令

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

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

    而另一個關(guān)鍵參數(shù)是--incremental。它使用增量方式來導出版本,即每次都只導出自上一個版本以來的修改。這樣的好處是第一:可以把一個大的文件切分成若干個小的文件。第二:在版本庫已經(jīng)存在的情況下,我們只需要每次導出修改的部分,不需要每次都導出整個版本庫的內(nèi)容。甚至可以通過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文件導入。

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

    ④svn switch命令語法
    svn switch URL [PATH]
    switch --relocate FROM TO 
    [PATH]
    svn switch命令用于更新工作副本的URL。意即指向新的版本庫位置。首先要注意的一點是我們即可以將整個工作副本指向新的URL,也可將工作副本下的某個目錄指向新的URL。

    另外一個重要的參數(shù)就是--relocate。這個參數(shù)是否使用對于結(jié)果如何有很大影響,使用不當甚至可能會造成版本庫不可用。其中有兩條重要的規(guī)則:
     A.假如工作副本只是映射到同一個版本庫內(nèi)的不同位置,那么使用svn switch即可
     B.假如工作副本已是映射到不同的版本庫,那么必須使用svn switch --relocate

    上面第二條規(guī)則通常發(fā)生在我們需要將整個版本庫遷移到另外一臺機,或者同一臺機的不同版本庫時。這個時候使用--relocate會刷新原有工作副本中每個文件的URL頭部。

    【4.示例操作】
    好了,下面我們來看如何執(zhí)行版本庫的遷移工作。

    ①查看當前舊版本庫最新的版本號是多少
    C:\peng\Other>svnlook youngest newRepo
    161

    ②分批增量導出版本庫內(nèi)容
    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的參數(shù),這就是采用了增量的方式導出,下面我們一次按照順序?qū)?br />
    ③分批導入版本庫文件

    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文件,則會提示錯誤:版本庫文件已經(jīng)存在。

    ④客戶端切換工作副本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

    現(xiàn)在該工作副本已經(jīng)和:svn://localhost/newRepo/ps發(fā)生了映射關(guān)系。我們可以使用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
    節(jié)點種類:目錄
    調(diào)度:正常
    最后修改的作者: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>

    經(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ào)度:正常
    最后修改的作者: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>

    很明顯現(xiàn)在的提交全部都去到新的位置了!切換成功。

    -------------------------------------------------------------
    生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
    posted on 2008-12-26 11:52 Paul Lin 閱讀(4132) 評論(1)  編輯  收藏 所屬分類: 項目管理


    FeedBack:
    # re: 【版本控制之類】SVN版本庫的遷移
    <2008年12月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點博客

    好友博客

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩成人免费aa在线看| 两性色午夜视频免费播放| ww亚洲ww在线观看国产| 亚洲精品福利网站| 亚洲视频网站在线观看| 亚洲视频在线播放| 亚洲精品人成电影网| 亚洲国产夜色在线观看| 亚洲三级视频在线观看| 久久亚洲国产最新网站| 国产精品亚洲午夜一区二区三区 | 美女视频黄的全免费视频| 最近最新高清免费中文字幕| 222www免费视频| 国产一卡二卡四卡免费| 啦啦啦高清视频在线观看免费| 扒开双腿猛进入爽爽免费视频| 成人毛片视频免费网站观看| 日本无吗免费一二区| avtt亚洲天堂| 国产亚洲av片在线观看16女人| 国产亚洲精品岁国产微拍精品| 亚洲今日精彩视频| 亚洲一区二区三区国产精品无码| 亚洲日韩av无码中文| 黄色毛片免费观看| 三年片在线观看免费| 69视频在线观看高清免费| 成人超污免费网站在线看| vvvv99日韩精品亚洲| 久久精品国产亚洲沈樵| 亚洲精品电影在线| 亚洲A∨精品一区二区三区下载| 九一在线完整视频免费观看| 日本一道本不卡免费| 国产三级在线观看免费| 亚洲av手机在线观看| 水蜜桃亚洲一二三四在线| 亚洲天堂免费在线| 一级毛片成人免费看a| 久久国产色AV免费看|