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

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

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

1
我遇到了一个错误,例如“无法更改文件'/Users/Code/UnitTest.cpp'的权限:没有这样的文件或目录”。子版本对一个不再存在的文件感到困惑。我只需执行类似于“echo ABCD >> /Users/Code/UnitTest.cpp”的操作来创建该文件的副本,然后进行清理。它起作用了。

1

我遇到了同样的问题,以下是解决方法:

  1. 将文件夹和文件复制到另一个位置,比如一个文件夹中(我最近更改了我的文件,但提交失败并导致了这个问题)
  2. 检出一个新的工作副本
  3. 从文件夹中将更改后的文件复制到你的工作副本,并覆盖现有文件。现在应该可以进行提交/更新

1
我最初遇到这个问题是在尝试使用TortoiseSVN进行签入时。最初,TortoiseSVN清理和控制台svn清理都失败了,并显示与原帖相似的消息。
但我的解决方法(意外发现)只是等待几分钟。我认为TSVNCache在签入时仍然持有其中一些文件。

1

我使用的解决方法:

  1. 将目录内容剪切并复制到另一个文件夹中。
  2. 在空文件夹上通过命令行运行清理操作。
  3. 将文件再次复制回原始文件夹。

完成,但我无法解释为什么会出现这种情况。 如果不删除文件,则清理命令会提示无法读取/写入这些文件。


1

从主文件夹中删除svn,并用来自其他地方的另一个可行副本进行替换,然后进行更新。svn文件夹通常是一个隐藏文件夹。因此,在执行上述步骤之前,请确保取消隐藏该文件夹。


1

除了Sigurd V的答案(你应该先尝试),一些较大的代码库有多个“.svn”文件夹,而不一定是在根目录中锁定任务的那个。

如果是这种情况,您必须检查每个文件夹。如果您已经拥有SQLite和Powershell,则可以快速找到有问题的文件夹。

要查找哪些文件夹被锁定,请运行以下命令(替换path\to\sqlite.exe):

Get-ChildItem -Path . -Filter '.svn' -Recurse -Hidden | foreach { $toFind = $_.FullName + "\wc.db" ; gci $toFind | foreach { echo $_.FullName ; path\to\sqlite.exe $_.FullName "select * from work_queue" } }

这将给出一个.svn文件夹列表,并列出每个文件夹下的任何当前任务。

如果有任何未完成的任务,请对每个任务运行以下命令(替换path\to\sqlite.exepath\to\.svn\wc.db):

path\to\sqlite.exe path\to\.svn\wc.db "delete from work_queue"


1
这可能发生在您尝试 SVN 切换 / 清理时仍有文件处于打开状态。我创建了一个新文件的分支,并在另一个应用程序中打开它。切换到另一个分支无法删除该文件,导致切换失败。这也导致 svn cleanup 失败,但 Tortoise SVN UI 没有显示原因。从控制台窗口(在根文件夹上)运行 svn cleanup 明确显示错误:file\location\file.ext:由于正在被其他进程使用,因此无法访问该文件。关闭任何打开的文件句柄/窗口并运行控制台 svn cleanup 然后可以使清理正常工作。长话短说 - 在控制台中运行 svn cleanup 以查看更详细的错误信息。

1
在Eclipse中:
  1. 右键单击您的项目文件夹 > Team > 刷新/清理。
  2. 在Eclipse窗口中,选择Project菜单项下的clean选项
  3. 最后,重新启动Eclipse

0
请按照以下步骤操作:
1)进入你无法通过 svn 成功清理的目录(根文件夹或子文件夹)。
2)选择该目录中的 .svn 文件夹,剪切该文件夹并将其粘贴到单独的驱动器或单独的位置(不在svn目录中)。
3)现在返回该目录-右键单击并选择 TortoiseSVN -->Repo-browser 4) Checkout 该文件夹(它不会执行全新的检出)。
5)所有项目将再次被版本化,并修复svn的内部问题,问题应该得到解决。

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