• linux还原svn


    仓库中版本的备份及还原形式主要有两种:
    方式一:直接备份仓库整个文件夹(全部版本),重装svn程序后直接还原过去。
    方式二:通过svn命令行备份和还原指定版本号的数据
    全备份:使用svnadmin hotcopy或svnsync来做,例:
    svnadmin hotcopy path/to/repository path/to/backup –clean-logs
    增量备份:使用svnadmin dump的–incremental选项来实现
    svnadmin dump 版本库路径及名称 –revision 上次导出的版本号:到本次要导出到的版本号 –incremental > 导出的命名
    还原版本:svnadmin load 要恢复的版本库路径及名称 < 导出的命名
    svnadmin hotcopy path/to/repository path/to/backup –clean-logs
    一个技巧:如果你有一个较大的Subsersion版本库而你又想用最少的空间来将它备份下来,用这个命令(请将/repo替换成你的版本库路径)吧:
    svnadmin dump –deltas /repo |bzip2 |tee dump.bz2 | md5sum >dump.md5
    分步解释:最重要的一步是 -deltas,将消耗更多的CPU资源,但拥有更有效的差异存储办法。
    bzip2压缩方案比gzip慢,但换来的更好的压缩率。
    更有趣的是,tee方法将压缩的数据流转向到文件dump.bz2,同时将其输出到标准输出,后者有转向给了MD5摘要计算工具。
    要恢复这个版本库,检查校验值(md5sum创建的),创建一个空的版本库,恢复备份:
    md5sum -c dump.md5 <dump.bz2
    svnadmin create newrepo
    bzcat dump.bz2 | svnadmin load newrepo
    请享受压缩后用MD5校验的备份吧,最后别忘记将dump.md5和dump.bz2存储到真正安全的地方!
    http://www.linuxpf.com.cn/bbs/viewthread.php?tid=304&extra=page%3D1 用脚本实现svn备份2008-04-17 18:09
    文章出于:http://hi.baidu.com/zhangwf/blog/item/f94ca8518a5aa38a8d54305b.html
    vi baksvn
    #!/bin/bash
    # Program:
    #         This program is subversion data backup script
    # History:
    #         2008/04/17        zwf        1.0
    #---------------------------------------------------------------
    LogFile=/var/backup/svnbak.log
    DATE=`date +%Y%m%d`
    BakDir=/var/backup
    ProjectLst=/var/backup/conf/project.lst
    SvnDir=/home/svn
    SVNADMIN=/usr/local/bin/svnadmin
    echo "svn backup start at $(date +"%y-%m-%d %H:%M:%S")" >> $LogFile
    echo "------------------------------------------------" >> $LogFile
    cd $BakDir
    PROJECTLIST=`cat $ProjectLst`
    for project in $PROJECTLIST
    do
        projectdata=$SvnDir/$project
        destdir=$BakDir/$project
        dumpfile=$DATE.$project.tgz
    if [ -f $BakDir/$dumpfile ]
    then
        echo "backup file have exist!" >>$LogFile
    else
    $SVNADMIN hotcopy $projectdata $destdir --clean-logs
    tar zcvf $dumpfile $project > /dev/null
    rm -fr $project
    echo "backup $project done into $dumpfile ">>$LogFile
    fi
    oldfile="$BakDir/"$(date +%Y%m%d --date='2 days ago').$project.tgz
    if [ -f $oldfile ]
    then
        rm -f $oldfile >> $LogFile 2>&1
        echo "[$oldfile],Delete Old File Success!" >> $LogFile
    else
        echo "[$oldfile],No Old Backup File!" >> $LogFile
    fi
    echo " " >> $LogFile
    done
    echo "------------------------------------------------" >> $LogFile
    echo "svn backup end at $(date +"%y-%m-%d %H:%M:%S")" >> $LogFile
    echo " " >> $LogFile
    假如你想把svn备份到另外一台电脑上的话,可以在这段script中再加入下面这段代码来利用FTP自动备份到另外的电脑上!!
    #The shell script will automatically put the backup file
    # from this host to another hosts
    #
    FTP_SERVER="10.8.1.65"
    USERNAME="zwf"
    PASSWD="1212"
    FTP_QUERY_PATH="/opt/raid/svnbak"
    FILE_NAME=`date +%Y%m%d`*.tgz
    DELFILE=`date +%Y%m%d --date='2 days ago'`*.tgz
    ftp -i -n $FTP_SERVER<<AUTO_FTP
    user $USERNAME $PASSWD
    passive
    binary
    cd $FTP_QUERY_PATH
    mdelete $DELFILE
    mput $FILE_NAME
    AUTO_FTP
    rm -rf $FILE_NAME
    以下文字详见:《[url=]使用Subversion进行版本控制[/url]》一书 http://www.subversion.org.cn/svnbook/
    我们也可以利用Subversion开发小组提供的备份脚本来对svn仓库进行备份。Subversion 源文件分发版本的tools/backup/目录有一个hot-backup.py文件。只要给定了版本库路径和备份路径,hot-backup.py— 一个包裹了svnadmin hotcopy但更加智能的命令—将会执行必要的步骤来备份你的活动的版本库—不需要你首先禁止公共的版本库访问—而且之后会从你的版本库清理死掉的伯克利日志文件
    甚至当你用了一个增量备份时,你也会希望有计划的运行这个程序。举个例子,你考虑在你的调度程序(如Unix下的cron)里加入hot-backup.py,或者你喜欢更加细致的备份解决方案,你可以让你的post-commit的钩子脚本执行hot-backup.py,这样会导致你的版本库的每次提交执行一次备份,只要在你的hooks/post-commit脚本里添加如下代码:
    (cd /path/to/hook/scripts; ./hot-backup.py ${REPOS} /path/to/backups &)作为结果的备份是一个完全功能的版本库,当发生严重错误时可以作为你的活动版本库的替换。
    两种备份方式都有各自的优点,最简单的方式是完全备份,将会每次建立版本库的完美复制品,这意味着如果当你的活动版本库发生了什么事情,你可以用备份恢复。但不幸的是,如果你维护多个备份,每个完全的备份会吞噬掉和你的活动版本库同样的空间。
    顺便转载一段关于钩子脚本的叙述
    [url=]钩子脚本[/url] Hook scripts
    挂勾 (hook) 是改动档案库时所触发的程序, 比如当你提交更动前,会先触发pre-commit,提交更动后,则会触发post-commit,我们可以利用hook来实现一些自动控制。档案库的hook 子目录中, 预设是放置各个档案库挂勾的范本:
    post-commit.tmpl
    pre-revprop-change.tmpl
    post-revprop-change.tmpl
    start-commit.tmpl
    pre-commit.tmpl
    如果要使用这些hook,就必须把它的后缀名.tmpl去掉,拷贝为
    post-commit
    pre-revprop-change
    post-revprop-change
    start-commit
    pre-commit
    这里主要介绍pre-commit和post-commit(事实上它们就是在特定的情况下被触发的普通的shell程序,至于shell的内容由用户自己随意编写,但是要保证名称不能改动)
    pre-commit
    本挂勾执行的时间为异动完成之后, 送交之前.档案库会传递两个自变量给这个程序: 档案库的路径, 以及准备送交的异动名称. 如果程序传回一个非零的结束值, 送交会被中止, 而异动会被删除.
    如何应用pre-commit我们不妨举个例子:
    假如有一个项目由Mail Team,Login Team和PHP Team三个Team共同通过SVN系统开发完成。当项目准备发布的时候, PM人员发现Mail功能方面存在一些 bug,需要Mail Team去修改,为了防止其它Team的人员修改系统,我们可以在任何改动档案库的企图之前用pre-commit去检查log message信息,(因为任何更动档案库的操作都必须提供log message信息,PM可以事先舆 Mail Team约定好一个log message),如果舆pre-commit中设定的log message不相符,则不能提交更动。
    pre-commit源程序如下:
    #!/bin/sh
    REPOS="$1"
    TXN="$2"
    SVNLOOK=/usr/local/bin/svnlook
    $SVNLOOK log -t "$TXN" "$REPOS" |
    grep –w "bug1234" > /dev/null || exit 1
    exit 0
    本例中的log message为”bug1234”,任何人想要提交更动就必须用 –m “bug1234”参数,采用-m “bug123”,-m “bug12345”都会提交失败。
    post-commit
    本挂勾执行的时间是在异动送交, 新修订版被建立之后. 大多数的人用这个挂勾来寄出关于本次送交的电子邮件, 或是建立档案库的备份. 档案库会传递两个自变量给这个程序: 档案库的路径, 以及新建立的修订版号. 本程序的结束码会被忽略.
    Subversion 源码树的 tools/hook-script 目录中包含了一个 commit-email.pl 命令,可以用来寄送包含描述指定送交的电子邮件. 这个邮件包含了更动路径列表, 该送交所对应的记录讯息, 使用者, 送交的日期,以及一个以 GNU diff 样式表示的本次更动差异. 我们可以将这个程序舆post-commit这个hook搭配起来使用来实现档案库更动后自动mail给相关人员的功能。
    post-commit源程序如下:
    #!/bin/sh
    REPOS="$1"
    REV="$2"
    commit-email.pl "$REPOS" "$REV" #####需要指明commit-email.pl的绝对路径

    http://www.cnblogs.com/zealic/archive/2008/11/26/1341784.html SVN 简单备份与还原 (windows脚本)

    备份 SVN 仓库是很麻烦的事,而 Coder 通常是很怕麻烦的人,于是 Zealic 就为减少麻烦,花了一点麻烦的时间,写了两个麻烦的脚本,解决了这个麻烦的问题。

    1.备份脚本 DumpAll.bat   。。。@rem 7za a Repos_%VAR_DATE%.7z *.bin 【需要修改为   jar cvf Repos_%VAR_DATE%.jar *.bin】

    2.还原脚本 LoadAll.bat。。。手工解压.bin文件后,当前目录下删除所有目录,否则无法运行。

  • 相关阅读:
    第九节 堆栈的概念和python代码实现
    第八节 单向循环链表简单介绍和python代码实现
    第七节 双向链表简单介绍和python代码实现
    第六节 单链表简单介绍和python代码实现
    第五节 顺序表的原理与python中的list类型
    第四节 抽象数据类型
    第三节 Python列表类型性能测试以及内置字典操作的时间复杂度分析
    第二节 大O表示法和时间复杂度
    MySQL优化指南
    Java类加载机制详解
  • 原文地址:https://www.cnblogs.com/Mygirl/p/3177337.html
Copyright © 2020-2023  润新知