<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è)務(wù)需求】
    作為開(kāi)發(fā)人員,最大的噩夢(mèng)莫過(guò)于自己辛辛苦苦開(kāi)發(fā)的程序由于各種原因而丟失了。所以定期備份資料乃是開(kāi)發(fā)人員的一大美德(我自己重要的資料備份了4份,分別放在不同的地方)。SVN作為代碼和文檔匯聚之地,定期備份的重要性更是不容置疑。

    【2.基本思路】
    通常我們備份的方式無(wú)非有:完全備份和增量備份兩種。完全備份適用于版本庫(kù)的大小比較小的情況,對(duì)于版本庫(kù)比較大或者已經(jīng)存在版本庫(kù)的情況下,則沒(méi)有必要也不可能使用完全備份了。這時(shí)增量備份就是一個(gè)很好的選擇。

    除了完全備份和增量備份,我們還有另外一種方式:版本庫(kù)同步。這種方法可以在源版本庫(kù)和目標(biāo)版本庫(kù)之間做同步(通常是單向的)。一旦源版本庫(kù)發(fā)生了改變則可以馬上通知目標(biāo)版本庫(kù)做出相同的改變。

    注意:版本庫(kù)的備份不能簡(jiǎn)單地使用copy-paste的方法來(lái)拷貝復(fù)雜版本庫(kù)的db目錄,否則有可能出現(xiàn)數(shù)據(jù)不完全的情況。

    所以我們的備份策略是:
     ①首次備份采用完全備份,后續(xù)備份采用增量備份和版本庫(kù)同步
     ②完全備份在晚上定時(shí)進(jìn)行,增量備份和版本庫(kù)同步在用戶(hù)提交時(shí)進(jìn)行

    注意:這個(gè)策略實(shí)際上是有較大問(wèn)題的(包括備份的方式,頻度,時(shí)間):通常完全備份會(huì)在每周,月進(jìn)行一次。而增量備份會(huì),版本庫(kù)同步會(huì)在每天晚上定時(shí)執(zhí)行,而不是在每次用戶(hù)提交后執(zhí)行,以縮短請(qǐng)求響應(yīng)。但這里因?yàn)楸局?jiǎn)單的原則,只是抽取了最簡(jiǎn)單的策略

    【3.相關(guān)命令】
    SVN用于備份的命令有以下三個(gè),分別對(duì)應(yīng)于完全備份,增量備份,版本庫(kù)同步。

     ①svnadmin hotcopy
     ②svnadmin dump [--incremental]
     ③svnsync init|sync

    關(guān)于這三個(gè)命令的具體用法,請(qǐng)大家自行參考SVN的用戶(hù)手冊(cè)以獲得更多資訊。

    【4.示例操作】
    注:本示例代碼均為網(wǎng)上下載,非本人原創(chuàng)。

    Example 1:完全備份

    fullbackup.bat
    @echo off

    @echo 不同的系統(tǒng)平臺(tái)和時(shí)間格式設(shè)置會(huì)影響目錄的創(chuàng)建,請(qǐng)先用echo命令輸出日期格式并做相應(yīng)調(diào)整

    rem Subversion的安裝目錄
    set SVN_HOME=C:\Develop\Subversion

    rem 所有版本庫(kù)的父目錄
    set SVN_ROOT=C:\Develop\svntest\testRepos

    rem 備份的根目錄
    set BACKUP_SVN_ROOT=C:\Develop\svntest\svnbackup\full

    rem 每次備份的子目錄
    set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~4,14%

    rem 如果備份的子目錄不存在則先創(chuàng)建
    if exist %BACKUP_DIRECTORY% goto checkBack
    echo 建立備份目錄%BACKUP_DIRECTORY%
    >>%BACKUP_SVN_ROOT%/backup.log
    mkdir %BACKUP_DIRECTORY%

    rem 驗(yàn)證目錄是否為版本庫(kù),如果是則取出名稱(chēng)備份
    for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" %SVN_ROOT%\dofullBackup.bat "%%~fI" %%~nI
    goto end

    :checkBack
    echo 備份目錄%BACKUP_DIRECTORY%已經(jīng)存在,請(qǐng)清空。
    goto end
    :
    end

    dofullbackup.bat
    @echo 正在備份版本庫(kù)%1
    @%SVN_HOME%
    \bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2
    @echo 版本庫(kù)%1成功備份到了%
    2

    由于批處理文件中%date命令的輸出格式受平臺(tái)的控制(實(shí)際上是控制面板中的時(shí)區(qū)設(shè)置)影響,所以對(duì)于文件中使用到date函數(shù)的地方,讀者要特別注意。需要首先在DOS下確認(rèn)日期輸出格式,然后根據(jù)實(shí)際情況進(jìn)行截取。

    將這兩個(gè)文件放在repository的同級(jí)目錄下,執(zhí)行之則可以。讀者可以自行修改上面的環(huán)境變量設(shè)置

    Example 2:增量備份

    post-commit.bat
    echo off

    set SVN_HOME=C:\Develop\Subversion
    set SVN_ROOT=C:\Develop\svntest\testRepos
    set UNIX_SVN_ROOT=C:/Develop/svntest/testRepos
    set DELTA_BACKUP_SVN_ROOT=C:\Develop\svntest\svnbackup\delta
    set LOG_FILE=%DELTA_BACKUP_SVN_ROOT%\backup.log

    @echo 不同的系統(tǒng)平臺(tái)和時(shí)間格式設(shè)置會(huì)影響目錄的創(chuàng)建,請(qǐng)先用echo命令輸出日期格式并做相應(yīng)調(diào)整

    rem  版本庫(kù)增量導(dǎo)出
    for /r %SVN_ROOT% %%I in (.) do  if %UNIX_SVN_ROOT%/%%~nI== %1 echo 備份開(kāi)始  版本路徑:%SVN_ROOT%\%%~nI  版本號(hào):%2 >>  %LOG_FILE% | %SVN_ROOT%\%%~nI\hooks\deltaBackup.bat %%~nI %2
    goto end

    :
    end

    這個(gè)批處理文件的重點(diǎn)在于%UNIX_SVN_ROOT%/%%~nI == %1這句話(huà)。它的作用是判斷當(dāng)前提交的目標(biāo)版本庫(kù)是不是和循環(huán)中的變量值相同,如果是那么認(rèn)為該修改是提交到這個(gè)版本庫(kù)的,就可以進(jìn)行增量備份了。我在運(yùn)行這個(gè)文件時(shí),一開(kāi)始老是失敗,后來(lái)發(fā)現(xiàn)原因居然是路徑的寫(xiě)法問(wèn)題。

    請(qǐng)注意UNIX_SVN_ROOT這個(gè)變量的路徑值寫(xiě)法,如果你換成SVN_ROOT看看,肯定是不會(huì)成功的。因?yàn)槁窂降膶?xiě)法不同! 

    deltaBackup.bat
    @echo 正在備份版本庫(kù)%2 
    @%SVN_HOME%
    \bin\svnadmin dump %SVN_ROOT%\%1 --incremental --revision %2 >> %DELTA_BACKUP_SVN_ROOT%\%1-%date:~4,14%.dump
    @echo 版本庫(kù)%2成功備份到了%
    3

    這個(gè)文件里面特別要注意的就是--incremental這個(gè)參數(shù),如果你不加上去的話(huà)以后再執(zhí)行l(wèi)oad就會(huì)提示版本庫(kù)已經(jīng)存在的錯(cuò)誤了!而--revision則用于指定備份的版本。

    將以上兩個(gè)文件放置在repository的hooks目錄下即可。

    Example 3:版本庫(kù)同步

    首先創(chuàng)建一個(gè)版本庫(kù)用于同步(目標(biāo)版本庫(kù)),其次要在源版本庫(kù)和目標(biāo)版本庫(kù)之間建立聯(lián)系。這是通過(guò)svnsync init來(lái)達(dá)到的。

    svnsync init 目標(biāo)庫(kù)URL 源庫(kù)URL

    這個(gè)命令執(zhí)行過(guò)程中可能需要增加兩個(gè)參數(shù)--username和--password用于指明目標(biāo)版本庫(kù)的用戶(hù)名和密碼。

    其次在目標(biāo)版本庫(kù)的hooks目錄下建立一個(gè)空的文件并命名為pre-revprop-change.bat。這一步很重要,否則會(huì)出現(xiàn)鑒權(quán)失敗的錯(cuò)誤。最后就是在源版本庫(kù)的hooks目錄下建立一個(gè)名為post-commit.bat的文件,如下所示:

    echo off

    rem 版本庫(kù)同步
    %SVN_HOME%\bin\svnsync sync  --non-interactive svn://localhost/newRepo_backup

    但用戶(hù)在源版本庫(kù)執(zhí)行了相應(yīng)的修改動(dòng)作之后,你會(huì)發(fā)現(xiàn)目標(biāo)版本庫(kù)也出現(xiàn)了同樣的修改!

    附件:完整測(cè)試目錄及腳本文件


    -------------------------------------------------------------
    生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
    posted on 2008-12-30 17:35 Paul Lin 閱讀(2486) 評(píng)論(5)  編輯  收藏 所屬分類(lèi): 項(xiàng)目管理


    FeedBack:
    # re: 【版本控制之路】版本庫(kù)的備份
    2008-12-30 19:04 | 激情
    just test!!!  回復(fù)  更多評(píng)論
      
    # re: 【版本控制之路】版本庫(kù)的備份
    2008-12-31 20:00 | 夢(mèng)想在這里起飛
    寫(xiě)得不錯(cuò)啊,看看我這個(gè)
    開(kāi)源的報(bào)表ireport項(xiàng)目web應(yīng)用
    http://ireport.cubebi.com


      回復(fù)  更多評(píng)論
      
    # re: 【版本控制之路】版本庫(kù)的備份[未登錄](méi)
    2009-01-01 11:01 | Paul Lin
    @夢(mèng)想在這里起飛

    支持國(guó)產(chǎn)軟件,很不錯(cuò)!
      回復(fù)  更多評(píng)論
      
    # re: 【版本控制之路】版本庫(kù)的備份
    2009-01-02 11:43 | 愛(ài)吃魚(yú)頭
    svn很重要!備份很重要!向lz學(xué)習(xí)了!  回復(fù)  更多評(píng)論
      
    # re: 【版本控制之路】版本庫(kù)的備份
    2010-03-30 11:01 | 醉月茶
    很好,拜讀了~  回復(fù)  更多評(píng)論
      
    <2008年12月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(21)

    隨筆分類(lèi)

    隨筆檔案

    BlogJava熱點(diǎn)博客

    好友博客

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 一级做a爱过程免费视| 亚洲精品无码AV中文字幕电影网站| 国产无遮挡吃胸膜奶免费看| 亚洲乱亚洲乱淫久久| 日本高清免费中文在线看| 在线jlzzjlzz免费播放| 亚洲国产美女精品久久久久| 在线人成免费视频69国产| 亚洲人成电影网站国产精品| 特级无码毛片免费视频尤物| 中文字幕精品亚洲无线码二区 | 最近中文字幕国语免费完整| 亚洲一区精品无码| AAAAA级少妇高潮大片免费看| 亚洲AⅤ无码一区二区三区在线| 日日摸日日碰夜夜爽亚洲| 精品少妇人妻AV免费久久洗澡| 亚洲影院天堂中文av色| 好男人www免费高清视频在线| 亚洲午夜电影在线观看| 日韩精品无码区免费专区| 国产乱子伦精品免费视频| 精品国产日韩久久亚洲| 国产老女人精品免费视频| 免费在线看黄的网站| 亚洲成人免费在线观看| 自拍偷自拍亚洲精品第1页| 成人在线免费观看| 黄页网站在线免费观看| 亚洲精品少妇30p| 99re免费99re在线视频手机版| 亚洲性色高清完整版在线观看| 亚洲综合另类小说色区色噜噜| 无码av免费一区二区三区| 日韩久久无码免费毛片软件| 亚洲精品综合在线影院| 日韩精品一区二区亚洲AV观看 | 亚洲大尺度无码无码专线一区| 又粗又大又猛又爽免费视频| aaa毛片视频免费观看| AV激情亚洲男人的天堂国语|