我有一个Subversion工作副本,至少有一个丢失的文件(在修复树冲突时删除了本地副本)。这很有趣,因为文件是版本化的,它出现在存储库中,树冲突解决方案是100%本地的(它发生在更新时我没有事后提交)而且我已经运行了几次“svn cleanup”但是没有我的Subversion客户端(命令行svn和TortoiseSVN)可以检测到工作副本是否已损坏。甚至没有恢复所有更改都会恢复文件。
我会像往常一样修复它(在其他地方重新结账并使用WinMerge复制更改);我实际上有一个不同的问题:
如何测试工作副本的有效性?
当然,您可以随时查看新副本并使用文件比较实用程序,但......是不是有更好的方法?是否有工具可以验证相当于svnadmin verify
的工作副本?
===更新===
我有很好的答案可以防止工作副本损坏,但我的问题更多的是找到一种方法来100%确定工作副本是连贯的并与实际存储库内容链接;在其他工作中,相当于 svnadmin verify 命令的工作副本。
到目前为止,它看起来像:
Subversion不提供这样的工具,SVN数据格式甚至不允许写一个。
更新到修订版是一种似乎找到(并修复)某些问题的技术,虽然您经常需要来回恢复旧版本,我想它只能检测丢失的文件在修订范围内发生了变化。
查看新的工作副本看起来是唯一100%可靠的方法。
答案 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可能会更好地(或不是)更改此内容,但目前的格式并不是那么坚固。