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下使用.
|
相关推荐
解除和偷窃锁定 锁定交流 外部定义 Peg和实施修订版本 网络模型 请求和响应 客户端凭证缓存 4. 分支与合并 什么是分支? 使用分支 创建分支 在分支上工作 分支背后的关键概念 在分支间复制修改 复制特定的修改 合并...
**功能描述**:解锁(Unlock)用于解除对文件或目录的锁定。 **命令格式**:`svn unlock <file_or_dir>` #### 三、Subversion 常用操作步骤 1. **创建仓库**:首先需要通过SVN服务端软件(如Apache服务器上的SVN...
7. **备份与迁移**:SQLite3数据库可以很容易地复制到其他地方,这在升级SVN版本、迁移仓库或进行灾难恢复时非常有用。只需将`.db`文件复制即可。 8. **第三方工具**:除了SQLite3.exe,还有许多图形化界面工具(如...
运行`svn cleanup`可以解除这些未完成的锁定,恢复其他用户的访问权限。 2. **更新冲突**:在多人协作的环境中,同一文件可能同时被多个用户修改。当用户尝试更新其工作副本时,可能会遇到冲突。清理工具可以帮助...
- **备份与恢复**:通过导出和导入功能,可以方便地备份和恢复仓库。 总结,TortoiseSVN 1.6.12为Windows用户提供了一套强大的版本控制工具,无论是在团队协作还是个人项目中,都能显著提高工作效率,确保代码的...
7. **恢复**:如果发现误删了重要信息,可以使用之前创建的备份进行恢复。 在日常开发中,理解如何管理和删除SVN依赖是非常有用的,特别是在切换版本控制系统或解决版本控制问题时。然而,操作时务必小心,因为错误...
在这种情况下,我们可以直接与Subversion使用的SQLite3数据库进行交互,以解决清理问题。SQLite3.exe是一个命令行工具,允许用户直接运行SQL查询来查看和修改数据库内容。使用它,我们可以打开Subversion工作副本中...
描述中的“清除svn使用的痕迹,不在作为svn客户端工作目录”意味着这个工具不仅会清理工作副本中的文件,还会解除工作目录与Subversion服务器的关联,使其不再被识别为一个svn客户端工作区。这可能是为了将某个目录...
- 解除文件或目录的锁定:当文件被锁定且无法编辑时,`svn clean up`可以解除这些锁定。 - 更新过时的项目:如果工作副本与仓库中的版本不一致,`svn clean up`会尝试修复并更新为最新版本。 - 清理临时文件和...
1. 解除文件或目录的锁定:当文件或目录被意外锁定时,`svn cleanup` 可以解除这些锁定,使你能够继续进行正常的 SVN 操作。 2. 清理丢失的外部项:如果工作副本中的外部项丢失或损坏,`svn cleanup` 会尝试恢复它们...
这段脚本会递归地删除所有`.svn`目录,但请注意,这将永久性地移除与SVN相关的所有信息,无法通过SVN恢复。 对于VSS,由于其元数据分布在各个文件中,清理过程稍微复杂一些。你可以编写类似的批处理脚本来查找并...
2. 修复断开的working copy:当SVN与远程仓库的连接中断时,"Clean up"可以恢复连接。 3. 更新到最新版本:"Clean up"会确保你的本地工作副本与远程仓库同步,消除任何潜在的版本冲突。 4. 清理临时文件:SVN在操作...
9. 解锁:解除文件或目录的锁定,以便其他用户进行编辑。 在实际开发环境中,TortoiseSVN被广泛应用于协同开发项目,因为它能够有效地管理和追踪代码版本,防止数据丢失,解决团队成员之间的冲突。通过与Subversion...
这个脚本可能通过执行`svn cleanup`命令来解除锁定,或者使用`svn delete`命令来删除文件或文件夹,并将这些改变提交到服务器。 在使用这样的脚本时,需要注意以下几点: 1. **权限管理**:确保你有足够的权限执行...
4. **替代方法**:除了使用这样的工具,也可以通过手动方式删除`.svn`文件夹,或者使用SVN命令行工具的`cleanup`命令来解除锁定或清理问题。 总的来说,"SVN隐藏文件删除工具"是一个针对Subversion用户设计的实用...
每个在svn仓库中受控的项目在本地工作拷贝中都会包含隐藏的.svn目录,这个目录存储了与版本库交互所需的信息,如版本历史、锁定状态等。 在描述中提到的“在项目上右击,可以删掉项目下的.svn的文件”这一操作,...
* 每天下班前,至少应留 10 分钟时间处理本地文件与服务器文件差异,本地修改过的文件 Commit,遇到冲突按“二、更新与提交”进行处理,并解除所有锁定文件。 四、上班时工作前的准备: * 直接在项目根目录 Update...
通过锁定文件,可以确保只有锁定者能够进行修改,其他用户则无法修改直到锁定被解除。这一过程通常包括锁定文件、进行修改、提交修改,最后解锁文件,以便其他人可以编辑。 #### 二、TortoiseSVN的安装与使用指南 ...
这个问题通常与Subversion内部使用的SQLite3数据库有关。SQLite3是一款轻量级的关系型数据库管理系统,svn用它来存储仓库元数据。本文将深入探讨这一问题的原因、影响以及解决方案。 **问题解析:** 当出现“svn ...