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

    【2.基本思路】
    通常我們備份的方式無非有:完全備份和增量備份兩種。完全備份適用于版本庫的大小比較小的情況,對于版本庫比較大或者已經存在版本庫的情況下,則沒有必要也不可能使用完全備份了。這時增量備份就是一個很好的選擇。

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

    注意:版本庫的備份不能簡單地使用copy-paste的方法來拷貝復雜版本庫的db目錄,否則有可能出現數據不完全的情況。

    所以我們的備份策略是:
     ①首次備份采用完全備份,后續備份采用增量備份和版本庫同步
     ②完全備份在晚上定時進行,增量備份和版本庫同步在用戶提交時進行

    注意:這個策略實際上是有較大問題的(包括備份的方式,頻度,時間):通常完全備份會在每周,月進行一次。而增量備份會,版本庫同步會在每天晚上定時執行,而不是在每次用戶提交后執行,以縮短請求響應。但這里因為本著簡單的原則,只是抽取了最簡單的策略

    【3.相關命令】
    SVN用于備份的命令有以下三個,分別對應于完全備份,增量備份,版本庫同步。

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

    關于這三個命令的具體用法,請大家自行參考SVN的用戶手冊以獲得更多資訊。

    【4.示例操作】
    注:本示例代碼均為網上下載,非本人原創。

    Example 1:完全備份

    fullbackup.bat
    @echo off

    @echo 不同的系統平臺和時間格式設置會影響目錄的創建,請先用echo命令輸出日期格式并做相應調整

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

    rem 所有版本庫的父目錄
    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 如果備份的子目錄不存在則先創建
    if exist %BACKUP_DIRECTORY% goto checkBack
    echo 建立備份目錄%BACKUP_DIRECTORY%
    >>%BACKUP_SVN_ROOT%/backup.log
    mkdir %BACKUP_DIRECTORY%

    rem 驗證目錄是否為版本庫,如果是則取出名稱備份
    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%已經存在,請清空。
    goto end
    :
    end

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

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

    將這兩個文件放在repository的同級目錄下,執行之則可以。讀者可以自行修改上面的環境變量設置

    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 不同的系統平臺和時間格式設置會影響目錄的創建,請先用echo命令輸出日期格式并做相應調整

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

    :
    end

    這個批處理文件的重點在于%UNIX_SVN_ROOT%/%%~nI == %1這句話。它的作用是判斷當前提交的目標版本庫是不是和循環中的變量值相同,如果是那么認為該修改是提交到這個版本庫的,就可以進行增量備份了。我在運行這個文件時,一開始老是失敗,后來發現原因居然是路徑的寫法問題。

    請注意UNIX_SVN_ROOT這個變量的路徑值寫法,如果你換成SVN_ROOT看看,肯定是不會成功的。因為路徑的寫法不同! 

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

    這個文件里面特別要注意的就是--incremental這個參數,如果你不加上去的話以后再執行load就會提示版本庫已經存在的錯誤了!而--revision則用于指定備份的版本。

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

    Example 3:版本庫同步

    首先創建一個版本庫用于同步(目標版本庫),其次要在源版本庫和目標版本庫之間建立聯系。這是通過svnsync init來達到的。

    svnsync init 目標庫URL 源庫URL

    這個命令執行過程中可能需要增加兩個參數--username和--password用于指明目標版本庫的用戶名和密碼。

    其次在目標版本庫的hooks目錄下建立一個空的文件并命名為pre-revprop-change.bat。這一步很重要,否則會出現鑒權失敗的錯誤。最后就是在源版本庫的hooks目錄下建立一個名為post-commit.bat的文件,如下所示:

    echo off

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

    但用戶在源版本庫執行了相應的修改動作之后,你會發現目標版本庫也出現了同樣的修改!

    附件:完整測試目錄及腳本文件


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


    FeedBack:
    # re: 【版本控制之路】版本庫的備份
    2008-12-30 19:04 | 激情
    just test!!!  回復  更多評論
      
    # re: 【版本控制之路】版本庫的備份
    2008-12-31 20:00 | 夢想在這里起飛
    寫得不錯啊,看看我這個
    開源的報表ireport項目web應用
    http://ireport.cubebi.com


      回復  更多評論
      
    # re: 【版本控制之路】版本庫的備份[未登錄]
    2009-01-01 11:01 | Paul Lin
    @夢想在這里起飛

    支持國產軟件,很不錯!
      回復  更多評論
      
    # re: 【版本控制之路】版本庫的備份
    2009-01-02 11:43 | 愛吃魚頭
    svn很重要!備份很重要!向lz學習了!  回復  更多評論
      
    # re: 【版本控制之路】版本庫的備份
    2010-03-30 11:01 | 醉月茶
    很好,拜讀了~  回復  更多評論
      
    <2008年12月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點博客

    好友博客

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲网址在线观看| 国产男女爽爽爽爽爽免费视频| 丁香婷婷亚洲六月综合色| 久久久久亚洲爆乳少妇无| 性色av免费观看| 182tv免费视视频线路一二三| 国产精品免费视频观看拍拍| 亚洲精品久久久久无码AV片软件| 久久久久久亚洲精品成人| 亚洲日韩人妻第一页| 岛国片在线免费观看| 69式互添免费视频| 久久免费看少妇高潮V片特黄| 国产一级黄片儿免费看| 日韩大片免费观看视频播放| 欧美亚洲国产SUV| 亚洲成a∨人片在无码2023| 亚洲综合久久精品无码色欲| 亚洲国产福利精品一区二区| 亚洲综合区图片小说区| 亚洲视频在线观看一区| 久久亚洲精品成人777大小说| 亚洲最大AV网站在线观看| 4338×亚洲全国最大色成网站| 亚洲国产精品13p| 亚洲第一黄色网址| 亚洲国产成人精品女人久久久| 免费人成网站在线播放| 国产乱子伦精品免费无码专区| 国产免费观看网站| 亚洲免费在线观看| 国内精品久久久久久久亚洲| 亚洲线精品一区二区三区影音先锋 | 热re99久久6国产精品免费| 免费看黄的成人APP| 秋霞人成在线观看免费视频| 波多野结衣免费一区视频 | 女人18毛片水最多免费观看| 大香人蕉免费视频75| 日韩一级视频免费观看| 亚洲av区一区二区三|