今天备份svn, 能保证好用就行先, 回头再研究

buerguo.bat

@echo off
:: 关闭回显
:: 说明:如有命令不明白,请使用帮助命令:命令/? 。如:for/?
:: 设置标题
title SVN备份脚本
rem 设置变量
:: SVN_HOME svn程序的安装路径,指定到bin目录上一级。(如果路径有空格,请用""。)
set SVN_HOME=D:\Develop\VisualSVNServer
:: SVN库的路径
set SVN_ROOT=D:\Repositories
:: 备份SVN父目录的路径
set SVN_BACKUP_ROOT=D:\svnrootbackup
:: 获取当前系统日期和时间用来创建目录,格式:年月日_时分秒毫秒。如:20131129_16275274
set TIME_DIR=%date:~,4%%date:~5,2%%date:~8,2%_%time:~,2%%time:~3,2%%time:~6,2%%time:~9,2%
:: SVN备份子目录的路径
set BACKUP_DIRECTORY=%SVN_BACKUP_ROOT%\%TIME_DIR%
:: 日志文件路径(将日志和备份文件放在一个目录,删除时一起删除了)
set LOG=%BACKUP_DIRECTORY%\backup.log
:: 指定备份文件删除时间(单位:天)。0 - 32768 范围内的任何数字。
set NUM=365
rem 开始备份SVN
:: 判断SVN程序是否存在
if not exist %SVN_HOME% goto error
goto start
:start
:: 查询日志大小(单位:字节),超过1Mb就新建一个 (日志放入备份目录后,此语句无效。仅备份!)
:: for /r %SVN_BACKUP_ROOT% %%I in (backup.log) do if %%~zI GEQ 1048576 ren %LOG% backup_%TIME%.log
:: 新建目录
mkdir %BACKUP_DIRECTORY%
:: 建立日志
@echo [info]%date:~,10% %time:~,2%:%time:~3,2%:%time:~6,2%建立备份目录:%BACKUP_DIRECTORY% >>%LOG%
:: 备份SVN版本库并输出日志到文件
for /d %%i in (%SVN_ROOT%\*) do (
@echo 备份 %%~ni 库,备份文件名:%%~ni.dmp >>%LOG%
:: 完整备份(增量备份在dump后面添加参数 --incremental)
%SVN_HOME%\bin\svnadmin dump %SVN_ROOT%\%%~ni >%BACKUP_DIRECTORY%\%%~ni.dmp 2>>%LOG%
)
:: 输出备份命令退出码,用来判断是否备份成功。成功的退出码为0.
@echo [info]%date:~,10% %time:~,2%:%time:~3,2%:%time:~6,2%退出码为:%errorlevel%>>%LOG%
:: 自动设置计划任务:每周六 晚上11点执行本脚本。
at 23:00 /next:S %~f0>>%LOG%
:: 删除过期备份
goto delete
:delete
:: 输出要删除的目录到日志文件
@echo [info]%date:~,10% %time:~,2%:%time:~3,2%:%time:~6,2%删除%NUM%天前的备份:>>%LOG%
forfiles /P %SVN_BACKUP_ROOT% /M *_* /D -%NUM% /C "cmd /c echo 删除文件夹:@file">>%LOG%
:: 使用rd命令删除超过%NUM%天的备份目录。如果不存在匹配条件的目录,将提示:错误: 用指定的搜索标准没有找到文件。如果存在匹配的文件,则提示:目录名无效
forfiles /P %SVN_BACKUP_ROOT% /M *_* /D -%NUM% /C "cmd /c rd /s/q @path" 2>>%LOG%
goto end
:error
echo [error]%date:~,10% %time:~,2%:%time:~3,2%:%time:~6,2%程序目录不存在,请检查:%SVN_HOME%>>%LOG%
goto end
:end
:: 输出一行空行分割日志
@echo. >>%LOG%
exit
:: 调试脚本用的命令
:: at 16:06 %~f0
:: PAUSE
:: exit

修改三个路径即可

:: SVN_HOME svn程序的安装路径,指定到bin目录上一级。(如果路径有空格,请用""。)
set SVN_HOME=D:\Develop\VisualSVNServer
:: SVN库的路径
set SVN_ROOT=D:\Repositories
:: 备份SVN父目录的路径
set SVN_BACKUP_ROOT=D:\svnrootbackup
=========================================================================
创建好该批处理文件放到了repository下(和路径没关系吧), 双击执行在指定目录下生成一个备份文件如下图:

如何还原:
1.启动svnServer客户端, 新建一个repository(注意不要创建branches tags 和 trunk文件夹) , 就命名为demp吧

在磁盘中可以找到该名为demp的repository

