能否通过反向合并来恢复特定的SVN版本?

3
我在我的电脑(Windows Server 2012)上安装了TortoiseSVN 1.8.7 + VisualSVN Server 2.7.7。最近,我的同事告诉我当他试图更新时,在对话框列出几个已更新的文件后,“XML响应包含无效的XML”错误出现。当他再次更新时,工作副本被锁定并需要清理。
我正在使用与我的同事相同的存储库,但我可以更新和提交而没有问题。
经过调查,我在事件查看器中发现磁盘错误,并且当我打开日志时,我看不到早于6291的日志。我尝试打开文件“project\db\rev\6290”,10~15秒后,内容为空,并且在事件查看器中出现更多磁盘错误。我使用robocopy将所有文件复制到另一个磁盘,只有上述文件失败了。
我认为这些修订文件就像diff文件一样,所以也许我可以使用工作副本(当前r6295)和project\db\6291~6295来“反向合并”到6290?这是可能的吗?
4个回答

3
在我的公司笔记本电脑上运行Kapersky Endpoint Security 10.0时,当我尝试检出一个大的源代码分支时,在一分钟左右内反复遇到了这个错误。暂时禁用Kapersky保护解决了我的问题。

3

这里不适合使用反向合并。

首先,需要确定你的同事遇到错误的根本原因。你说你没有遇到错误,那么我们需要回答以下问题:

  • 他的工作副本是否损坏? 运行 svn cleanup 命令清理工作副本,并查看错误是否仍然存在。另外,尝试使用一个干净的工作副本来复现错误,例如运行 svn checkout 命令并查看是否出现错误。

  • 存储库是否损坏? 运行 svnadmin verify -q 命令检查存储库的输出信息。我猜在你的情况下存储库是健康的,但如果不是,则最简单的解决方案是从备份中恢复存储库。


他的工作副本出了问题吗?不,svn cleanup 没有起作用。 仓库损坏了吗?是的,r6290 出了问题。文件“project\db\rev\6290”的内容丢失了。我尝试了“svn verify”,发现 r2289 也出了问题,但是我从备份中恢复了它。然而,我没有 r6290 的备份。 - Vinix Wu

0

我刚遇到了这个问题,但我设法解决了。 让我分享一下我做了什么。

1)选择您的工作区文件夹,右键单击选择 TortoiseSVN>>设置

2)在设置窗口中选择日志缓存 >> 缓存的存储库

3)确保您的svn目录是正确的。最重要的是,您只需要点击您的存储库URL并单击更新按钮..完成后,通过右键单击TortoiseSVN>>清理来清理您的工作区。

祝一切顺利。


0

文件\db\revprops\6290仍然完好无损,因此我可以看到我输入的日志。这提醒我在该版本中只修改了1个文件。

因此,我执行了以下步骤:

  1. 将版本6290~6295的文件从\db\revprops和\db\revs移动到另一个位置进行备份。
  2. 修改\current并将最新版本设置为6289。
  3. 再次修改原始在r6290中修改的文件并提交,这样就会在\db\revprops和\db\revs中生成新的6290文件。
  4. 将在步骤1中备份的文件移回到\db\revprops和\db\revs。文件\db\revprops\6290被覆盖,因此恢复了原始提交日期。
  5. 修改\current并将最新版本设置回6295。

现在我的同事可以正常更新,如果我使用Repository Explorer并输入VisualSVN Server的URL(以https开头),我可以查看所有版本日志。

我在我的工作副本中无法看到6291之前的日志。所以我检出到另一个目录并替换了.svn目录。它仍然只在开头显示r6291〜6295。但是在几分钟后再次尝试时,它正常显示。看起来旧数据被缓存到某个地方。

所以问题解决了。但是这些步骤只有在您记得哪些内容在错误修订版本中被修改时才有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接