如何备份远程SVN存储库
我目前正在将我的SVN服务器从我的家庭服务器移动到我的远程服务器,以便我可以从其他位置更轻松地访问它。 我的远程服务器没有备份,因此我希望定期将其备份到我的家庭服务器 远程服务器是Windows2003服务器。家庭服务器是Windows家庭服务器 最好的方法是什么?我可以让我的家庭服务器每天晚上转储远程服务器吗?带宽不是一个很大的考虑因素,但如果我可以将任何新的签入复制到我的家庭服务器上的SVN服务器,那就好了如何备份远程SVN存储库,svn,backup,Svn,Backup,我目前正在将我的SVN服务器从我的家庭服务器移动到我的远程服务器,以便我可以从其他位置更轻松地访问它。 我的远程服务器没有备份,因此我希望定期将其备份到我的家庭服务器 远程服务器是Windows2003服务器。家庭服务器是Windows家庭服务器 最好的方法是什么?我可以让我的家庭服务器每天晚上转储远程服务器吗?带宽不是一个很大的考虑因素,但如果我可以将任何新的签入复制到我的家庭服务器上的SVN服务器,那就好了 欢迎您提出任何建议。您可以在远程服务器上使用脚本转储存储库,然后将其复制到本地计算机
欢迎您提出任何建议。您可以在远程服务器上使用脚本转储存储库,然后将其复制到本地计算机(或将其保留在预定义的位置供本地计算机复制) 您可以将备份目录与或同步
该脚本可以与“计划任务”一起运行,并可以生成唯一命名的备份文件,这些文件稍后将通过您的本地计算机以上述方式同步。(然后可能被删除)在我写这篇文章时,EFraim提到了rsync,所以这就包括在内了 如果您不想使用它,Subversion手册提供了
svnadmin dump--incremental
选项,如下所述:
- (向下滚动页面至“备份”部分)
- 在
svnadmin dump--incremental
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!卡佐!美国奎斯托·科曼多!(谐谑曲)