如何验证Subversion工作副本

时间:2010-02-20 11:54:09

标签: svn tortoisesvn

我有一个Subversion工作副本,至少有一个丢失的文件(在修复树冲突时删除了本地副本)。这很有趣,因为文件是版本化的,它出现在存储库中,树冲突解决方案是100%本地的(它发生在更新时我没有事后提交)而且我已经运行了几次“svn cleanup”但是没有我的Subversion客户端(命令行svn和TortoiseSVN)可以检测到工作副本是否已损坏。甚至没有恢复所有更改都会恢复文件。

我会像往常一样修复它(在其他地方重新结账并使用WinMerge复制更改);我实际上有一个不同的问题:

如何测试工作副本的有效性?

当然,您可以随时查看新副本并使用文件比较实用程序,但......是不是有更好的方法?是否有工具可以验证相当于svnadmin verify的工作副本?

===更新===

我有很好的答案可以防止工作副本损坏,但我的问题更多的是找到一种方法来100%确定工作副本是连贯的并与实际存储库内容链接;在其他工作中,相当于 svnadmin verify 命令的工作副本。

到目前为止,它看起来像:

  • Subversion不提供这样的工具,SVN数据格式甚至不允许写一个。

  • 更新到修订版是一种似乎找到(并修复)某些问题的技术,虽然您经常需要来回恢复旧版本,我想它只能检测丢失的文件在修订范围内发生了变化。

  • 查看新的工作副本看起来是唯一100%可靠的方法。

4 个答案:

答案 0 :(得分:3)

这看起来像我前段时间遇到的一个问题:svn - file in working copy seems "lost"

逐字引用wcoenen的回答:

  

SVN 1.6.1客户端(包括   TortoiseSVN)有一个文件夹的错误   有时会错误地设置为   深度“空”。这导致了   你描述的症状。 (注意它是   可能是该文件夹   由svn 1.6.1“空”并且一直存在   那种方式,即使你已经   升级到更新的svn客户端   平均时间。)

     

要修复它,请使用“更新到”   修订“TortoiseSVN和。中的菜单项   选择深度“完全递归”

答案 1 :(得分:2)

如果右键单击该文件,在SVN菜单下我相信有一个名为Diff的命令。这将打开并突出显示我认为的本地版本和repo版本之间的差异。

如果您愿意,也可以从命令行执行diff。

答案 2 :(得分:1)

当我在Windows上使用Tortoise开始使用SVN时,我遇到了类似的问题。每当我需要复制文件夹时 - 例如当创建一个基于另一个已经存在的插件的新插件时 - 我在工作副本中快乐地复制+粘贴它。

我不知道的是,当您这样做时,您将复制.svn元数据目录。这会导致颠覆无休止的混乱 - 如果您使用图形客户端,新目录似乎已正确签入,并且客户端在每次提交后都会显示一个干净的盘子。但是,新目录永远不会被检入

当您在其他地方签出新的工作副本时,您会注意到这一点,然后您被搞砸了,因为这些文件从未受版本控制。我花了半天的时间来解决这个问题。

当您需要复制工作副本中的目录时,请先将其导出,然后再将其添加回来。

答案 3 :(得分:1)

到目前为止,我将不得不假设没有可靠的方法来执行此操作,除非您执行新的提交并比较两个目录树。如果.snv目录缺少数据但实际上没有损坏,则工作副本中没有足够的信息来检测某些文件已经消失。

尽管WC-NG可能会更好地(或不是)更改此内容,但目前的格式并不是那么坚固。