由于“之前的操作尚未完成”,导致Subversion卡住了?

243
如果我尝试更新我的子版本库,它会提示我运行清理。如果我运行清理,它会说一个文件丢失。(今天早上我从家里电脑删除了一大堆无法提交的文件,但是我从工作中提交了同样的文件集,现在我的家庭仓库受损了)。因此,清理会显示以下内容:
清理无法处理 blablabla 无法将文件 blablabla 设置为读写:系统找不到指定的文件。
如果我更新它会说:
命令:更新 错误:之前的操作尚未完成;如果中断,请运行“cleanup” 错误:请执行“Cleanup”命令 完成!
我该如何解决这个问题?

(除了删除所有的SVN信息并重新检出之外) - rockstardev
3
这个烦人的错误就是我讨厌 SVN 的原因。每次面对它,我都得重新 checkout,因为从根目录或父级目录清理都不管用。但最大的问题是,在这种情况下它不显示覆盖图标,所以我不知道哪些文件已被更改备份,然后再 checkout。 - phuclv
29个回答

341

通常情况下没有必要新建结帐或复制。

我刚刚通过这个链接(链接)解决了一个类似的问题,该问题涉及到“之前的操作未完成”的错误。

看来,在处理命令/操作时svn有时会卡住。所有这些操作都存储在.svn文件夹中的数据库文件wc.db中。

通过在我的结帐目录中下载SQLite并运行以下命令:

sqlite3.exe .svn/wc.db "select * from work_queue"

您可以获得所有待处理操作的列表。这些操作是错误提示为“未完成”的操作。

通过运行

sqlite3.exe .svn/wc.db "delete from work_queue"

所有旧的操作都已从工作队列中删除,错误消失了。无需新的检查或其他操作。


5
在尝试上述解决方案之前,应该始终尝试运行清理操作。这将有助于让陷入困境的SVN仓库恢复运行,而无需检出新的工作副本。 - Sigurd V
7
下载sqlite.exe并运行删除操作实际上比检查和合并要快得多——回答很好。 - Jeffrey Knight
13
我也遇到了一个“锁定”的问题,但通过运行“svn cleanup”成功解决了。 - Jeffrey Knight
1
我在Debian上运行了这个程序,使用apt-get install sqlite3进行安装,然后你就可以运行上述命令而不需要.exe。 - Richard Merchant
5
我也收到了“锁定”的消息,但是我运行了“清理”命令,并勾选了“打破锁定”复选框,然后它就起作用了。 - McCoy
显示剩余7条评论

124

运行控制台svn cleanup已经帮我解决了同样的问题。


22
使用控制台命令 svn cleanup 可以提供比使用Tortoise Explorer插件更详细的信息,这使得它在这种情况下非常有用。 - Brandon S
7
运行控制台命令可能会提供足够的信息来解决问题。这是一个更好的答案。 - DDS
1
我选择了最顶层的文件夹并使用了 svn cleanup,谢谢。 - deadfish
当您运行 svn cleanup 命令时,请确保已提升控制台权限。我最初没有这样做,因此出现了“读取-写入:拒绝访问”的错误提示。 - Tony
你如何访问控制台? - Tony
显示剩余7条评论

104

我也遇到过类似的情况。你尝试从你工作空间的根目录运行清理操作了吗?有时候在一个子目录(出现问题的地方)运行清理操作是无效的,而从工作空间的根目录运行清理操作却可以解决问题。

如果这样还是不行,因为你已经删除了某个子目录。那么尝试从它的父级目录删除一个层级,然后重新尝试更新和清理操作。(假设该父级目录不是根目录)

如果在任何层级上进行的清理尝试都没有成功,那么不幸的答案就是要检出一个新的工作副本。


4
用于清理子目录的命令!对我有效! - Franva
1
如果你正在阅读这个,那么你可能遇到了麻烦 :) 我从来没有在 Git 中遇到过这样的混乱(至少目前还没有)。我最终不得不清理/还原/清理等等任何我能够做到的目录,如果 Svn 允许我的话。 - aliopi
1
我在Windows FileExplorer(使用Turtoise)中运行了清理操作,它给了我一个更详细的错误提示,告诉我哪个文件有问题。某种程度上,SVN丢失了那个文件,一个名为*.cache的可恶文件,所以我拿了另一个.cache文件并将其重命名以替换丢失的文件,然后运行清理操作,这次没有错误,一切都解决了! - Jhollman

26

我遇到了类似的问题。使用Process Explorer工具后发现,另一个程序(Notepad ++)持有SVN尝试删除的文件夹句柄。在关闭Notepad ++之后,“清理”操作就能够成功运行。


这可能会导致问题,就像问题中提到的那样。但是我担心,如果问题已经发生,它无法消除它。 - Gangnus

25

我曾尝试了这里的大部分投票答案和其他一些答案,但都没有成功。我的WORK_QUEUE表是空的,我也无法在更高级别的文件夹中清理。以下方法是有效的(通过Tortoise SVN):

  • 右键单击文件夹
  • 转到TortoiseSVN -> 清理...
  • 确保选中打破锁定选项并单击“确定”

现在清理操作已经成功完成,我可以继续工作。无需下载sqlite3或其他复杂的解决方案。


2
打破锁并不是我想象中的那样。它只会打破在你的系统上使用的本地锁,而不是其他人设置的锁。 - Brian Carlton
1
sqlite3有时候能解决我的问题,但那种方法太难记住了,而且清理失败的情况也很常见。这种方法真是救了我一命。 - s.c
1
非常感谢,这对我很有帮助!勾选“打破锁定”是关键。 - Anshul Gupta

20

在我添加一个已经在SVN中的jar包后,我遇到了这个问题,我添加了相同名称的新版本。

在Eclipse中,我尝试了以下步骤:

  1. 右键单击文件夹 > 团队 > 刷新/清理。
  2. 清理、构建和刷新我的应用程序。
  3. 重新启动Eclipse。

通过以上步骤,我成功地进行了同步。


1
对我来说有效。只是第三步不是必须的(重新启动Eclipse)。 - jpmottin
这对我也起作用了,我尝试了很多方法,但都没有成功。我关闭了我的 Visual Studio 并运行了清理操作。非常感谢。 - AhammadaliPK
右键单击文件夹 > 团队 > 刷新/清理 就足够了。 - likeGreen

11

我使用乌龟SVN。当清理失败时,请检查清理选项。

确保勾选了打破锁定选项。

清理步骤:

  • 在资源管理器中单击左键
  • 选择“Tortoise SVN”->“清理…”菜单
  • 勾选“打破锁定”并按“确定”

虽然已经回答了,但有时图片更加直观:

输入图像描述


9

在文件打开的情况下尝试运行清理操作会导致问题。一旦关闭应用程序(Visual Studio),运行清理操作就会成功。


1
请确认您的文件未被其他用户使用或以管理员身份在Windows上签出,确保返回值为True。 - froggythefrog

4

我遇到了同样的问题,我的情况是我在使用应用程序时使用svn tortoise。在Windows的cmd shell下以root模式应用svn cleanup,然后svn update.... 然后您可以回到应用程序模式,它将完美地工作!


3

我也遇到了同样的问题,尝试了以下方法:

1. 尝试结束与svn相关的进程,例如TSVNCache.exe和TortoiseProc。 2. 将未版本控制的文件还原并删除svn中相应的文件。 3. 使用命令提示符运行"svn cleanup"来进行清理。

最终,在重启桌面电脑后问题得以解决,所以对我来说重启系统是可以解决问题的。


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