精华内容
下载资源
问答
  • 备份远程svn
    2021-08-02 07:10:38

    备份-如何备份远程SVN存储库

    我目前正在将SVN服务器从家庭服务器移至远程服务器,以便可以从其他位置更轻松地访问它。我的远程服务器未备份,因此我想定期将其备份到我的家庭服务器。

    远程服务器是Windows 2003服务器。 主服务器是Windows Home Server。

    做这个的最好方式是什么? 我可以每天晚上让我的家庭服务器获取远程服务器的转储吗? 带宽不是一个很大的考虑因素,但是如果我可以将任何新签入复制到我的家庭服务器上的SVN服务器上,那会很好。

    任何建议欢迎。

    Roaders asked 2020-06-19T01:45:38Z

    9个解决方案

    116 votes

    只需使用svnsync命令。

    首先,在您的家用计算机上创建一个新的存储库。

    svnadmin create c:\backuprepo

    或在Unix上:

    svnadmin create ./backuprepo

    接下来,创建一个名为pre-revprop-change.bat的文件:

    echo exit 0 > c:\backuprepo\hooks\pre-revprop-change.bat

    或在Unix上:

    echo -ne '#!/bin/sh\nexit 0' > ./backuprepo/hooks/pre-revprop-change

    chmod ugo+x ./backuprepo/hooks/pre-revprop-change

    然后,初始化同步:

    svnsync init file:///c:/backuprepo https://url/of/your/repository

    或在Unix上:

    svnsync init file:///Volumes/volumelabel/backuprepo https://url/of/your/repository

    之后,您只需运行

    svnsync sync file:///c:/backuprepo

    大约一天一次,您将仅获得备份存储库中尚未发生的那些更改。 第一次需要一段时间,但是在将备份存储库与实际备份存储库同步之后,只需几秒钟即可同步它,因为仅需要同步那些新的修订。

    Stefan answered 2020-06-19T01:46:23Z

    17 votes

    从1.7版开始,您还可以使用新命令svnrdump。从文档中:

    转储(即生成的存储库转储流)对位于SOURCE_URL的存储库项目的修订,将信息打印到标准输出。

    用法是:

    svnrdump dump http://example.com/repos/ > repos.dump

    这将在svnrdump中创建存储库的“转储文件”。这是对存储库数据(包括历史记录)的完整备份,但是Subversion客户端无法直接读取。 如果需要还原此数据,请使用标准的gzip工具:

    svnadmin create c:\backup-repos

    svnadmin load c:\backup-repose < repos.dump

    尚未进行任何测试,但是最终结果可能会比2929192827840840103424慢。gzip每次都会对存储库进行一次完整的转储,我假设synsync仅从上次运行以来才导入存储库中的更改。 但是,您将拥有一个包含整个存储库的文件,该文件可能更容易管理,也可能不容易管理。

    请注意,您可能希望将svnrdump的输出通过gzip或类似程序进行传递,以可能显着减小输出文件的大小。

    joesdiner answered 2020-06-19T01:47:06Z

    11 votes

    创建本地存储库

    svnsync sync file:Users/jsmith/repo

    创建一个空的revprop-change挂钩脚本

    svnsync sync file:Users/jsmith/repo

    使pre-revprop-change挂钩脚本可执行

    svnsync sync file:Users/jsmith/repo

    初始化svnsync

    svnsync sync file:Users/jsmith/repo

    同步仓库

    svnsync sync file:Users/jsmith/repo

    yanokwa answered 2020-06-19T01:48:04Z

    7 votes

    rsync(或DeltaCopy是Windows UI的顶部)是在文件系统级别增量复制完整存储库的一个不错的选择。

    您也可以使用svnsync将新修订直接从一台SVN服务器复制到另一台SVN服务器。

    Wim answered 2020-06-19T01:48:29Z

    2 votes

    您可以在远程服务器上使用脚本,该脚本转储存储库,然后将其复制到本地计算机(或将其保留在预定义位置以供本地计算机复制)

    您可以使用rsync或scp同步备份目录。

    该脚本可以与“计划任务”一起运行,并且可以生成唯一命名的备份文件,稍后将通过本地计算机以上述方式同步该备份文件。 (然后可能删除)

    EFraim answered 2020-06-19T01:48:58Z

    2 votes

    在我撰写本文时,EFraim提到了rsync,因此已涉及到。

    如果您不想使用它,Subversion本书提供了svnadmin dump --incremental选项,在此处进行了说明:

    存储库维护(将页面向下滚动到“备份”部分)

    迁移存储库中有关svnadmin dump --incremental的示例

    但是,要成功完成此操作,您必须处理修订号-重新同步原始存储库数据目录会更加容易。

    困难的部分可能是设置rsync,以便您的本地和远程计算机可以安全地通信(即在2003服务器上设置SSH服务)。 Wim提到的DeltaCopy非常有趣,这将是我的第一枪。 仅适用于命令行操作,这是有关如何使Rsync作为Windows 2003上的服务运行的方法。

    Pekka 웃 answered 2020-06-19T01:49:41Z

    1 votes

    我将使用svnsync或svnadmin hotcopy,因为即使交易正在进行,这两种技术都可以保证从存储库中复制有效数据。 取决于存储库格式,其他文件同步技术可能不那么可靠。

    Damian Powell answered 2020-06-19T01:50:01Z

    0 votes

    在Mac OS X 10.10中,/Library/Developer/CommandLineTools/usr/bin/svnrdump命令位于此处:

    /Library/Developer/CommandLineTools/usr/bin/svnrdump

    然后,您可以使用joesdiner的上述答案。

    Software Engineer answered 2020-06-19T01:50:30Z

    0 votes

    为了扩展Stefans的答案,以下是一些Windows批处理脚本,以帮助稍微自动化该过程。

    svn-backup-init.bat

    @echo off

    set /P directory="Local Directory: "

    set /P URL="Svn URL: "

    echo "Running SVN backup";

    @echo on

    svnadmin create %directory%

    echo exit 0 > %directory%\hooks\pre-revprop-change.bat

    svnsync init file:///%directory% %URL%

    svnsync sync file:///%directory%**strong text**

    该脚本将创建svn存储库,并将其检出并立即进行同步。 运行脚本时,只需输入将存储库放置在本地的目录以及要使用的服务器的URL。

    svn-backup-run.bat

    for /d %%i in (%~dp0*) do ( svnsync sync file:///%%i )

    这将循环遍历每个目录并运行svnsync命令。 如果您有多个存储库,请将它们检出到同一文件夹中。 然后可以轻松地将其添加为Windows中的“任务”,以一次更新所有存储库。

    资料夹结构

    我使用这样的文件夹结构:

    .

    ├── svn-backups

    | ├── repo-1

    | ├── repo-2

    | ├── repo-3

    | ├── svn-backup-init.bat

    | └── svn-backup-run.bat

    Joe Jankowiak answered 2020-06-19T01:51:16Z

    更多相关内容
  • svn远程备份

    2019-03-02 09:30:17
    网络上如何进行远程svn备份 首先建立版本库,apache下建立用户。
  • SVN服务器备份

    千次阅读 2022-04-25 11:30:50
    SVN数据备份、还原、适用情况、部分异常处理等介绍。介绍三种主要备份方式:hotcopy、dump以及svnsync。


    前言

    SVN数据备份、还原、适用情况、部分异常处理等介绍。备份方式主要有hotcopy、dump以及svnsync三种方式。三类备份方式各有优劣,根据自身情况及需求选择即可。

    此外,特别说明,备份还原或者同步后数据原权限分配在特殊情况下可能失效,导致客户端无法正常访问情况。因此还原后最好检查各仓库权限配置是否正常并调整。权限分配方法可参根据需要参考 SVN服务器安装 - Linux系统 或者 SVN服务器安装 - Windows系统


    1 hotcopy备份

    1.1 方法说明

    hotcopy备份本质上就是仓库完整拷贝。

    优点 - 备份过程较快,灾难恢复也快。
    缺点 - 无法分段备份,因此单次备份时,硬盘消耗相对较大 。

    整体上对比来说,hotcopy的灵活度比不过dump,即时同步方面比不上过svnsync;而相对的,他的备份跟恢复方法简单便捷,备份跟恢复的速度也比dump快。特别是当仓库大,版本数量级达到数万之后,hotcopy在这方面的优势会远远大于dump。

    1.2 手动备份

    如果当前SVN服务器处于未使用状态,直接使用对应系统的复制黏贴功能,最终结果是一样的;若处于使用中,当某些文件处于锁定状态,直接用复制黏贴功能可能出现文件损坏等不可预计问题,此时建议使用官方指令。

    备份指令:
    svnadmin hotcopy /svn/project /backup/project 或者
    svnadmin hotcopy /svn/project /backup/project --clean-logs

    注:/svn/project为原库,/backup/project为备份库

    1.3 自动备份

    自动备份一般是通过编写备份脚本,再通过系统定时任务功能调用该脚本实现。

    1.3.1 备份脚本

    备份脚本在不同系统下略有差异。如下提供Linuxs与Windows两个系统的脚本示例。

    A. Linux系统

    a) 执行指令: vi hotcopy.sh

    b) 编辑内容:

    #!/bin/sh
    #仓库根目录
    home=/svn/store
    #备份根目录
    backup=/back
    
    #备份根目录不存在则创建
    if [ ! -d "$backup" ]; then
    mkdir -p $backup
    fi
    
    #备份仓库名
    store1=project
    
    #备份仓库目录存在则删除, 做个赋值动作保证删除动作完成后再备份
    if [ -d "$backup/$store1" ]; then
    result=`rm -rf $backup/$store1`
    fi
    
    #执行备份指令
    /usr/bin/svnadmin hotcopy $home/$store1 $backup/back_${store1} --clean-logs
    

    c) 编辑完成后,按键盘Esc键后输入 :wq 按回车键保存退出

    d) 设置文件操作权限

    指令: chmod 777 hotcopy.sh

    B. Windows系统

    a) 新建TXT文档

    b) 编辑文档内容

    echo off
    
    rem SVN安装路径
    set svn="C:\Program Files (x86)\VisualSVN Server\bin"
    
    rem 仓库根目录
    set home=E:\SVN
    
    rem 备份根目录
    set back=D:\backup
    
    rem 仓库
    set store=Report
    
    rem 备份根目录是否存在
    if exist %back% goto check1
    md %back%
    
    :check1
    rem 若备份仓库目录存在,删除备份仓库目录,否则备份无法正常执行
     if not exist %back%\%store% goto check2
     rd /s/q %back%\%store%
    
    :check2
    rem 进入SVN安装路径
    cd %svn%
    rem 执行备份
    svnadmin hotcopy %home%\%store% %back%\%store% --clean-logs
    

    c) 保存文件为hotcopy.bat

    记得在“保存类型”中“所有文件(.)”,否则最终输出文件会变成hotcopy.bat.txt

    1.3.2 定时任务

    不同系统定时任务设置方式也有差异,这里主要介绍Linux系统及Windows系统定时任务设置。

    A. Linux系统

    a) 编辑定时任务

    执行指令:vi /etc/crontab
    在文档最后添加内容:
    0 0 * * * root /home/script/hotcopy.sh

    格式为:分 时 日 月 周 用户 脚本路径

    b) 查看定时器当前状态

    指令:service crond status

    若定时器未启动,可执行启动指令:systemctl start crond.service

    结果输出类似如下表示已启动:

    Redirecting to /bin/systemctl status crond.service
    ● crond.service - Command Scheduler
       Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
       Active: active (running) since 日 2022-04-10 07:19:22 CST; 1 weeks 5 days ago
     Main PID: 1263 (crond)
       CGroup: /system.slice/crond.service
               └─1263 /usr/sbin/crond -n
    
    4月 10 07:19:22 localhost.localdomain systemd[1]: Started Command Scheduler.
    4月 10 07:19:22 localhost.localdomain systemd[1]: Starting Command Scheduler...
    4月 10 07:19:22 localhost.localdomain crond[1263]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 27% if used.)
    4月 10 07:19:22 localhost.localdomain crond[1263]: (CRON) INFO (running with inotify support)
    4月 22 17:13:01 localhost.localdomain crond[1263]: (*system*) RELOAD (/etc/crontab)
    

    c) 查看执行记录

    指令:cat /var/spool/mail/root

    说明:指令中最后的root为用户名

    B. Windows系统

    a) 右键“计算机”,在菜单中选择“管理”。

    在这里插入图片描述

    注:“计算机”示例是在Windows程序菜单选择的。实际也可以在文件夹左侧目录或者桌面图标中选择

    b) 在“计算机管理”界面中,选择左侧“任务计划程序”,后,点击右侧“创建基本任务”。

    在这里插入图片描述

    注:也可以选择右侧第二个“创建任务”进行更复杂的设置,不过一般来说基本任务就可以满足相关操作了。

    c) 设置任务名称及描述

    在这里插入图片描述
    d) 设置触发器,即任务周期时间

    在这里插入图片描述在这里插入图片描述

    注:这部分可以根据自身需求执行设置相关内容,示例为每天零时备份

    e) 设置操作,选择“启动程序”并设置好需要执行的脚本,进入“下一步”
    在这里插入图片描述
    在这里插入图片描述
    f) 完成,该部分会展示整个设置结果,检查设置是否正确。点击“完成”完成任务设置
    在这里插入图片描述
    g) 最后可通过左侧“任务计划程序库”查看定时任务设置是否成功
    在这里插入图片描述

    1.4 还原方法

    整体仓库还原方法相对简单。根据实际情况,主要有两种还原方法

    A. 修改仓库根目录

    该方法主要使用在原系统未安装SVN服务器的情况下,直接将仓库根目录指定到备份仓库所在父级目录。

    B. 复制备份仓库到仓库根目录

    该方法适用于原系统已经安装SVN服务器。

    注:其实,若参考根目录下无任何仓库,或者其中仓库数据明显小于备份仓库的情况下,也可以使用A方法,然后将原有的仓库移到新的根目录下。

    1.4.1 VisualSVN 还原

    A. 修改仓库根目录

    修改仓库根目录有两种方式

    a) 在软件安装过程中,到如下步骤时,将Respositories路径设置为备份仓库所在父级目录
    在这里插入图片描述
    b) 软件安装完成后,运行VisualSVN。点击操作“Properties”,打开“VisualSVN Server Properties”对话框,并选中“Storage”选项卡,修改其中“Repositores Root”选项,点击“确认”保存即可。
    在这里插入图片描述
    在这里插入图片描述
    B. 复制备份仓库到仓库根目录

    通过A方法中的b) 方法找到仓库根目录,将备份仓库直接复制黏贴到该路径下即可。

    1.4.2 SubVersion 还原

    A. 修改仓库根目录

    a) 停止已运行的svn服务,若未运行过,直接忽略即可

    指令:killall svnserve

    b) 启动svn服务

    指令:svnserve -d -r /backup --listen-port=3690

    注:其中/svn/back为参考根目录

    B. 复制备份仓库到仓库根目录

    指令:cp -rf /backup/project /svn

    注: /backup/project为备份仓库, /svn为仓库根目录

    1.5 异常提示

    A. 异常现象

    expected fs format between 1 and 4 found format 6
    

    B. 解决方法

    该原因主要由于源库版本较低引起的。新库VisualSVN更新到版本2.7.1以上,Subversion更新到版本1.7.2以上,基本可以解决该问题。


    2 dump备份

    2.1 方法说明

    dump是官方推荐的备份方式,需使用专门的版本还原机制。

    优点 – 可全量备份也可增量备份,可根据需要灵活备份或还原指定版本。
    缺点 – 相对还原麻烦,特别是版本量多时,还原速度较慢。

    整体上对比来说,dump的主要优势就在于灵活。虽然它是官方推荐的备份方式,但是目前从使用方便度来说,个人觉得没有hotcopy跟svnsync好用,除非真有这类灵活备份还原的需求。

    都说hotcopy硬盘损耗大,其实dump备份更大。hotcopy备份库也就跟原库一样大,但是用dump备份的后不管是全量还是增量备份,最后都会比原库大很多。

    个人SVN仓库27.5G、1.7w+版本,采用全量备份,备份文件45G,采用增量备份,各分段备份文件总和也是45G。备份文件差不多是原库大小的1.6倍。

    所以在硬盘资源方面它相对于hotcopy其实是没有优势,而还原备份速度方面的劣势就更不用说了。

    可能在本章的自动备份脚本里面会发现,dump增量备份里面,可以根据是否版本有更新再确定是否进行备份操作,而hotcopy跟dump全量备份里都是直接备份的。从这个方面来说dump的增量备份貌似会有优势。但是,实际上,另外两个脚本也可以加同样的版本判断的,只是我没加上去,实际应用中,可根据需要自行添加的,方法参考增量备份的脚本即可。

    2.2 手动备份

    dump只能通过指令备份。

    在linux系统中,可直接通过dump指令执行。但是在Windows中,必须使用DOS指令进入到软件安装路径的bin文件夹下才能进行相关操作,如下图所示。
    在这里插入图片描述
    无论是Linux系统还是Windows系统,备份指令是相同的,具体如下。

    全量备份:svnadmin dump /svn/project --revision 100> /back/project100.dump

    增量备份:svnadmin dump /svn/project --revision 101:200 --incremental > /back/project101-200.dump

    注:
    /svn/project为原库,
    /back/project100.dump、/back/project101-200.dump为备份文件名,
    100、101、200为需要备份的版本

    2.3 自动备份

    2.3.1 备份脚本

    备份脚本在不同系统下略有差异。如下提供Linuxs与Windows两个系统的脚本示例。

    A. Linux系统

    a) 执行指令: vi dump.sh

    编辑内容 b)、c)二选一即可。全量备份脚本选择 b)、增量备份脚本选择 c)

    b) 全量备份编辑内容

    #!/bin/sh
    # 仓库根目录
    home=/svn/store
    # 备份根目录
    backup=/back
    
    # 备份根目录不存在则创建
    if [ ! -d "$backup" ]; then
    mkdir -p $backup
    fi
    
    # 备份仓库名
    store1=r1
    # 时间字符串变量
    d=$(date '+%Y%m%d') 
    
    # 备份指令
    /usr/bin/svnadmin dump $home/$store1 > $backup/${store1}_${d}.dump
    

    c) 增量备份编辑内容:

    #!/bin/sh
    # 仓库根目录
    home=/svn/store
    # 备份根目录
    backup=/back
    
    # 备份根目录不存在则创建
    if [ ! -d "$backup" ];then
    mkdir -p $backup
    fi
    # 备份仓库名
    store1=project
    
    # 备份根仓库目录不存在则创建
    if [ ! -d "$backup/$store1" ];then
    mkdir -p $backup/$store1
    fi
    
    # 获取仓库当前最新版本
    svnlook youngest $home/$store1 > $backup/tmp_${store1}.TMP
    upper=$(cat $backup/tmp_${store1}.TMP)
    
    # 上次备份版本信息文件不存在最低版本为1,存在读取
    if [ ! -f "$backup/last_${store1}.txt" ];then
    lower=1
    else
    num_lower=$(cat $backup/last_${store1}.txt)
    lower=`expr $num_lower + 1`
    fi
    
    # 上次备份版本小于等于最高版本时,执行备份操作,并重写上次备份版本信息文件
    if [ $num_lower -le $upper ]; then
    
    svnadmin dump $home/$store1 --revision $lower:$upper --incremental > $backup/${store1}_$lower-$upper.dump
    
    echo $upper > $backup/last_${store1}.txt
    
    fi
    
    # 删除临时版本文件
    rm -rf tmp_${store1}.TMP
    

    d) 编辑完成后,按键盘Esc键后输入:wq按回车键保存退出

    e) 设置文件操作权限

    指令: chmod 777 dump.sh

    B. Windows系统

    a) 新建TXT文档

    编辑内容 b)、c)二选一即可。全量备份脚本选择 b)、增量备份脚本选择 c)

    b) 全量备份编辑内容

    echo off
    
    rem SVN安装路径
    set svn="C:\Program Files (x86)\VisualSVN Server\bin"
    
    rem 仓库根目录
    set home=E:\SVN
    
    rem 备份根目录
    set back=D:\backup
    
    rem 仓库
    set store=Report
    
    rem 备份根目录是否存在
    if exist %back% goto check1
    md %back%
    
    :check1
    rem 若备份仓库目录不存在,则创建仓库
     if exist %back%\%store% goto check2
    md %back%\%store%
    
    :check2
    rem 时间字符串变量
    set d=% date:~0,4%%date:~5,2%%date:~8,2%
    rem 进入SVN安装路径
    cd %svn%
    rem 执行备份
    svnadmin dump %home%/%store% > %backup%/%store%_%d%.dump
    

    c) 增量备份编辑内容

    echo off
    
    rem SVN安装路径
    set svn="C:\Program Files (x86)\VisualSVN Server\bin"
    
    rem 仓库根目录
    set home=E:\SVN
    
    rem 备份根目录
    set back=D:\backup
    
    rem 仓库
    set store=Report
    
    rem 备份根目录是否存在
    if exist %back% goto check1
    md %back%
    
    :check1
    rem 备份仓库目录是否存在
    if exist %back%\%store% goto check2
    md %back%\%store%
    
    :check2
    rem 进入SVN安装路径
    cd %svn%
    
    rem  获取指定仓库当前最新版本
    svnlook youngest %home%\%store% > %back%\%store%\TMP.TXT
    set /p upper=<%back%\%store%\TMP.TXT
    
    rem 设置最低版本为0
    set lower=0
    
    rem 是否存在上次备份版本信息,存在则读取数据更换最低版本值
    if not exist %back%\%store%\last.txt goto check3
    
    set /p lower=<%back%\%store%\last.txt 
    
    :check3
    rem 最低版本加1
    set /a lower=lower+1
    
    rem 如果最低版本大于最高版本,不备份
    if %lower% gtr %upper% goto end
    
    rem 执行备份指令
    svnadmin dump %home%\%store% --revision %lower%:%upper% --incremental > %back%\%store%\%lower%-%upper%.dump
    rem 更新上次备份版本信息
    echo %upper% > %back%\%store%\last.txt 
    
    :end
    rem  删除临时版本文件
    del %back%\%store%\TMP.TXT
    

    d) 保存文件为dump.bat

    记得在“保存类型”中“所有文件(.)”,否则最终输出文件会变成dump.bat.txt

    2.3.2 定时任务

    定时任务设置方法可参考 1.3.2 定时任务,只需将对应脚本文件替换成2.3.1中的备份脚本即可。

    2.4 还原方法

    dump备份还原需使用load指令,全量备份情况下直接还原指定版本即可。增量备份文件需按版本顺序还原备份文件。

    指令:svnadmin load /svn/project < /back/project100.dump

    /svn/project为服务器仓库路径,/back/project100.dump为待恢复备份文件

    2.5 异常提示

    A. 异常现象

    出现异常提示,主要是在增量备份之时,可能出现如下异常提示:

    * 已转存版本 7292。
    WARNING 0x0000: 版本 2543 引用的数据比最旧的转存版本 (r7001) 还旧。加载这个转存到空的版本库会失败。
    WARNING 0x0000: 版本 2543 引用的数据比最旧的转存版本 (r7001) 还旧。加载这个转存到空的版本库会失败。
    * 已转存版本 7293。
    * 已转存版本 7294。
    * 已转存版本 7295。
    ……
    WARNING 0x0000: 导出的版本范围包含的引用超出导出范围。
    

    B. 异常原因

    造成该现象原因是因为版本管理过程中出现过版本回滚。以A中示例提示为例:版本7293是版本7292之后回滚到版本2543后修改后提交所得,而这个备份范围是在版本7000-8000,因此做增量比较时,找不到其中的相对源版本2543。

    C. 注意事项

    如果还原是所有版本逐步还原的情况下,这种提示可忽略,不受影响。但是如果想要删除部分版本的情况下,含这类异常提示的则需要特别处理。

    a) 不能删除高于或等于相对源版本的版本

    计划删除较老版本,只保留新版本的情况下,基础版本就不能大于相对源版本。以A中示例提示为例,在仅有以上提示情况下,新的基础版本号(全量备份)不能大于2543,否则无法还原。以下为该类操作示例。

    [root@localhost /]# svnadmin dump /svn/store/test/ --revision 7000 > /back/7000.dump
    * 已转存版本 7000。
    
    [root@localhost /]# svnadmin dump /svn/store/test/ --revision 7001:8000 --incremental > /back/7001-8000.dump
    ……
    * 已转存版本 7292。
    WARNING 0x0000: 版本 2543 引用的数据比最旧的转存版本 (r7001) 还旧。加载这个转存到空的版本库会失败。
    WARNING 0x0000: 版本 2543 引用的数据比最旧的转存版本 (r7001) 还旧。加载这个转存到空的版本库会失败。
    * 已转存版本 7293。
    ……
    * 已转存版本 7999。
    * 已转存版本 8000。
    WARNING 0x0000: 导出的版本范围包含的引用超出导出范围。
    
    [root@localhost /]# svnadmin load /svn/store/test < /back/7000.dump
    ……
         * 正在修改路径: Projects/test-Monitor-DBScript/MySQL/SiteMonitor/1.0 Init.sql ...完成。
         * 正在修改路径: Projects/test-Monitor-DBScript/MySQL/CenterMonitor ...完成。
         * 正在修改路径: Projects/test-Monitor-DBScript/MySQL/CenterMonitor/1.0 UpdateBusiness.sql ...完成。
    ------- 提交新版本 1 (从原始版本 7000 装载) >>>
    
    [root@localhost /]# svnadmin load /svn/store/test < /back/7001-8000.dump
    <<< 开始新的事务,基于原始版本 7094
         * 正在修改路径: Projects/test-Monitor-SMMonitor/src/com/idbk/test/sm/monitorx/alarmlogic/AlarmCatchingTask.java ...完成。
    ------- 提交新版本 95 (从原始版本 7094 装载) >>>
    <<< 开始新的事务,基于原始版本 7095
         * 正在修改路径: Projects/test-Monitor-SMMonitor/src/com/idbk/test/sm/monitorx/data/Device8583AlarmData.java ...svnadmin: E160006: 当前版本库不存在相对源版本 -90
    

    b) 不能删除中间版本

    增量版本必须按顺序逐个恢复,不能跳过中间版本。哪怕如示例中,版本7293的实际是版本是2543调整修改的,版本2544至7292看起来是可以废弃不用的,但是在备份还原中如果跳过这些版本依然无法还原。以下为该类操作示例。

    [root@localhost /]# svnadmin load /svn/store/test1 < /back/2543.dump
    ……
         * 正在修改路径: Projects/Versions/Bin/CS-网点充值/Logs/20150610.log ...完成。
         * 正在修改路径: Projects/Versions/Bin/CS-网点充值/Logs/20150619.log ...完成。
         * 正在修改路径: Projects/Versions/Bin/CS-网点充值/Logs/20150722.log ...完成。
         * 正在修改路径: Projects/Versions/Bin/CS-网点充值/dcrf32.dll ...完成。
         * 正在修改路径: Projects/Versions/Bin/ChargingStation-Web.war ...完成。
         * 正在修改路径: Projects/Versions/Bin/ChargingStation-WebMgr.war ...完成。
    ------- 提交新版本 1 (从原始版本 2543 装载) >>>
    
     [root@localhost /]# svnadmin load /svn/store/test1 < /back/7293-7300.dump 
    <<< 开始新的事务,基于原始版本 7293
         * 正在修改路径: Projects/CSProject/Common/Common.csproj ...完成。
         * 正在修改路径: Projects/CSProject/Common/Financial/DataInitialUserCard.cs ...完成。
         * 正在修改路径: Projects/CSProject/Common/HttpClient/DataQueryResult.cs ...完成。
         * 正在修改路径: Projects/CSProject/Common/HttpClient/LoginResult.cs ...完成。
         * 正在修改路径: Projects/CSProject/Common/HttpClient/VehicleBrands.cs ...svnadmin: E160006: 当前版本库不存在相对源版本 -4748
    

    3 svnsync同步

    3.1 方法说明

    svnsync需SVN1.4版本以上才支持。svnsync实际上是类似于同时存在两个SVN服务器,只是备份服务器相当于替补的角色。

    优点 – 当主服务器损坏时,备份服务器可以直接使用,无缝连接。
    缺点 – 无法直接还原到指定版本,初始服务器搭建配置相对前两种方法略复杂。

    svnsync是本人相对喜欢的备份方式。相对于其他两种备份方式而言,svnsync的初始配置相对要复杂很多,但是也就最开始的部署配置麻烦些,后面就很香了。

    最直接的就是省掉了备份还原的动作,不同于hotcopy跟dump需要另外借助系统任务管理功能定时进行备份操作,svnsync在客户端提交版本的同时就同步到备份服务器了,备份及时且方便。在主服务损坏时,另外两类备份方法需要重新搭建服务器或者复原仓库,但是svnsync备份服务器立即就可以用上。

    此外,svnsync一般是将仓库数据同步到另外一台服务器,相对来说,两边数据同时出现意外的概率相对要小。当然hotcopy跟dump也可以通过FTP等方式将数据直接备份到另一台服务器上。但是这样一来,这两种方法的初期配置就不见得比svnsync简单了。

    3.2 备份方法

    3.2.1 SVN服务器安装

    在备份服务器中安装SVN服务器,并创建与主服务器相对应的仓库。具体方法参考SVN服务器安装 - Linux系统 或者 SVN服务器安装 - Windows系统

    3.2.2 创建钩子脚本

    因为svnsync备份需要修改备份服务器仓库属性,因此会调用钩子脚本,而仓库原本的钩子脚本是不允许外部修改的,因此需要重新创建。

    A 钩子脚本路径

    /svn根目录/工程目录/hooks/

    B 钩子脚本文件

    钩子脚本文件编辑,需进入到工程目录下,创建对应钩子脚本。

    最简单的钩子脚本文件如下:

    exit 0;
    

    若不想改变原本钩子脚本逻辑,仅需要在同步时允许指定用户(admin)可进行同步操作,可做如下修改。

    Linux系统

    a) 脚本内容:

    cd /svn/store/project/hooks/
    vi pre-revprop-change
    
    #!/bin/sh
    
    EPOS="$1"
    REV="$2"
    USER="$3"
    PROPNAME="$4"
    ACTION="$5"
    
    if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi
    if [ "$USER" = "admin" ]; then exit 0; fi
    echo "Changing revision properties other than svn:log is prohibited" >&2
    exit 1
    

    b) 编辑完后, 按键盘Esc键后输入 :wq,回车 保存退出

    c) 执行 chmod 777 pre-reprop-change 指令,修改权限。

    Windows系统

    在钩子脚本文件路径(hooks)下新建一个TXT文档,编辑如下内容后,保存为pre-revprop-change.bat文件。

    编辑内容如下:

    setlocal
    set REPOS=%1
    set REV=%2
    set USER=%3
    set PROPNAME=%4
    set ACTION=%5
    if "%USER%"=="admin" goto OK
    if not "%ACTION%"=="M" goto refuse
    if not "%PROPNAME%"=="svn:log" goto refuse
    goto OK
    :refuse
    echo Cann't set %PROPNAME%/%ACTION%, only svn:log is allowed 1>&2
    endlocal
    exit 1
    :OK
    endlocal
    exit 0
    

    3.2.3 初始化

    此时仅初始化,并未同步任何数据

    指令:svnsync init svn://192.168.162.111/project file:///svn/project/

    注:
    a 备份服务器 - svn://192.168.162.111/project,
    b 主服务器 - file:///svn/project/
    c 本地文件路径前必备为 file:///

    初始化过程会要求输出系统登录用户密码,工程仓库用户名/密码。按照提示输入即可

    最终输出结果:

    认证领域: <svn://192.168.162.111:3690> 33b7e9f6-c1de-11ec-8ff6-bd779d2ded64
    “root”的密码: ****
    
    认证领域: <svn://192.168.162.111:3690> 33b7e9f6-c1de-11ec-8ff6-bd779d2ded64
    用户名: admin
    “admin”的密码: ******
    复制版本 0 的属性。
    

    3.2.4 同步

    svnsync可自动同步也可手动同步,一般来说初次会手动同步一次,后续会采用自动同步。

    A. 手动同步

    在Windows系统中可通过以下指令直接同步,但是在Linux同步过程中还会要求输入密码,根据实际要求操作即可。

    同步指令: svnsync sync svn://192.168.162.224/project

    输出结果:

    传输文件数据...............
    已提交版本 8405。
    复制版本 8405 的属性。
    传输文件数据...
    已提交版本 8406。
    复制版本 8406 的属性。
    

    B. 自动同步

    a) 初始同步之后可在/svn根目录/工程目录/hooks/ 路径下找到 post-commit.tmpl,

    b) 复制脚本文件,Linux系统更名为post-commit, Windows系统中更名为pos-commit.bat。

    c) 编辑新文件,Linux及Windows均是在文档最后一行加入以下内容:
    svnsync sync --non-interactive svn://192.168.162.111/project --username admin --password admin

    d) 保存编辑内容

    Linux系统:

    • 编辑完后,按键盘Esc键后输入 :wq保存退出
    • 执行 chmod 777 pre-reprop-change 指令,修改权限。

    Windows系统:

    • 直接ctrl+s保存即可。

    注:
    a svn://192.168.162.111/project为备份服务器仓库路径, 第1/2个admin分别为备份服务器仓库用户名和密码
    b 在Linux系统中记得修改post-commit脚本文件权限,否则将无法正常同步。

    3.3 异常提示

    3.4.1 未创建钩子脚本

    A. 异常提示

    svnsync: E165006: 此版本库不允许修改版本属性;请管理员创建 pre-revprop-change 钩子
    

    B. 解决方法

    造成该异常原因就是未创建钩子脚本,具体方法草考 3.2.2 创建钩子脚本即可

    3.4.2 钩子脚本权限受限

    A. 异常提示

    svnsync: E165001: 版本属性改变 被 pre-revprop-change 钩子阻塞(退出代码 255) 没有输出。
    

    B. 解决方法

    造成该异常原因是创建钩子脚本未给予权限,进入钩子脚本所在路径,执行以下指令即可。

    指令:chmod 777 pre-reprop-change

    3.3.3 连接异常

    A. 异常提示

    无法连接主机“192.168.162.111”: 没有到主机的路
    

    B. 原因分析

    无法连接主机,有可能IP地址错误、网络异常等。若这几个方面都排出后,最大可能就是防火墙拦截。

    C. 解决方法 — Linux系统

    执行如下指令即可:
    firewall-cmd --zone=public --add-port=3690/tcp --permanent
    firewall-cmd –reload

    D. 解决方法 — Window系统

    a) 打开“控制面板”,找到“Windows防火墙”,选择“高级设置”。
    在这里插入图片描述
    b) 在弹出框中选择“入站规则”中的“新建规则”
    在这里插入图片描述
    c) 在弹框中选择“端口”后点击“下一步”,后续步骤根据需要逐一设置到最后点击“完成”。下图为整个过程示例。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3.3.4 无法锁定

    A. 异常提示

    Failed to get lock on destination repos, currently held by ‘EDGH19000803:22c497b2-67f1-e04c-b347-5e44d71d8f0b’
    Failed to get lock on destination repos, currently held by ‘EDGH19000803:22c497b2-67f1-e04c-b347-5e44d71d8f0b’
    svnsync: E000022: Couldn’t get lock on destination repos after 10 attempts
    

    B. 解决方法

    出现该异常主要是因为上一次同步过程中,因为某些原因而异常终止,导致下一次同步时无法正常同步。执行以下指令,清除锁即可。

    指令:svn propdel svn:sync-lock –revprop –r0 svn://192.168.162.111/project

    注: svn://192.168.162.111/project 为备份服务器


    4 参考资料

    https://blog.csdn.net/u011078141/article/details/94718649
    https://blog.imdst.com/svn-bei-fen-he-huan-yuan/
    https://jingyan.baidu.com/article/fd8044fa7fc3245030137a49.html
    https://www.cnblogs.com/hengli123/p/13700923.html
    https://wenku.baidu.com/view/89f648fc6c1aff00bed5b9f3f90f76c660374c5a.html

    展开全文
  • 此文讲述SVN如何镜像服务器,注意是单向镜像。众所周知,SVN有自已的镜像命令svnsync(svn1.4以及以上版本特性),但是部署与维护确是繁琐至极,令人望而却步。
  • 起因:今天用SVN时,不小心把远程SVN服务器上的目录删掉了,然后在本地又手贱地还原了一下项目(eclipse中右键项目team => 还原),导致写了大半天的代码全部丢失,用多款数据恢复软件恢复也无果。一怒之下写了这个...
  • ############################################################## ### SVN远程备份管理器(SVN RBM) ### ############################################################## 名称: SVN Remote Backup Manager版本...
  • SVN 备份及还原包括逻辑和物理备份,逻辑备份包含了本地备份和通过FTP脚本的备份,定期执行计划保证数据丢失。里面有3个文档和编写好的bat脚本
  • 下边提供一种简易方法,不仅可以用来备份数据库文件,也可以备份其他任何文件,我们通过SVN来监控文件增量,定时提交至远程SVN仓库,只需要安装SVN,执行以下自动提交脚本: :start @echo 开始批量提交 "C:\...

    数据库备份一般有冷备份和热备份两种,数据库本地备份方案非常多就不介绍了,但本地数据库在发生服务器宕机时,整个局域网可能都受到波及,为了能容灾我们常常需要异地备份

    下边提供一种简易方法,不仅可以用来备份数据库文件,也可以备份其他任何文件,我们通过SVN来监控文件增量,定时提交至远程的SVN仓库,只需要安装SVN,执行以下自动提交脚本:

    :start
    @echo 开始批量提交
    "C:\Program Files (x86)\Subversion\bin\svn.exe" add "D:\backup" --no-ignore --force
    call "C:\Program Files (x86)\Subversion\bin\svn.exe" commit -m "database auto commit" "D:\backup"
    echo 提交完成 休眠中...
    ping -n 172800 127.0.0.1>nul
    goto start
    pause  

    部分解释:

    此命令用来调用SVN执行程序,监测指定磁盘位置下新增的文件,并添加至SVN的监测

    此命令用来调起svn程序,提交上一步监测到的指定磁盘位置新增的文件

    此命令用来计时,达到定时运行的目的,这里通过ping本机来计时,172800为次数,1次1秒

    此命令在计时结束后运行,表示跳转至上述程序中 :start 的位置重新向下执行程序

     

    展开全文
  • 下面将详细说明一下是怎么进行备份的.(测试平台是linux 2.6.x + svn 1.6.x),对于win平台将是类似的做法.=实施备份=这里的备份是完全复制一个远程仓库.1: 使用svnadmin仓库一人本地的空的仓库.$svnadmin create ~...

    =摘要=

    在svn中,利用svnsync命令可以对某个代码仓库进行备份.这里主要简介怎么使用svnsync进行仓库备份以及一些需要注意的地方.

    下面将详细说明一下是怎么进行备份的.(测试平台是linux 2.6.x + svn 1.6.x),对于win平台将是类似的做法.

    =实施备份=

    这里的备份是完全复制一个远程仓库.

    1: 使用svnadmin仓库一人本地的空的仓库.

    $svnadmin create ~/svn-storage-bak

    2: 修改这个新的仓库的相关脚本

    2.0 进入svn-storage-bak这个仓库的根目录中:~/svn-storage-bak

    2.1:复制hooks/pre-revprop-change.tmpl为hooks/pre-revprop-change

    2.2:给上面这个脚本加上执行权限.

    #chmod u+x hooks/pre-revprop-change

    2.3:编辑上面脚本,添加如下命令,使得每一行非注释指令是exit 0

    {{{

    exit 0

    }}}

    然后就是保存啦.

    3: 使用svnsync设置新的仓库同步指向目标仓库

    $svnsync init file:home/usrname/svn-storage-bak 目标仓库的url

    4: 进行同步了.

    $svnsync  sync file:///home/usrname/svn-storage-bak

    5: 这个时候将看到标准输出一些备份信息.

    好了,上面演示了怎么备份一个已有数据的版本仓库,下面将讨论这过程中的相关注意地方..

    =注意=

    存储目标仓库的备份的svn仓库要是一个空的仓库,否则将有如下提示.

    svnsync: Cannot initialize a repository with content in it0b1331709591d260c1c78e86d0c51c18.png

    展开全文
  • Linux下面SVN的自动备份创建一个存放备份数据的路径#mkdir /home/backup1/svn –p采用shell脚本的方式实现自动备份#vim backup.sh#!/bin/bashcd /home/backup1/svn/mkdir `date +%F`chmod 755 `date +%F`cd `date +%...
  • SVN远程备份简单操作手册[收集].pdf
  • Linux下SVN备份方式

    2021-05-13 10:45:05
    下面具体描述备份的方法:===...1)定义备份策略:备份频度:每周六进行一次全量备份,每周日到周五进行增量备份备份地点:备份存储路径到/home/backup/svn/备份命名:全量备份文件名为:weekly_fully_backup.yymmdd,...
  • n',ret_list) return ret_list def copy_svn(filelist): #这个函数主要是完成dump name= [] name=os.path.split(filelist) now = datetime.datetime.now() filename = now.strftime(basedir+iplist[0] +name[-1]+ '_...
  • Linux系统环境SVN服务器定时备份详解:本篇文章主要介绍的内容是在Linux系统下如何定时备份SVN服务器,目的是为了防止一旦SVN服务器挂掉及数据丢失造成的损失,需要对SVN服务器数据定时备份处理,以便找回丢失的数据...
  • svn远程完全增量备份批处理文件。还有相关参考文件。
  • SVN备份的三种方式

    万次阅读 2019-07-05 10:06:59
    备份策略 ============== svn备份一般采用三种方式: 1)svnadmin dump  2)svnadmin hotcopy  3)svnsync. ...注意,svn备份不宜采用普通的文件拷贝方式(除非你备份的时候将库暂停),...
  • 利用svnadmin hotcopy可以实现完全备份,但不能进行增量备份。svnadmin hotcopy是将整个库都...如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要进行简单配置即可切换到备份库上工作。缺点是:比较耗费硬盘...
  • svnserver备份脚本,其中包含了备份repository,压缩备份文件、复制备份文件到远程计算机和还原备份说明。svn服务器的时间格式要改成YYYY-MM-DD,不然Backup.bat脚本会报错。最好不要使用svnserver4以上的版本,因为...
  • 远程svn服务器

    2021-08-13 01:08:13
    远程svn服务器 内容精选换一换远程桌面链接Windows云服务器报错:连接被拒绝,因为没有授权此用户账户进行远程登录。Windows远程桌面相关权限配置异常。在运行窗口输入secpol.msc,打开组策略编辑器打开"本地策略 &...
  • SVN版本库的异地备份

    千次阅读 热门讨论 2015-03-31 22:59:51
    现在开发通常都会用SVN来进行版本控制,并且SVN服务端也都会统一的建立到某个服务器上来保存项目源码,这没什么问题。...今天介绍的就是SVN版本库的远程自动备份,将版本库备份到另一台机器上 。当然实现的方式是多种
  • svn定时备份

    2018-02-25 10:42:49
    转:http://blog.csdn.net/fishmai/article/details/52398546引:最近正在做版本库迁移和自动备份,在网上找过一些相关资料,但都比较凌乱,让人很纠结,相信很多网友会遇到相同的问题,笔者根据自己的整理和实践...
  • 2017年12月16日Git, SVN StandardViews:2,360虽然Git比SVN强大,已经统治了代码管理领域,但Git是具有一定门槛的,对非开发者来说并不那么友好。相对来说,SVN虽然功能没那么强悍,但是服务端搭建简单、客户端操作...
  • 1、 在192.16.21.70上面配置SVN服务器(简称服务器A); 2、 定时将服务器A上面的程序自动备份到192.16.21.82服务器上(该服务器简称服务器B); 3、 服务器工具软件采用“VisualSVN Server Manager VisualSVN Ltd. ...
  • svn 删除本地和远程仓库上的文件

    千次阅读 2020-09-23 09:48:31
    svn命令,删除本地和远程仓库里的文件。 我们在本地直接删除掉文件夹后,svn status查看状态,发现本地删掉的文件前面出现了一个感叹号。 感叹号说明本地文件和远程的有冲突。因为我们本地已经删除了该文件,但是...
  • svn 代码都会备份储存在远程的服务器上,以避免哪天公司的svn 服务器瘫痪了,无法在短时间内恢复,或是自然灾害所有的数据都丢失,有了这些储存在远程服务器上的代码,很容易短时间内恢复生产。 但是储存在远程...
  • 前段时间发现内网服务器的备份目录越来大,感觉有点不对劲,原来是备份脚本有问题,遂...#svn 增量备份脚本 repos_path="/home/svn/repos" repos=`ls $repos_path` Date=`date +%Y%m%d` backup_path="/data1/backup/s
  • 远程镜像与备份SVN 服务器 此文讲述SVN 如何镜像服务器,注意是单向镜像。众所周知,SVN 有自已的镜像命令
  • svn备份一般采用三种方式

    万次阅读 2017-01-06 15:51:45
    备份策略 ============== svn备份一般采用三种方式: 1)svnadmin dump  2)svnadmin hotcopy  ...3)svnsync....注意,svn备份不宜采用普通的文件拷贝方式(除非你备份的时候将库暂停),如cop
  • Centos6.1详细搭建svn独立服务器1准备源码包:2个源码包一个是Subversion-1.6.20.tar.gz一个是Subversion-deps-1.6.20.tar.gz源码安装目录:/usr/local/svn/版本库的用户文件目录/usr/local/svn/conf/passwd.conf...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,935
精华内容 5,174
关键字:

备份远程svn