如何备份远程SVN存储库

如何备份远程SVN存储库,svn,backup,Svn,Backup,我目前正在将我的SVN服务器从我的家庭服务器移动到我的远程服务器,以便我可以从其他位置更轻松地访问它。 我的远程服务器没有备份,因此我希望定期将其备份到我的家庭服务器 远程服务器是Windows2003服务器。家庭服务器是Windows家庭服务器 最好的方法是什么?我可以让我的家庭服务器每天晚上转储远程服务器吗?带宽不是一个很大的考虑因素,但如果我可以将任何新的签入复制到我的家庭服务器上的SVN服务器,那就好了 欢迎您提出任何建议。您可以在远程服务器上使用脚本转储存储库,然后将其复制到本地计算机

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

远程服务器是Windows2003服务器。家庭服务器是Windows家庭服务器

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


欢迎您提出任何建议。

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

您可以将备份目录与或同步


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

在我写这篇文章时,EFraim提到了rsync,所以这就包括在内了

如果您不想使用它,Subversion手册提供了
svnadmin dump--incremental
选项,如下所述:

  • (向下滚动页面至“备份”部分)
  • svnadmin dump--incremental
然而,要成功地做到这一点,您必须处理修订号-重新同步原始存储库数据目录将更容易

最困难的部分可能是设置rsync,以便本地和远程计算机能够安全地通信(即在2003服务器上设置SSH服务)。Wim提到的DeltaCopy非常有趣,这将是我的第一次拍摄;仅对于命令行操作,这里有一个howto on。

(或其上的Windows UI)是在文件系统级别增量复制完整存储库的一个好选择

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

只需使用命令即可

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

svnadmin create c:\backuprepo
或在Unix上:

svnadmin create ./backuprepo
echo -ne '#!/bin/sh\nexit 0' > ./backuprepo/hooks/pre-revprop-change
chmod ugo+x ./backuprepo/hooks/pre-revprop-change 
svnsync init file:///Volumes/volumelabel/backuprepo https://url/of/your/repository
接下来,创建一个名为pre-revprop-change.bat的文件:

echo exit 0 > c:\backuprepo\hooks\pre-revprop-change.bat
或在Unix上:

svnadmin create ./backuprepo
echo -ne '#!/bin/sh\nexit 0' > ./backuprepo/hooks/pre-revprop-change
chmod ugo+x ./backuprepo/hooks/pre-revprop-change 
svnsync init file:///Volumes/volumelabel/backuprepo https://url/of/your/repository
然后,初始化同步:

svnsync init file:///c:/backuprepo https://url/of/your/repository
或在Unix上:

svnadmin create ./backuprepo
echo -ne '#!/bin/sh\nexit 0' > ./backuprepo/hooks/pre-revprop-change
chmod ugo+x ./backuprepo/hooks/pre-revprop-change 
svnsync init file:///Volumes/volumelabel/backuprepo https://url/of/your/repository
之后,您可以简单地运行

svnsync sync file:///c:/backuprepo

大约每天一次,您将只得到那些尚未在备份存储库中的更改。第一次同步需要一段时间,但在您将备份存储库与真实存储库同步后,同步只需几秒钟,因为只有那些新修订版需要同步。

创建您的本地存储库

svnadmin创建/Users/jsmith/repo

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

echo'#/bin/bash'>/Users/jsmith/repo/hooks/pre revprop change

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

chmod+x/Users/jsmith/backup/hooks/pre-revprop change

初始化svnsync

svnsync initfile:////Users/jsmith/repo https://www.smith.com/repo

同步回购


svnsync同步file:////Users/jsmith/repo

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

从subversion 1.7开始,您也可以使用新命令。从文档中:

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

用途如下:

svnrdump dump http://example.com/repos/ > repos.dump
这将在
repos.dump
中创建存储库的“转储文件”。这是存储库数据(包括历史记录)的完整备份,但subversion客户端无法直接读取。如果需要恢复此数据,请使用标准的
svnadmin
工具:

svnadmin create c:\backup-repos
svnadmin load c:\backup-repos < repos.dump
svnadmin创建c:\backup repos
svnadmin加载c:\backup repos
尚未进行任何测试,但这可能会比
svnsync
svnrdump
每次都会对存储库进行完整的转储,我假设
synsync
只导入自上次运行以来存储库中的更改。不过,您将拥有一个包含整个存储库的文件,这可能更容易管理,也可能不容易管理


请注意,您可能希望通过管道将
svnrdump
的输出传送到
gzip
或类似程序,以可能显著减小输出文件的大小。

在Mac OS X 10.10中,
svnrdump
命令位于以下位置:

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

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

要扩展Stefans答案,以下是一些windows批处理脚本,以帮助稍微自动化该过程

svn备份初始化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**
for /d %%i in (%~dp0*) do ( svnsync sync file:///%%i ) 
此脚本将创建svn repo,并将其签出并立即执行同步。运行脚本时,只需输入本地放置repo的目录和要使用的服务器的URL

svn备份运行.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**
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

谢谢你的快速回复。我想SVNSync会做我想做的事情。佩卡——如果我考虑过的话,你是对的。问这个问题可能会更好。我在这里得到了很好的快速回答,我没有考虑其他网站。再次感谢,Asca!卡佐!美国奎斯托·科曼多!(谐谑曲)