我必须从前一天晚上的备份映像中恢复 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
再次接触较新的文件,然后再次尝试提交。