从备份恢复 Subversion 存储库

从备份恢复 Subversion 存储库

我必须从前一天晚上的备份映像中恢复 subversion 服务器。恢复后,除了一个存储库外,其他一切都正常。

在最新备份之后,服务器上已提交了一个工作副本,因此该工作副本的文件比恢复的存储库更新。我尝试使用 tortoise 提交文件,但 SVN 无法识别工作副本上的文件比存储库中的文件更新。

我在 Windows 2003 Server 上使用 Subversion Server 1.6.5,在 Win7 64 位客户端上使用 TortoiseSVN 1.6.8 64 位。

谢谢,约翰

答案1

这是因为 SVN 使用工作副本文件的本地“缓存”来决定与存储库的不同之处(因此它不必联系存储库、获取文件、对其进行差异比较,只是为了发现您已经对其进行了更改)。

在这种情况下,这不会按您想要的方式工作,因为工作副本(及其缓存)与存储库不同步。当您更改这些文件并提交它们时,您会发现 SVN 将重新同步自身(并且毫无疑问会抛出“发生了什么”错误)。

因此,您需要手动重新同步工作副本缓存。首先,复制一份没有缓存的工作副本目录 - 即 .svn 目录。(使用旧的 Windows Search doggie 搜索 .svn 并删除所有这些目录)

然后更新目录以获取存储库的当前状态,我认为 SVN 将更新缓存并将您的本地更改合并到存储库中的文件,这样您将恢复正常 - 即更改的文件将获得“已修改”图标,然后您可以提交更改。我很确定会发生这种情况,但我总是担心恢复后会丢失数据,这就是为什么您首先要进行复制。如果出现任何问题,您只需用旧的 WC 覆盖从存储库获取的文件,它就会显示为已修改。正常提交。

答案2

在 Windows 上创建两个批处理文件:

第一的

[备份.bat]

@echo off
echo - BORN 05 SVN Repository export batch file -

set Rep=C:\Repositories\
set BackUps=c:\backups
CD %Rep%

rem Don't need %Backup% because you're already changed to it.
for /f %%R in ('dir/b') do call :1 %%R
goto :eof

:1
echo Exporteren van %Rep%%1 naar %Backups%\%1.bak
"C:\Program Files\VisualSVN Server\bin\svnadmin" dump %Rep%%1 > %Backups%\%1.bak
echo Done!
echo .........................................
CALL WAIT 3

[稍等。]

@ping 127.0.0.1 -n 2 -w 1000 > nul
@ping 127.0.0.1 -n %1% -w 1000> nul

答案3

再次接触较新的文件,然后再次尝试提交。

相关内容