2.打开命令行窗口, 输入以下命令:

svnadmin load D:\Repositories\demp < D:\svnrootbackup\20180627_12565811\buerguo.dmp

这就完事儿了,有问题在讨论吧批处理文件无非就是把手动敲的简化了一些,还有就是可以把这个文件加入到计算机定时任务中进行执行方便自动备份仓库。

==========分割(详细步骤可以看看,小项目小团队用svn,大项目团队稍微大点svn貌似显得鸡肋了。。)============

补充:可参考另一篇备份还原的实践,比较细致,https://blog.csdn.net/hzfw2008/article/details/78082685

【1.业务需求】


经过前面的SVN搭建,权限配置和强制写日志的工作之后,今天的任务是把原来其它分散的各个版本库统一迁移到新的版本库,集中统一管理。要求不改变原有的版本库的内容和版本号。

【2.基本思路】


要实现版本库的无缝迁移,必须通过以下3个步骤:

  • 导出旧的版本库
  • 导入新的版本库
  • 通知客户端切换版本库分支

首 先来看第一步:导出旧的版本库。我们知道SVN提供了check out命令和export命令签出,导出版本库中的内容。对于版本库内容比较少的情况这种方法可以采用。但是如果版本库中内容比较多,那么这种方法就显得 很笨重了,而且还涉及到版本号改变的问题。所以首先摈弃这种做法。

我们知道Oracle提供了export/import命令来将数据 库导出成一个二进制文件,然后导入。同样的SVN也提供了一对命令:dump和 load。不同的是这两个命令导出的是文本内容(肉眼可以读懂)。而且还有一次性导出和增量导出,单版本导出与多版本导出等多种选择操作,就是这个了。

其次我们来看“通知客户端切换版本库分支”。在我们完成服务器端的版本迁移之后,必须通知客户端运行切换分支的命令,否则客户端的提交还是提交到旧的版本库去。SVN也为我们准备了这样的命令:svn switch。

【3.相关命令】


首先我们来看一下SVN的dump和load命令

  • svnadmin dump命令语法
svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]

svnadmin dump命令用于导出整个Repository或Repository下的某个范围的修订版本。REPOS_PATH是版本库的路径,[-r LOWER[:UPPER]]用于指定导出的修订版本范围,由参数-r和两个用:号隔开阿拉伯数字组成。例如:-r 0:50表示导出才版本0到版本50之间的所有修订版,-r是revision的缩写。

而另一个关键参数是--incremental。 它使用增量方式来导出版本,即每次都只导出自上一个版本以来的修改。这样的好处是第一:可以把一个大的文 件切分成若干个小的文件。第二:在版本库已经存在的情况下,我们只需要每次导出修改的部分,不需要每次都导出整个版本库的内容。甚至可以通过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文件导入。

上面的命令使用起来已经很方便了,那么还有没有更加方便的用法呢?当然有!就是使用管道命令把两个命令合二为一。

svnadmin dump myrepos | svnadmin load newrepos
  • svn switch命令语法
svn switch URL [PATH]
switch --relocate FROM TO [PATH]

svn switch命令用于更新工作副本的URL。意即指向新的版本库位置。首先要注意的一点是我们即可以将整个工作副本指向新的URL,也可将工作副本下的某个目录指向新的URL。

另外一个重要的参数就是--relocate。这个参数是否使用对于结果如何有很大影响,使用不当甚至可能会造成版本库不可用。其中有两条重要的规则:
 A.假如工作副本只是映射到同一个版本库内的不同位置,那么使用svn switch即可
B.假如工作副本已是映射到不同的版本库,那么必须使用svn switch --relocate

上面第二条规则通常发生在我们需要将整个版本库迁移到另外一台机,或者同一台机的不同版本库时。这个时候使用--relocate会刷新原有工作副本中每个文件的URL头部。

【4.示例操作】


好了,下面我们来看如何执行版本库的迁移工作。

  • 查看当前旧版本库最新的版本号是多少
C:\peng\Other>svnlook youngest newRepo
  • 分批增量导出版本库内容
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的参数,这就是采用了增量的方式导出,下面我们一次按照顺序导入

  • 分批导入版本库文件
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文件,则会提示错误:版本库文件已经存在。

  • 客户端切换工作副本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。

现在该工作副本已经和:svn://localhost/newRepo/ps发生了映射关系。我们可以使用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
节点种类:目录
调度:正常
最后修改的作者: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>

经过上面的切换后,再次使用svnlook info输出一般信息,发现URL已经被成功切换过来了

C:\peng\Other\ps>svn info
路径:.
地址(URL):svn://localhost/newRepo2/ps
Repository Root: svn://localhost/newRepo2
档案库 UUID:6fbeb35b-c7e4-984d-b2ac-32812dcf3078
修订版:170
节点种类:目录
调度:正常
最后修改的作者: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>

