`
yangzb
  • 浏览: 3506623 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

subversion锁定解除、升级、备份与恢复

    博客分类:
  • PM
阅读更多
subversion锁定解除、升级、备份与恢复
 
作者:不详细    来源:网络
 

1.发生琐定,解除步骤:

 A.确定没有存取.关闭httpd服务器.
 B.成为管理员身份
 C.执行svnadmin recover /path/to/repo命令
 D.重启动subversion.

 //注意:
 A.以管理员身份,非root身份,如果一root身份,要重新chmod,库的权限.

2.升级的步骤:

 A.现有版本svnadmin ,将档案库dump出来
 B.升级到新版的subversion
 C.删除就档案库,再原处以新版本subversion,建立新的空档案库.
 D.再利用新版本svnadmin ,将档案库load到刚刚建立好的档案库.

 实例:
 //导出
 $svnlook youngest oldrepo
 $svnadmin dump oldrepo >; dumpfile
 //还原
 $svnadmin load newrepo < dumpfile

 3.即时备份目录

 $svnadmin hotcopy /path/to/repo /backup/repo

4.渐进式备份实现.

A.建立文件hot-backup.perl.内容如下:

 #!/usr/bin/perl -w
 use strict;

my $repos_path = '/path/to/repos';
 my $dumpfile = '/usr/backup/svn-dumpfile';
 my $last_dumped = '/var/log/svn-last-dumped';
 my $svnlook = '/usr/local/subversion/bin/svnlook';
 my $svnadmin = '/usr/local/subversion/bin/svnadmin';

# Figure out the starting revision. Use 0 if we cannot read the
 # last-dumped file, else use the revision in that file incremented
 # by 1.
 my $new_start = 0;
 if (open LASTDUMPED, $last_dumped)
 {
 my $line = <LASTDUMPED>;;
 if (defined $line and $line =~ /^(\d+)/)
 {
 $new_start = $1 + 1;
 }
 close LASTDUMPED;
 }

# Query the youngest revision in the repos.
 my $youngest = `$svnlook youngest $repos_path`;
 defined $youngest && $youngest =~ /^\d+$/
 or die "$0: 'svnlook youngest $repos_path' cannot get youngest revision.\n";
 chomp $youngest;

# Do the backup.
 system("$svnadmin dump $repos_path --revision $new_startyoungest --incremental >;>; $dumpfile.tmp" == 0
 or die "$0: svnadmin dump to '$dumpfile.tmp' failed.\n";

# Store a new last-dumped revision.
 open LASTDUMPED, ">; $last_dumped.tmp"
 or die "$0: cannot open '$last_dumped.tmp' for writing: $!\n";
 print LASTDUMPED "$youngest\n";
 close LASTDUMPED
 or die "$0: error in closing '$last_dumped.tmp' for writing: $!\n";

# Rename to final locations.
 rename("$dumpfile.tmp", $dumpfile)
 or die "$0: cannot rename '$dumpfile.tmp' to '$dumpfile': $!\n";
 rename("$last_dumped.tmp", $last_dumped)
 or die "$0: cannot rename '$last_dumped.tmp' to '$last_dumped': $!\n";
 # All done!

B.备份.先编辑hot-backup.perl里面正确的路径名.

 #vi hot-backup.perl修改为自己的路径:
 my $repos_path = '/path/to/repos';
 my $dumpfile = '/usr/backup/svn-dumpfile';
 my $last_dumped = '/var/log/svn-last-dumped';
 my $svnlook = '/usr/local/subversion/bin/svnlook';
 my $svnadmin = '/usr/local/subversion/bin/svnadmin';
 #perl hot-backup.perl得到的文件是/usr/backup/svn-dumpfile

c.还原

 1.建立新的仓库
 #svnadmin create /usr/local/repo/newrepo

 2.还原信息
 #svnadmin load /usr/local/repo/newrepo < /usr/backup/svn-dumpfile

 3.注意:以后每天都备份.再执行还原即可,不必新建仓库了.

 4.为了每段时间能验证备份的有效性.最好是建立一个验证仓库,用来还原,看信息是否正常。

d.有提交,就备份.进入仓库

 #mv /hooks/post-commit.tmpl /hooks/post-commit
 #vi /hooks/post-commit
 添加内容在后面
 perl /usr/local/subversion/backup/hot-backup.perl
 每次提交触发一次备份

E.修改一下上面的程序,让能接受参数输入

 #!/usr/bin/perl -w
 use strict;

my $repos_path = $ARGV[0];
 my $dumpfile = $ARGV[1];
 my $last_dumped = $ARGV[2];

my $svnlook = '/usr/local/subversion/bin/svnlook';
 my $svnadmin = '/usr/local/subversion/bin/svnadmin';

#for usage
 if(@ARGV != 3 )
 {
 print "$0:[/path/to/repo] [/backup/dumpfile] [/var/log/lastdump]\n";
 exit 1 ;
 }

# Figure out the starting revision. Use 0 if we cannot read the
 # last-dumped file, else use the revision in that file incremented
 # by 1.
 my $new_start = 0;
 if (open LASTDUMPED, $last_dumped)
 {
 my $line = <LASTDUMPED>;;
 if (defined $line and $line =~ /^(\d+)/)
 {
  $new_start = $1 + 1;
 }
 close LASTDUMPED;
 }

# Query the youngest revision in the repos.
 my $youngest = `$svnlook youngest $repos_path`;
 defined $youngest && $youngest =~ /^\d+$/
 or die "$0: 'svnlook youngest $repos_path' cannot get youngest revision.\n";
 chomp $youngest;

# Do the backup.
 system("$svnadmin dump $repos_path --revision $new_startyoungest --incremental >;>; $dumpfile.tmp" == 0
 or die "$0: svnadmin dump to '$dumpfile.tmp' failed.\n";

# Store a new last-dumped revision.
 open LASTDUMPED, ">; $last_dumped.tmp"
 or die "$0: cannot open '$last_dumped.tmp' for writing: $!\n";
 print LASTDUMPED "$youngest\n";
 close LASTDUMPED
 or die "$0: error in closing '$last_dumped.tmp' for writing: $!\n";

# Rename to final locations.
 rename("$dumpfile.tmp", $dumpfile)
 or die "$0: cannot rename '$dumpfile.tmp' to '$dumpfile': $!\n";
 rename("$last_dumped.tmp", $last_dumped)
 or die "$0: cannot rename '$last_dumped.tmp' to '$last_dumped': $!\n";
 # All done!

F.有提交,就备份.进入仓库

 #mv /hooks/post-commit.tmpl /hooks/post-commit
 #vi /hooks/post-commit
 添加内容在后面
 perl /usr/local/subversion/backup/hot-backup.pl /usr/local/repo/webaddress  /usr/local/subversion/backup/webaddress /var/log/webaddress
 每次提交触发一次备份

5.hot-backup.py完整备份

 6.tar包完整备份

 1.进入仓库的根目录/usrl/local/
 #cd /usr/local/

 2.备份整个目录.
 #tar -cf repo.tar /usr/local/repo.

 3.还原时候来到根目录/usrl/local/
 #tar -xvf repo.tar

4.也可以备份单个目录.
 #tar -cf svn.tar /usr/local/repo/svn.

 5.还原单个目录到目录/usr/local/repo/
 #tar -xvf svn.tar

 6.每天的自动备份脚本backup.sh.放于/usrl/local/subversion/backup目录下
 #!/bin/sh
 USAGE="Usage:`basename $0` [-f|-d] [files|directories]"
 if [ $# -lt 2 ] ; then
 echo "$USAGE";
 exit 1 ;
 fi
 case "$1" in
 -f) shift
 TARGES="-tvf" ;
 for i in "$@" ;
 do
 if [ -f "$i" ] ; then
 FILES = `tar $TAGES "$i" 2 >; /dev/null`
 if [ $? -eq 0 ] ; then
 echo ; echo "$i" ; echo "$FILES"
 else
 echo "ERRORi not a tar file."
 fi
 else
 echo "ERRORi not a file.";
 fi
 done
 ;;
 -d) shift
 TARGES="-cvf" ;
 if [ -f backup.tar ] ; then
 mv backup.tar backup1.tar
 fi
 tar $TARGES backup.tar "$@"
 ;;
 *) echo "$USAGE"
 exit 0
 ;;
 esac
 exit $?

8.固定时间运行脚本

 A.建立运行脚本backup:
 20 18 * * * /usr/local/subversion/backup/backup.sh -d /usr/local/repo
 B.启用脚本
 #crontab backup
 #crontab -l 查看运行的脚本
 20 18 * * * /usr/local/subversion/backup/backup.sh -d /usr/local/repo //每日18:20,下班后20分钟

注意:

 1.linux直接cp的备份仓库能在nt下使用,但是nt的复制不能在linux下使用.

分享到:
评论

相关推荐

    使用Subversion进行版本控制(针对 Subversion 1.4)

    解除和偷窃锁定 锁定交流 外部定义 Peg和实施修订版本 网络模型 请求和响应 客户端凭证缓存 4. 分支与合并 什么是分支? 使用分支 创建分支 在分支上工作 分支背后的关键概念 在分支间复制修改 复制特定的修改 合并...

    subversion使用指南中文版

    **功能描述**:解锁(Unlock)用于解除对文件或目录的锁定。 **命令格式**:`svn unlock &lt;file_or_dir&gt;` #### 三、Subversion 常用操作步骤 1. **创建仓库**:首先需要通过SVN服务端软件(如Apache服务器上的SVN...

    sqlite3.exe

    7. **备份与迁移**:SQLite3数据库可以很容易地复制到其他地方,这在升级SVN版本、迁移仓库或进行灾难恢复时非常有用。只需将`.db`文件复制即可。 8. **第三方工具**:除了SQLite3.exe,还有许多图形化界面工具(如...

    SVN清理工具

    运行`svn cleanup`可以解除这些未完成的锁定,恢复其他用户的访问权限。 2. **更新冲突**:在多人协作的环境中,同一文件可能同时被多个用户修改。当用户尝试更新其工作副本时,可能会遇到冲突。清理工具可以帮助...

    tortoisewin32svn1.6.12.zip

    - **备份与恢复**:通过导出和导入功能,可以方便地备份和恢复仓库。 总结,TortoiseSVN 1.6.12为Windows用户提供了一套强大的版本控制工具,无论是在团队协作还是个人项目中,都能显著提高工作效率,确保代码的...

    delSVN(删除文件夹所有svn)

    7. **恢复**:如果发现误删了重要信息,可以使用之前创建的备份进行恢复。 在日常开发中,理解如何管理和删除SVN依赖是非常有用的,特别是在切换版本控制系统或解决版本控制问题时。然而,操作时务必小心,因为错误...

    sqlite3(解决svn不能clean up问题)

    在这种情况下,我们可以直接与Subversion使用的SQLite3数据库进行交互,以解决清理问题。SQLite3.exe是一个命令行工具,允许用户直接运行SQL查询来查看和修改数据库内容。使用它,我们可以打开Subversion工作副本中...

    清除svn工具

    描述中的“清除svn使用的痕迹,不在作为svn客户端工作目录”意味着这个工具不仅会清理工作副本中的文件,还会解除工作目录与Subversion服务器的关联,使其不再被识别为一个svn客户端工作区。这可能是为了将某个目录...

    svn clean up失败

    - 解除文件或目录的锁定:当文件被锁定且无法编辑时,`svn clean up`可以解除这些锁定。 - 更新过时的项目:如果工作副本与仓库中的版本不一致,`svn clean up`会尝试修复并更新为最新版本。 - 清理临时文件和...

    svn cleanup 清理工具

    1. 解除文件或目录的锁定:当文件或目录被意外锁定时,`svn cleanup` 可以解除这些锁定,使你能够继续进行正常的 SVN 操作。 2. 清理丢失的外部项:如果工作副本中的外部项丢失或损坏,`svn cleanup` 会尝试恢复它们...

    批量清除SVN或VSS工具

    这段脚本会递归地删除所有`.svn`目录,但请注意,这将永久性地移除与SVN相关的所有信息,无法通过SVN恢复。 对于VSS,由于其元数据分布在各个文件中,清理过程稍微复杂一些。你可以编写类似的批处理脚本来查找并...

    SQLite.zip

    2. 修复断开的working copy:当SVN与远程仓库的连接中断时,"Clean up"可以恢复连接。 3. 更新到最新版本:"Clean up"会确保你的本地工作副本与远程仓库同步,消除任何潜在的版本冲突。 4. 清理临时文件:SVN在操作...

    TortoiseSVN1.7.10.23359版加中文包

    9. 解锁:解除文件或目录的锁定,以便其他用户进行编辑。 在实际开发环境中,TortoiseSVN被广泛应用于协同开发项目,因为它能够有效地管理和追踪代码版本,防止数据丢失,解决团队成员之间的冲突。通过与Subversion...

    一个很好用的SVN脚本

    这个脚本可能通过执行`svn cleanup`命令来解除锁定,或者使用`svn delete`命令来删除文件或文件夹,并将这些改变提交到服务器。 在使用这样的脚本时,需要注意以下几点: 1. **权限管理**:确保你有足够的权限执行...

    SVN隐藏文件删除工具

    4. **替代方法**:除了使用这样的工具,也可以通过手动方式删除`.svn`文件夹,或者使用SVN命令行工具的`cleanup`命令来解除锁定或清理问题。 总的来说,"SVN隐藏文件删除工具"是一个针对Subversion用户设计的实用...

    svn专杀

    每个在svn仓库中受控的项目在本地工作拷贝中都会包含隐藏的.svn目录,这个目录存储了与版本库交互所需的信息,如版本历史、锁定状态等。 在描述中提到的“在项目上右击,可以删掉项目下的.svn的文件”这一操作,...

    SVN使用规范.doc

    * 每天下班前,至少应留 10 分钟时间处理本地文件与服务器文件差异,本地修改过的文件 Commit,遇到冲突按“二、更新与提交”进行处理,并解除所有锁定文件。 四、上班时工作前的准备: * 直接在项目根目录 Update...

    TortoiseSVN简明教程

    通过锁定文件,可以确保只有锁定者能够进行修改,其他用户则无法修改直到锁定被解除。这一过程通常包括锁定文件、进行修改、提交修改,最后解锁文件,以便其他人可以编辑。 #### 二、TortoiseSVN的安装与使用指南 ...

    svn sqlite3清理失败解决工具

    这个问题通常与Subversion内部使用的SQLite3数据库有关。SQLite3是一款轻量级的关系型数据库管理系统,svn用它来存储仓库元数据。本文将深入探讨这一问题的原因、影响以及解决方案。 **问题解析:** 当出现“svn ...

Global site tag (gtag.js) - Google Analytics