很明显现在的提交全部都去到新的位置了!切换成功。

svn备份与还原_脚本_(dump命令)的更多相关文章

  1. Linux下用dump实现备份和还原 ux下用dump实现备份和还原

    对于系统而言,我们可以有很多种办法去备份(还原)系统或文件,之所以要去做备份,就是为了在系统或文件遭到损害时,能及时恢复,把损失减小到最小.当然,对于企业服务器而言,备份的重要性是举足轻重.咱们今天就 ...

  2. 研究windows下SVN备份及还原恢复方案

    windows下SVN备份方案 备份策略 svn备份一般采用三种方式: 1)svnadmin dump  2)svnadmin hotcopy  3)svnsync.  注意,svn备份不宜采用普通的 ...

  3. sharepoint 备份和还原site脚本

    <个人积累,转载请注明出处> Backup-SPSite "http://www.abc.com/sites/TestWorkflowCenter" -path C:\ ...

  4. MySQL的备份与还原以及常用数据库查看命令

    MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:\Program Files\MySQL\MySQL Serv ...

  5. 备份与还原ORACLE数据库(通过CMD命令执行)

    31.1:(若用程序调用cmd,则在备份和还原 末尾语句加上 2>&1 ,直接运行则不需要加) --备份:     1) exp SA/"""abc@123 ...

  6. SVN备份及其还原 — dump/load方法

    本文中采用最简单的dump/load方法.备份:一个较大的Subsersion版本库想用最少的空间来将它备份下来,用这个命令(请将/repo替换成你的版本库路径)svnadmin dump --del ...

  7. 备份与还原mysql 数据库的常用命令。

    一.备份数据: Mysqldump常用命令: mysqldump -u用户名 -p密码 --databases 数据库1 数据库2 > xxx.sql 常见选项: -u: 用户名 -p: 密码 ...

  8. Windows下SVN备份脚本

    本站备份:svn备份与还原_脚本_(dump命令) 以下是转载记录, 转自:https://wuxiaobai.win/archives/111 用法 svnadmin dump REPOS_PATH ...

  9. Mysql数据库备份和还原常用的命令

    Mysql数据库备份和还原常用的命令是进行Mysql数据库备份和还原的关键,没有命令,什么都无从做起,更谈不上什么备份还原,只有给系统这个命令,让它去执行,才能完成Mysql数据库备份和还原的操作,下 ...

随机推荐

  1. Longest Palindromic Substring leetcode java

    题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximum l ...

  2. Maven WEB 项目使用ProGuard进行混淆,最佳解决方案

    Maven WEB 项目使用ProGuard进行混淆,最佳解决方案 近期公司的Android项目做了混淆,虽说对于保护代码并不是100%的,但混淆后的代码可以使那些不法份子难以阅读,这样也能对代码的保 ...

  3. 超级简单!80行代码实现Google日历(拖放、移动、AJAX)

    行代码实现Google日历 Introduction 本实例介绍使用DayPilot Lite for ASP.NET MVC library 类来实现类google日历效果. 在线实例 天视图  星 ...

  4. python3 验证码去噪

    处理前图像: 处理后图像 代码 #coding:utf8 import os from PIL import Image,ImageDraw,ImageFile import numpy import ...

  5. 转: 一个程序员的Java和C++学习之路(整理)

    http://blog.csdn.net/ajian005/article/details/8003655 http://m.blog.csdn.net/xugangwen/article/detai ...

  6. CHtmlEditCtrl (2): Add a Source Text Editor to Your HTML Editor

    In a previous article, I described how to create an HTML editor using the MFC CHtmlEditCtrl class in ...

  7. Uniform and Interpolator Packing的作用

    All of the packing that is done is completely transparent to the user of the OpenGL ES Shading Langu ...

  8. Hibernate: No Session found for current thread

    在Struts2+Hibernate+Srping项目中经常会遇到这种问题 我知道的一种情况是: Spring的事务配置中没有配置好异常出现处的路径 <aop:advisor pointcut= ...

  9. ASP入门(二)-创建Access数据库

    通常来说,ASP程序是搭配Access数据库来使用的,因此在安装完ASP环境后,为了方便建立和管理数据库,我们还需要安装Access数据库. Access是Microsoft Office家族中的一员 ...

  10. GPUImage简单滤镜使用之色阶(三)

    色阶是表示图像亮度强弱的指数标准,图像的色彩丰满度和精细度是由色阶决定的.在GPUImage中GPUImageLevelsFilter提供了此功能. GPUImageLevelsFilter定义了修改 ...